Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 13b03aff authored by Ruchi Kandoi's avatar Ruchi Kandoi
Browse files

Vibrator: Low Power Mode: Vibrator is turned off when the device is in

Low Power Mode

Vibrator is disabled for all touching and typing inputs during low power mode.

Change-Id: I762be1d51eedbf3184d80ed51dc93a0d113a6d5d
parent 6af7d62d
Loading
Loading
Loading
Loading
+27 −7
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@ import android.provider.Settings;
import android.provider.Settings.SettingNotFoundException;
import android.provider.Settings.SettingNotFoundException;
import android.util.Slog;
import android.util.Slog;
import android.view.InputDevice;
import android.view.InputDevice;
import android.media.AudioManager;


import com.android.internal.app.IAppOpsService;
import com.android.internal.app.IAppOpsService;
import com.android.internal.app.IBatteryStats;
import com.android.internal.app.IBatteryStats;
@@ -73,6 +74,8 @@ public class VibratorService extends IVibratorService.Stub
    private boolean mInputDeviceListenerRegistered; // guarded by mInputDeviceVibrators
    private boolean mInputDeviceListenerRegistered; // guarded by mInputDeviceVibrators


    private int mCurVibUid = -1;
    private int mCurVibUid = -1;
    private boolean mLowPowerMode;
    private SettingsObserver mSettingObserver;


    native static boolean vibratorExists();
    native static boolean vibratorExists();
    native static void vibratorOn(long milliseconds);
    native static void vibratorOn(long milliseconds);
@@ -159,15 +162,15 @@ public class VibratorService extends IVibratorService.Stub


    public void systemReady() {
    public void systemReady() {
        mIm = (InputManager)mContext.getSystemService(Context.INPUT_SERVICE);
        mIm = (InputManager)mContext.getSystemService(Context.INPUT_SERVICE);
        mSettingObserver = new SettingsObserver(mH);


        mContext.getContentResolver().registerContentObserver(
        mContext.getContentResolver().registerContentObserver(
                Settings.System.getUriFor(Settings.System.VIBRATE_INPUT_DEVICES), true,
                Settings.System.getUriFor(Settings.System.VIBRATE_INPUT_DEVICES),
                new ContentObserver(mH) {
                true, mSettingObserver, UserHandle.USER_ALL);
                    @Override

                    public void onChange(boolean selfChange) {
        mContext.getContentResolver().registerContentObserver(
                        updateInputDeviceVibrators();
                Settings.Global.getUriFor(Settings.Global.LOW_POWER_MODE), false,
                    }
                mSettingObserver, UserHandle.USER_ALL);
                }, UserHandle.USER_ALL);


        mContext.registerReceiver(new BroadcastReceiver() {
        mContext.registerReceiver(new BroadcastReceiver() {
            @Override
            @Override
@@ -179,6 +182,17 @@ public class VibratorService extends IVibratorService.Stub
        updateInputDeviceVibrators();
        updateInputDeviceVibrators();
    }
    }


    private final class SettingsObserver extends ContentObserver {
        public SettingsObserver(Handler handler) {
            super(handler);
        }

        @Override
        public void onChange(boolean SelfChange) {
            updateInputDeviceVibrators();
        }
    }

    public boolean hasVibrator() {
    public boolean hasVibrator() {
        return doVibratorExists();
        return doVibratorExists();
    }
    }
@@ -346,6 +360,9 @@ public class VibratorService extends IVibratorService.Stub
    // Lock held on mVibrations
    // Lock held on mVibrations
    private void startVibrationLocked(final Vibration vib) {
    private void startVibrationLocked(final Vibration vib) {
        try {
        try {
            if (mLowPowerMode && vib.mStreamHint != AudioManager.STREAM_RING)
                    return;

            int mode = mAppOpsService.checkAudioOperation(AppOpsManager.OP_VIBRATE,
            int mode = mAppOpsService.checkAudioOperation(AppOpsManager.OP_VIBRATE,
                    vib.mStreamHint, vib.mUid, vib.mOpPkg);
                    vib.mStreamHint, vib.mUid, vib.mOpPkg);
            if (mode == AppOpsManager.MODE_ALLOWED) {
            if (mode == AppOpsManager.MODE_ALLOWED) {
@@ -425,6 +442,9 @@ public class VibratorService extends IVibratorService.Stub
                } catch (SettingNotFoundException snfe) {
                } catch (SettingNotFoundException snfe) {
                }
                }


                mLowPowerMode = Settings.Global.getInt(mContext.getContentResolver(),
                     Settings.Global.LOW_POWER_MODE, 0) != 0;

                if (mVibrateInputDevicesSetting) {
                if (mVibrateInputDevicesSetting) {
                    if (!mInputDeviceListenerRegistered) {
                    if (!mInputDeviceListenerRegistered) {
                        mInputDeviceListenerRegistered = true;
                        mInputDeviceListenerRegistered = true;