content: package com.android.datetimepicker;
  
  import android.app.Service;
  import android.content.Context;
  import android.database.ContentObserver;
  import android.net.Uri;
  import android.os.SystemClock;
  import android.os.Vibrator;
  import android.provider.Settings;
  
  /**
   * A simple utility class to handle haptic feedback.
   *
   * @deprecated This module is deprecated. Do not use this class.
   */
  @Deprecated
  public class HapticFeedbackController {
      private static final int VIBRATE_DELAY_MS = 125;
      private static final int VIBRATE_LENGTH_MS = 5;
  
      private static boolean checkGlobalSetting(Context context) {
          return Settings.System.getInt(context.getContentResolver(),
                  Settings.System.HAPTIC_FEEDBACK_ENABLED, 0) == 1;
      }
  
      private final Context mContext;
      private final ContentObserver mContentObserver;
  
      private Vibrator mVibrator;
      private boolean mIsGloballyEnabled;
      private long mLastVibrate;
  
      public HapticFeedbackController(Context context) {
          mContext = context;
          mContentObserver = new ContentObserver(null) {
              @Override
              public void onChange(boolean selfChange) {
                  mIsGloballyEnabled = checkGlobalSetting(mContext);
              }
          };
      }
  
      /**
       * Call to setup the controller.
       */
      public void start() {
          mVibrator = (Vibrator) mContext.getSystemService(Service.VIBRATOR_SERVICE);
  
          // Setup a listener for changes in haptic feedback settings
          mIsGloballyEnabled = checkGlobalSetting(mContext);
          Uri uri = Settings.System.getUriFor(Settings.System.HAPTIC_FEEDBACK_ENABLED);
          mContext.getContentResolver().registerContentObserver(uri, false, mContentObserver);
      }
  
      /**
       * Call this when you don't need the controller anymore.
       */
      public void stop() {
          mVibrator = null;
          mContext.getContentResolver().unregisterContentObserver(mContentObserver);
      }
  
      /**
       * Try to vibrate. To prevent this becoming a single continuous vibration, nothing will
       * happen if we have vibrated very recently.
       */
      public void tryVibrate() {
          if (mVibrator != null && mIsGloballyEnabled) {
              long now = SystemClock.uptimeMillis();
              // We want to try to vibrate each individual tick discretely.
              if (now - mLastVibrate >= VIBRATE_DELAY_MS) {
                  mVibrator.vibrate(VIBRATE_LENGTH_MS);
                  mLastVibrate = now;
              }
          }
      }
  }
  