Add primary switch for vibration settings screen

Add primary switch that updates the VIBRATE_ON user setting.

Update all settings in this page to be disabled when this main toggle is
off.

Bug: 30028435
Test: VibrationMainSwitchPreferenceControllerTest
Change-Id: I752ca3b914c46678a1347034c5b6cf24fd40cc13
This commit is contained in:
Lais Andrade
2022-01-14 02:26:15 +00:00
parent eaaf5331d6
commit fd54fc34c6
14 changed files with 563 additions and 65 deletions

View File

@@ -21,7 +21,6 @@ import android.database.ContentObserver;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Handler;
import android.os.VibrationAttributes;
import android.os.Vibrator;
import android.provider.DeviceConfig;
import android.provider.Settings;
@@ -57,8 +56,9 @@ public class VibrationRampingRingerTogglePreferenceController
private final DeviceConfigProvider mDeviceConfigProvider;
private final ContentObserver mSettingObserver;
private final Vibrator mVibrator;
private final AudioManager mAudioManager;
private final VibrationPreferenceConfig mRingVibrationPreferenceConfig;
private final VibrationPreferenceConfig.SettingObserver mRingSettingObserver;
private Preference mPreference;
@@ -70,8 +70,10 @@ public class VibrationRampingRingerTogglePreferenceController
String preferenceKey, DeviceConfigProvider deviceConfigProvider) {
super(context, preferenceKey);
mDeviceConfigProvider = deviceConfigProvider;
mVibrator = context.getSystemService(Vibrator.class);
mAudioManager = context.getSystemService(AudioManager.class);
mRingVibrationPreferenceConfig = new RingVibrationPreferenceConfig(context);
mRingSettingObserver = new VibrationPreferenceConfig.SettingObserver(
mRingVibrationPreferenceConfig);
mSettingObserver = new ContentObserver(new Handler(/* async= */ true)) {
@Override
public void onChange(boolean selfChange, Uri uri) {
@@ -91,18 +93,16 @@ public class VibrationRampingRingerTogglePreferenceController
@Override
public void onStart() {
mRingSettingObserver.register(mContext.getContentResolver());
mContext.getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.APPLY_RAMPING_RINGER),
/* notifyForDescendants= */ false,
mSettingObserver);
mContext.getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.RING_VIBRATION_INTENSITY),
/* notifyForDescendants= */ false,
mSettingObserver);
}
@Override
public void onStop() {
mRingSettingObserver.unregister(mContext.getContentResolver());
mContext.getContentResolver().unregisterContentObserver(mSettingObserver);
}
@@ -110,6 +110,7 @@ public class VibrationRampingRingerTogglePreferenceController
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
mPreference = screen.findPreference(getPreferenceKey());
mRingSettingObserver.onDisplayPreference(this, mPreference);
mPreference.setEnabled(isRingVibrationEnabled());
}
@@ -141,9 +142,8 @@ public class VibrationRampingRingerTogglePreferenceController
}
private boolean isRingVibrationEnabled() {
final int ringIntensity = Settings.System.getInt(mContext.getContentResolver(),
Settings.System.RING_VIBRATION_INTENSITY,
mVibrator.getDefaultVibrationIntensity(VibrationAttributes.USAGE_RINGTONE));
return ringIntensity != Vibrator.VIBRATION_INTENSITY_OFF;
return mRingVibrationPreferenceConfig.isPreferenceEnabled()
&& (mRingVibrationPreferenceConfig.readIntensity()
!= Vibrator.VIBRATION_INTENSITY_OFF);
}
}