javauis/nokiauiapi_qt/javasrc/com/nokia/mid/ui/DeviceControl.java
author hgs
Fri, 29 Oct 2010 11:49:32 +0300
changeset 87 1627c337e51e
parent 72 1f0034e370aa
permissions -rw-r--r--
v2.2.21_1
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
72
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     1
/*
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     2
* Copyright (c) 2006-2007 Nokia Corporation and/or its subsidiary(-ies).
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     3
* All rights reserved.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     4
* This component and the accompanying materials are made available
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     5
* under the terms of "Eclipse Public License v1.0"
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     6
* which accompanies this distribution, and is available
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     7
* at the URL "http://www.eclipse.org/legal/epl-v10.html".
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     8
*
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
     9
* Initial Contributors:
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    10
* Nokia Corporation - initial contribution.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    11
*
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    12
* Contributors:
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    13
*
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    14
* Description:  Provides methods for controlling vibrator and screen backlight.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    15
*
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    16
*/
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    17
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    18
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    19
package com.nokia.mid.ui;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    20
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    21
import org.eclipse.swt.internal.qt.OS;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    22
import org.eclipse.swt.widgets.Internal_PackageSupport;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    23
import org.eclipse.swt.internal.extension.DisplayExtension;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    24
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    25
/**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    26
 * <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    27
 * DeviceControl provides a collection of methods to control some of the special
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    28
 * features available in mobile devices, e.g., vibrator, screen (LCD)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    29
 * backlight, and screen saver appearance.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    30
 * <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    31
 * This class is thread safe.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    32
 * @version 1.0
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    33
 * @since 1.0
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    34
 */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    35
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    36
public class DeviceControl
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    37
{
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    38
    // error string for negative duration
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    39
    private static final String ERR_NEGATIVE_DURATION_STRING =
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    40
        "Negative duration";
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    41
    private static int inactivityTime;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    42
    private static int vibraDuration;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    43
    private static boolean vibraSupported;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    44
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    45
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    46
     * Private constructor. This class can't be instantiated.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    47
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    48
    private DeviceControl()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    49
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    50
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    51
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    52
     * Function return the time since the last user activity in seconds.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    53
     * @since 1.4
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    54
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    55
    public static int getUserInactivityTime()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    56
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    57
        synchronized (DeviceControl.class)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    58
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    59
            if (DisplayExtension.getDisplayInstance() != null)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    60
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    61
                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    62
                {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    63
                    public void run()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    64
                    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    65
                        inactivityTime = OS.MobileDevice_getUserInactivityTime(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    66
                                             Internal_PackageSupport.initializeMobileDevice(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    67
                                                 Internal_PackageSupport.getDisplayInstance()));
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    68
                    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    69
                });
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    70
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    71
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    72
        return inactivityTime;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    73
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    74
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    75
     *  Function reset user inactivity time. Thus, if the screen saver should be
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    76
     *  wholly disabled, it is needed to call the function repeatedly for example in a
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    77
     *  separate thread. The delay between two calls should be smaller than
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    78
     *  the time-out of the screensaver (the time-out may be for example 15 seconds
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    79
     *  or more depending on the used device).
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    80
     *  @since 1.4
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    81
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    82
    public static void resetUserInactivityTime()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    83
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    84
        synchronized (DeviceControl.class)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    85
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    86
            if (DisplayExtension.getDisplayInstance() != null)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    87
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    88
                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    89
                {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    90
                    public void run()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    91
                    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    92
                        OS.MobileDevice_resetUserInactivityTime(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    93
                            Internal_PackageSupport.initializeMobileDevice(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    94
                                Internal_PackageSupport.getDisplayInstance()));
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    95
                    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    96
                });
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    97
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    98
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
    99
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   100
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   101
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   102
     *  Activates and deactivates lights on the device; the function
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   103
     *  can also be used for preventing screen saver appearance. Parameter
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   104
     *  num indicates the number of the device light to control.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   105
     *  Currently only one num parameter is specified:
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   106
     *  num value 0 is used for controlling the screen backlight.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   107
     *  Parameter level is a value between 0-100
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   108
     *  indicating the light brightness. In many implementations
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   109
     *  there in only two levels: lights on and off. Value 0 indicates
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   110
     *  a setting for lights off (monochrome displays) or other
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   111
     *  minimum brightness setting (color displays), all other level
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   112
     *  values (1-100) are used for setting the lights on, possibly
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   113
     *  with different brightness levels depending on the value. A more
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   114
     *  higher level value always results either the same brightness setting
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   115
     *  as a lower one, or a more brighter setting. For many products
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   116
     *  passing values 1-100 will just turn the lights on.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   117
     *  <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   118
     *  Note: Since in some devices key presses may turn on some device lights,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   119
     *  the light settings may be changed also by the system.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   120
     *  <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   121
     *  This function may also be used to prevent screen saver appearance
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   122
     *  (supported in S60 devices starting from S60 3rd Ed FP1,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   123
     *  except for some early FP1 devices). Calling this function once
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   124
     *  will delay the screen saver appearance but does not disable it permanently.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   125
     *  Thus, if the screen saver should be wholly disabled,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   126
     *  it is needed to call the function repeatedly for example in a
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   127
     *  separate thread. The delay between two calls should be smaller than
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   128
     *  the time-out of the screensaver (the time-out may be for example 15 seconds
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   129
     *  or more depending on the used device).
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   130
     *
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   131
     *  @param num is the number or id for light, 0 is used for display
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   132
     *  backlight, other numbers are currently left unspecified
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   133
     *  @param level the lighting level 0-100. 0 means "off" or other
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   134
     *  minimum lighting setting. For many devices greater
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   135
     *  than 0 value just means "light on".
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   136
     *  @throws java.lang.IllegalArgumentException if light num is not
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   137
     *  supported or level is not between 0-100.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   138
     *  @since 1.0
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   139
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   140
    public static void setLights(int aNum, int aLevel)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   141
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   142
        synchronized (DeviceControl.class)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   143
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   144
            if (aNum != 0)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   145
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   146
                throw new IllegalArgumentException("Light num is not supported");
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   147
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   148
            if (aLevel < 0 || aLevel > 100)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   149
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   150
                throw(new IllegalArgumentException("Level not between 0 and 100"));
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   151
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   152
            final int level = aLevel;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   153
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   154
            if (DisplayExtension.getDisplayInstance() != null)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   155
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   156
                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   157
                {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   158
                    public void run()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   159
                    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   160
                        OS.MobileDevice_setLight(Internal_PackageSupport.initializeMobileDevice(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   161
                                                     Internal_PackageSupport.getDisplayInstance()), level);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   162
                    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   163
                });
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   164
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   165
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   166
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   167
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   168
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   169
     *  Does flashing lights effect for specific duration.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   170
     *  This is a generic method for doing implementation specific light
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   171
     *  flashing effect. This could be used as feedback e.g. in games.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   172
     *  If the device is not capable of doing the effect the method call
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   173
     *  silently returns. In most devices there is at least screen backlight
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   174
     *  and different LEDs that could be used for the effect. There might
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   175
     *  be maximum limit in implementation for the duration: implementation
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   176
     *  stops automatically the effect after maximum duration is reached.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   177
     *  When the flashing lights effect ends the implementation sets the
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   178
     *  lights back to the light state the device was before the
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   179
     *  method call.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   180
     *
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   181
     *  @param duration duration in milliseconds the effect should be
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   182
     *  active
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   183
     *  @throws java.lang.IllegalArgumentException if duration < 0
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   184
     *  @since 1.0
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   185
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   186
    public static void flashLights(long aDuration)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   187
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   188
        synchronized (DeviceControl.class)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   189
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   190
            if (aDuration < 0)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   191
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   192
                throw new IllegalArgumentException(ERR_NEGATIVE_DURATION_STRING);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   193
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   194
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   195
            final int duration;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   196
            if (aDuration > java.lang.Integer.MAX_VALUE)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   197
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   198
                duration = java.lang.Integer.MAX_VALUE;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   199
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   200
            else
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   201
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   202
                duration =(int)aDuration;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   203
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   204
            if (DisplayExtension.getDisplayInstance() != null)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   205
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   206
                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   207
                {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   208
                    public void run()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   209
                    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   210
                        OS.MobileDevice_flashLights(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   211
                            Internal_PackageSupport.initializeMobileDevice(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   212
                                Internal_PackageSupport.getDisplayInstance()),duration);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   213
                    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   214
                });
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   215
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   216
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   217
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   218
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   219
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   220
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   221
     *  Activates the vibra device with given duration and frequency.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   222
     *  Device vibra feedback can be used, for example, as tactile feedback
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   223
     *  effect e.g. in games. The frequency of the vibra device
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   224
     *  can be controlled with freq parameter. The frequency is a logical
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   225
     *  number between 0 to 100, value 100 being the maximum frequency,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   226
     *  value 0 always means no vibra, value 1 always needs to give some
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   227
     *  effect. If a device doesn't support different frequencies then
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   228
     *  the just frequency allowed by device is used.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   229
     *  <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   230
     *  Parameter duration is used to indicate duration of vibra
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   231
     *  in milliseconds. Method won't block for the vibra operation.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   232
     *  There is some maximum limit in implementation for the
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   233
     *  duration. Duration values that exceed this limit result a
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   234
     *  maximum vibration effect.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   235
     *  <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   236
     *  If the method is called during a previous vibra operation activated
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   237
     *  from this method, the previous vibra operation is stopped and the new
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   238
     *  vibra device is activated with the new given parameters.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   239
     *  <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   240
     *  IllegalStateException will be thrown if the freq is not 0 and
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   241
     *  if device doesn't allow vibra to be used, for example,
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   242
     *  it is common that when the device is being charged in desk stand or
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   243
     *  there is incoming call that vibra operation is not allowed.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   244
     *  IllegalStateException will be thrown if there
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   245
     *  is no vibra capability in the device.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   246
     *  <p>
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   247
     *  Note that if the frequency is 0, and the device doesn't have vibra
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   248
     *  capability IllegalStateException is thrown. This means that method
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   249
     *  call <code>DeviceControl.doVibra(0,0);</code> can be used to detect
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   250
     *  whether vibra is supported (IllegalStateException not thrown)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   251
     *  or not (IllegalStateException thrown) without any vibra operation
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   252
     *  being done even if it is supported.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   253
     *  @param freq the frequency of the vibra device. Value 0 can be used
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   254
     *  for detection whether there is vibra device or not. 100 means
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   255
     *  maximum frequency value of specific system. Value 1 must always
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   256
     *  result a minimum non-zero vibra operation.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   257
     *  @param duration in milliseconds the duration the vibra device is
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   258
     *  active
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   259
     *  @throws java.lang.IllegalStateException For freq values 1-100:
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   260
     *  the use of vibra device isn't allowed or the system doesn't have
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   261
     *  vibra device. For frequency value 0: the device doesn't have vibra
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   262
     *  device.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   263
     *  @throws java.lang.IllegalArgumentException if duration or freq is
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   264
     *  < 0, or freq is > 100.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   265
     *  @since 1.0
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   266
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   267
    public static void startVibra(int aFreq, long aDuration)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   268
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   269
        synchronized (DeviceControl.class)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   270
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   271
            if ((aFreq < 0) || (aFreq > 100) || (aDuration < 0))
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   272
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   273
                throw new java.lang.IllegalArgumentException();
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   274
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   275
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   276
            vibraDuration = (int)aDuration;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   277
            if (aDuration > java.lang.Integer.MAX_VALUE)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   278
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   279
                vibraDuration = java.lang.Integer.MAX_VALUE;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   280
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   281
            if (aFreq == 0)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   282
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   283
                // frequency 0 disables vibration
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   284
                vibraDuration = 0;
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   285
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   286
            if (DisplayExtension.getDisplayInstance() != null)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   287
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   288
                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   289
                {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   290
                    public void run()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   291
                    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   292
                        vibraSupported = OS.MobileDevice_vibration(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   293
                                             Internal_PackageSupport.initializeMobileDevice(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   294
                                                 Internal_PackageSupport.getDisplayInstance()),vibraDuration);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   295
                    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   296
                });
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   297
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   298
            if (!vibraSupported)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   299
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   300
                throw new java.lang.IllegalStateException();
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   301
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   302
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   303
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   304
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   305
    /**
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   306
     *  Stops the vibra device. This method is for manually stopping vibra
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   307
     *  operation activated with
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   308
     *  {@link DeviceControl#startVibra(int freq, long duration)}
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   309
     *  method.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   310
     *  If the vibra device is not active the method silently returns.
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   311
     *  @since 1.0
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   312
     */
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   313
    public static void stopVibra()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   314
    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   315
        synchronized (DeviceControl.class)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   316
        {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   317
            if (DisplayExtension.getDisplayInstance() != null)
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   318
            {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   319
                Internal_PackageSupport.getDisplayInstance().syncExec(new Runnable()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   320
                {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   321
                    public void run()
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   322
                    {
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   323
                        vibraSupported = OS.MobileDevice_vibration(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   324
                                             Internal_PackageSupport.initializeMobileDevice(
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   325
                                                 Internal_PackageSupport.getDisplayInstance()),0);
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   326
                    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   327
                });
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   328
            }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   329
        }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   330
    }
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   331
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   332
}
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   333
1f0034e370aa v2.2.15_1
hgs
parents:
diff changeset
   334