diff options
Diffstat (limited to 'core/java')
-rw-r--r-- | core/java/android/app/ContextImpl.java | 4 | ||||
-rw-r--r-- | core/java/android/os/SystemVibrator.java | 94 | ||||
-rw-r--r-- | core/java/android/os/Vibrator.java | 86 | ||||
-rw-r--r-- | core/java/android/view/VolumePanel.java | 2 | ||||
-rw-r--r-- | core/java/com/android/internal/app/PlatLogoActivity.java | 5 | ||||
-rw-r--r-- | core/java/com/android/internal/app/ShutdownThread.java | 3 |
6 files changed, 119 insertions, 75 deletions
diff --git a/core/java/android/app/ContextImpl.java b/core/java/android/app/ContextImpl.java index 138a88f..0645aa9 100644 --- a/core/java/android/app/ContextImpl.java +++ b/core/java/android/app/ContextImpl.java @@ -82,7 +82,7 @@ import android.os.Process; import android.os.RemoteException; import android.os.ServiceManager; import android.os.UserId; -import android.os.Vibrator; +import android.os.SystemVibrator; import android.os.storage.StorageManager; import android.telephony.TelephonyManager; import android.content.ClipboardManager; @@ -455,7 +455,7 @@ class ContextImpl extends Context { registerService(VIBRATOR_SERVICE, new ServiceFetcher() { public Object createService(ContextImpl ctx) { - return new Vibrator(); + return new SystemVibrator(); }}); registerService(WALLPAPER_SERVICE, WALLPAPER_FETCHER); diff --git a/core/java/android/os/SystemVibrator.java b/core/java/android/os/SystemVibrator.java new file mode 100644 index 0000000..7c5a47e --- /dev/null +++ b/core/java/android/os/SystemVibrator.java @@ -0,0 +1,94 @@ +/* + * Copyright (C) 2012 The Android Open Source Project + * + * 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 android.os; + +import android.util.Log; + +/** + * Vibrator implementation that controls the main system vibrator. + * + * @hide + */ +public class SystemVibrator extends Vibrator { + private static final String TAG = "Vibrator"; + + private final IVibratorService mService; + private final Binder mToken = new Binder(); + + public SystemVibrator() { + mService = IVibratorService.Stub.asInterface( + ServiceManager.getService("vibrator")); + } + + @Override + public boolean hasVibrator() { + if (mService == null) { + Log.w(TAG, "Failed to vibrate; no vibrator service."); + return false; + } + try { + return mService.hasVibrator(); + } catch (RemoteException e) { + } + return false; + } + + @Override + public void vibrate(long milliseconds) { + if (mService == null) { + Log.w(TAG, "Failed to vibrate; no vibrator service."); + return; + } + try { + mService.vibrate(milliseconds, mToken); + } catch (RemoteException e) { + Log.w(TAG, "Failed to vibrate.", e); + } + } + + @Override + public void vibrate(long[] pattern, int repeat) { + if (mService == null) { + Log.w(TAG, "Failed to vibrate; no vibrator service."); + return; + } + // catch this here because the server will do nothing. pattern may + // not be null, let that be checked, because the server will drop it + // anyway + if (repeat < pattern.length) { + try { + mService.vibratePattern(pattern, repeat, mToken); + } catch (RemoteException e) { + Log.w(TAG, "Failed to vibrate.", e); + } + } else { + throw new ArrayIndexOutOfBoundsException(); + } + } + + @Override + public void cancel() { + if (mService == null) { + return; + } + try { + mService.cancelVibrate(mToken); + } catch (RemoteException e) { + Log.w(TAG, "Failed to cancel vibration.", e); + } + } +} diff --git a/core/java/android/os/Vibrator.java b/core/java/android/os/Vibrator.java index 3769cfe..3f783c9 100644 --- a/core/java/android/os/Vibrator.java +++ b/core/java/android/os/Vibrator.java @@ -16,61 +16,37 @@ package android.os; -import android.util.Log; +import android.content.Context; /** * Class that operates the vibrator on the device. * <p> * If your process exits, any vibration you started with will stop. * </p> + * + * To obtain an instance of the system vibrator, call + * {@link Context#getSystemService} with {@link Context#VIBRATOR_SERVICE} as argument. */ -public class Vibrator -{ - private static final String TAG = "Vibrator"; - - IVibratorService mService; - private final Binder mToken = new Binder(); - - /** @hide */ - public Vibrator() - { - mService = IVibratorService.Stub.asInterface( - ServiceManager.getService("vibrator")); +public abstract class Vibrator { + /** + * @hide to prevent subclassing from outside of the framework + */ + public Vibrator() { } /** - * Check whether the hardware has a vibrator. Returns true if a vibrator - * exists, else false. + * Check whether the hardware has a vibrator. + * + * @return True if the hardware has a vibrator, else false. */ - public boolean hasVibrator() { - if (mService == null) { - Log.w(TAG, "Failed to vibrate; no vibrator service."); - return false; - } - try { - return mService.hasVibrator(); - } catch (RemoteException e) { - } - return false; - } + public abstract boolean hasVibrator(); /** - * Turn the vibrator on. + * Vibrate constantly for the specified period of time. * * @param milliseconds The number of milliseconds to vibrate. */ - public void vibrate(long milliseconds) - { - if (mService == null) { - Log.w(TAG, "Failed to vibrate; no vibrator service."); - return; - } - try { - mService.vibrate(milliseconds, mToken); - } catch (RemoteException e) { - Log.w(TAG, "Failed to vibrate.", e); - } - } + public abstract void vibrate(long milliseconds); /** * Vibrate with a given pattern. @@ -90,38 +66,10 @@ public class Vibrator * @param repeat the index into pattern at which to repeat, or -1 if * you don't want to repeat. */ - public void vibrate(long[] pattern, int repeat) - { - if (mService == null) { - Log.w(TAG, "Failed to vibrate; no vibrator service."); - return; - } - // catch this here because the server will do nothing. pattern may - // not be null, let that be checked, because the server will drop it - // anyway - if (repeat < pattern.length) { - try { - mService.vibratePattern(pattern, repeat, mToken); - } catch (RemoteException e) { - Log.w(TAG, "Failed to vibrate.", e); - } - } else { - throw new ArrayIndexOutOfBoundsException(); - } - } + public abstract void vibrate(long[] pattern, int repeat); /** * Turn the vibrator off. */ - public void cancel() - { - if (mService == null) { - return; - } - try { - mService.cancelVibrate(mToken); - } catch (RemoteException e) { - Log.w(TAG, "Failed to cancel vibration.", e); - } - } + public abstract void cancel(); } diff --git a/core/java/android/view/VolumePanel.java b/core/java/android/view/VolumePanel.java index 9152cc3..110c239 100644 --- a/core/java/android/view/VolumePanel.java +++ b/core/java/android/view/VolumePanel.java @@ -263,7 +263,7 @@ public class VolumePanel extends Handler implements OnSeekBarChangeListener, Vie | LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH); mToneGenerators = new ToneGenerator[AudioSystem.getNumStreamTypes()]; - mVibrator = new Vibrator(); + mVibrator = (Vibrator)context.getSystemService(Context.VIBRATOR_SERVICE); mVoiceCapable = context.getResources().getBoolean(R.bool.config_voice_capable); mShowCombinedVolumes = !mVoiceCapable && !useMasterVolume; diff --git a/core/java/com/android/internal/app/PlatLogoActivity.java b/core/java/com/android/internal/app/PlatLogoActivity.java index a0e125a..37567fd 100644 --- a/core/java/com/android/internal/app/PlatLogoActivity.java +++ b/core/java/com/android/internal/app/PlatLogoActivity.java @@ -29,9 +29,9 @@ import android.widget.ImageView; import android.widget.Toast; public class PlatLogoActivity extends Activity { + Vibrator mZzz; Toast mToast; ImageView mContent; - Vibrator mZzz = new Vibrator(); int mCount; final Handler mHandler = new Handler(); @@ -63,7 +63,8 @@ public class PlatLogoActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - + + mZzz = (Vibrator)getSystemService(VIBRATOR_SERVICE); mToast = Toast.makeText(this, "Android 4.0: Ice Cream Sandwich", Toast.LENGTH_SHORT); mContent = new ImageView(this); diff --git a/core/java/com/android/internal/app/ShutdownThread.java b/core/java/com/android/internal/app/ShutdownThread.java index 77d0c97..6a46929 100644 --- a/core/java/com/android/internal/app/ShutdownThread.java +++ b/core/java/com/android/internal/app/ShutdownThread.java @@ -37,6 +37,7 @@ import android.os.ServiceManager; import android.os.SystemClock; import android.os.SystemProperties; import android.os.Vibrator; +import android.os.SystemVibrator; import android.os.storage.IMountService; import android.os.storage.IMountShutdownObserver; @@ -399,7 +400,7 @@ public final class ShutdownThread extends Thread { } } else if (SHUTDOWN_VIBRATE_MS > 0) { // vibrate before shutting down - Vibrator vibrator = new Vibrator(); + Vibrator vibrator = new SystemVibrator(); try { vibrator.vibrate(SHUTDOWN_VIBRATE_MS); } catch (Exception e) { |