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

Commit 561333ef authored by Jason Chiu's avatar Jason Chiu Committed by Android (Google) Code Review
Browse files

Merge "[Catalyst] Migrate tap & click sounds preference" into main

parents 22c60a4a 56d81aa7
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -183,7 +183,7 @@

    <!-- Touch sounds -->
    <SwitchPreferenceCompat
        android:key="touch_sounds"
        android:key="sound_effects_enabled"
        android:title="@string/touch_sounds_title"
        android:order="-30"/>

+3 −0
Original line number Diff line number Diff line
@@ -129,6 +129,9 @@ const val KEY_CHARGING_SOUNDS = "charging_sounds"
/** Contract key for the "Docking sounds" setting. */
const val KEY_DOCKING_SOUNDS = "docking_sounds"

/** Contract key for the "Tap & click sounds" setting. */
const val KEY_TOUCH_SOUNDS = "touch_sounds"

/** Contract key for the "Remove animation" setting. */
const val KEY_REMOVE_ANIMATION = "remove_animation"

+1 −0
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ open class SoundScreen : PreferenceScreenMixin, PreferenceIconProvider {
                +ScreenLockSoundPreference() order -45
                +ChargingSoundPreference() order -40
                +DockingSoundPreference() order -35
                +TouchSoundPreference() order -30
            }
        }

+91 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2025 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 com.android.settings.notification

import android.app.settings.SettingsEnums.ACTION_TOUCH_SOUND
import android.content.Context
import android.media.AudioManager
import android.provider.Settings.System.SOUND_EFFECTS_ENABLED
import com.android.settings.R
import com.android.settings.contract.KEY_TOUCH_SOUNDS
import com.android.settings.metrics.PreferenceActionMetricsProvider
import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyValueStoreDelegate
import com.android.settingslib.datastore.SettingsSystemStore
import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.metadata.SensitivityLevel
import com.android.settingslib.metadata.SwitchPreference
import com.android.settingslib.preference.SwitchPreferenceBinding
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch

// LINT.IfChange
class TouchSoundPreference :
    SwitchPreference(KEY, R.string.touch_sounds_title),
    PreferenceActionMetricsProvider,
    SwitchPreferenceBinding,
    PreferenceAvailabilityProvider {
    override val preferenceActionMetrics: Int
        get() = ACTION_TOUCH_SOUND

    override fun tags(context: Context) = arrayOf(KEY_TOUCH_SOUNDS)

    override fun isAvailable(context: Context) =
        context.resources.getBoolean(R.bool.config_show_touch_sounds)

    override fun storage(context: Context): KeyValueStore =
        object : KeyValueStoreDelegate {
            override val keyValueStoreDelegate
                get() = context.dataStore

            override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) {
                super.setValue(key, valueType, value)
                val isChecked = getValue(key, valueType) as Boolean
                val coroutineScope = CoroutineScope(Dispatchers.Default)
                coroutineScope.launch {
                    val audioManager = context.getSystemService(AudioManager::class.java)
                    if (isChecked) {
                        audioManager.loadSoundEffects()
                    } else {
                        audioManager.unloadSoundEffects()
                    }
                }
            }
        }

    override fun getReadPermissions(context: Context) = SettingsSystemStore.getReadPermissions()

    override fun getReadPermit(context: Context, callingPid: Int, callingUid: Int) =
        ReadWritePermit.ALLOW

    override fun getWritePermissions(context: Context) = SettingsSystemStore.getWritePermissions()

    override fun getWritePermit(context: Context, callingPid: Int, callingUid: Int) =
        ReadWritePermit.ALLOW

    override val sensitivityLevel
        get() = SensitivityLevel.NO_SENSITIVITY

    companion object {
        const val KEY = SOUND_EFFECTS_ENABLED

        private val Context.dataStore: KeyValueStore
            get() = SettingsSystemStore.get(this).apply { setDefaultValue(KEY, true) }
    }
}
// LINT.ThenChange(TouchSoundPreferenceController.java)
+5 −4
Original line number Diff line number Diff line
@@ -16,26 +16,26 @@

package com.android.settings.notification;

import static android.provider.Settings.System.SOUND_EFFECTS_ENABLED;

import static com.android.settings.notification.SettingPref.TYPE_SYSTEM;

import android.content.Context;
import android.media.AudioManager;
import android.os.AsyncTask;
import android.provider.Settings.System;

import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settingslib.core.lifecycle.Lifecycle;

// LINT.IfChange
public class TouchSoundPreferenceController extends SettingPrefController {

    private static final String KEY_TOUCH_SOUNDS = "touch_sounds";

    public TouchSoundPreferenceController(Context context, SettingsPreferenceFragment parent,
            Lifecycle lifecycle) {
        super(context, parent, lifecycle);
        mPreference = new SettingPref(
            TYPE_SYSTEM, KEY_TOUCH_SOUNDS, System.SOUND_EFFECTS_ENABLED, DEFAULT_ON) {
            TYPE_SYSTEM, SOUND_EFFECTS_ENABLED, SOUND_EFFECTS_ENABLED, DEFAULT_ON) {
            @Override
            protected boolean setSetting(final Context context, final int value) {
                AsyncTask.execute(new Runnable() {
@@ -60,3 +60,4 @@ public class TouchSoundPreferenceController extends SettingPrefController {
        return mContext.getResources().getBoolean(R.bool.config_show_touch_sounds);
    }
}
// LINT.ThenChange(TouchSoundPreference.kt)
Loading