From b5d57eaa582dc11ec7bd146eaa06e8546f5a6356 Mon Sep 17 00:00:00 2001 From: George Chang Date: Fri, 15 Mar 2024 04:28:17 +0000 Subject: [PATCH] Revert "settings(dev): Remove NFC stack logging control" This reverts commit a5bd1cf34fb450af15a5e70117206d500f8169b9. Bug: 329776725 Test: manual turn on/off debug logging. Merged-In: I3c6026e230c7d35f04d9771442fadbf040a84b94 Change-Id: Ica004bb5f22636777287acfe1226b0f6a650d4f7 --- .../DevelopmentSettingsDashboardFragment.java | 1 + .../NfcStackDebugLogPreferenceController.java | 82 +++++++++++++ ...StackDebugLogPreferenceControllerTest.java | 112 ++++++++++++++++++ 3 files changed, 195 insertions(+) create mode 100644 src/com/android/settings/development/NfcStackDebugLogPreferenceController.java create mode 100644 tests/unit/src/com/android/settings/development/NfcStackDebugLogPreferenceControllerTest.java diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java index cfa4a589cd0..6b38b28adc9 100644 --- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java +++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java @@ -686,6 +686,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra controllers.add(new BluetoothA2dpHwOffloadPreferenceController(context, fragment)); controllers.add(new BluetoothLeAudioHwOffloadPreferenceController(context, fragment)); controllers.add(new BluetoothMaxConnectedAudioDevicesPreferenceController(context)); + controllers.add(new NfcStackDebugLogPreferenceController(context)); controllers.add(new NfcSnoopLogPreferenceController(context, fragment)); controllers.add(new NfcVerboseVendorLogPreferenceController(context, fragment)); controllers.add(new ShowTapsPreferenceController(context)); diff --git a/src/com/android/settings/development/NfcStackDebugLogPreferenceController.java b/src/com/android/settings/development/NfcStackDebugLogPreferenceController.java new file mode 100644 index 00000000000..4464923b958 --- /dev/null +++ b/src/com/android/settings/development/NfcStackDebugLogPreferenceController.java @@ -0,0 +1,82 @@ +/* + * Copyright (C) 2021 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.development; + +import android.content.Context; +import android.os.SystemProperties; +import android.util.Log; + +import androidx.annotation.VisibleForTesting; +import androidx.preference.Preference; +import androidx.preference.TwoStatePreference; + +import com.android.settings.core.PreferenceControllerMixin; +import com.android.settingslib.development.DeveloperOptionsPreferenceController; + +public class NfcStackDebugLogPreferenceController extends + DeveloperOptionsPreferenceController implements Preference.OnPreferenceChangeListener, + PreferenceControllerMixin { + + private static final String NFC_STACK_DEBUGLOG_ENABLED_KEY = + "nfc_stack_debuglog_enabled"; + @VisibleForTesting + static final String NFC_STACK_DEBUGLOG_ENABLED_PROPERTY = + "persist.nfc.debug_enabled"; + + public NfcStackDebugLogPreferenceController(Context context) { + super(context); + } + + @Override + public String getPreferenceKey() { + return NFC_STACK_DEBUGLOG_ENABLED_KEY; + } + + @Override + public boolean onPreferenceChange(Preference preference, Object newValue) { + final boolean isEnabled = (Boolean) newValue; + try { + SystemProperties.set(NFC_STACK_DEBUGLOG_ENABLED_PROPERTY, + isEnabled ? "true" : "false"); + } catch (RuntimeException e) { + Log.e(TAG, "Fail to set nfc system property: " + e.getMessage()); + } + return true; + } + + @Override + public void updateState(Preference preference) { + try { + final boolean isEnabled = SystemProperties.getBoolean( + NFC_STACK_DEBUGLOG_ENABLED_PROPERTY, false /* default */); + ((TwoStatePreference) mPreference).setChecked(isEnabled); + } catch (RuntimeException e) { + Log.e(TAG, "Fail to get nfc system property: " + e.getMessage()); + } + } + + @Override + protected void onDeveloperOptionsSwitchDisabled() { + super.onDeveloperOptionsSwitchDisabled(); + try { + SystemProperties.set(NFC_STACK_DEBUGLOG_ENABLED_PROPERTY, "false"); + ((TwoStatePreference) mPreference).setChecked(false); + } catch (RuntimeException e) { + Log.e(TAG, "Fail to set nfc system property: " + e.getMessage()); + } + } +} diff --git a/tests/unit/src/com/android/settings/development/NfcStackDebugLogPreferenceControllerTest.java b/tests/unit/src/com/android/settings/development/NfcStackDebugLogPreferenceControllerTest.java new file mode 100644 index 00000000000..914d01d9d23 --- /dev/null +++ b/tests/unit/src/com/android/settings/development/NfcStackDebugLogPreferenceControllerTest.java @@ -0,0 +1,112 @@ +/* + * Copyright (C) 2021 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.development; + +import static com.android.settings.development.NfcStackDebugLogPreferenceController + .NFC_STACK_DEBUGLOG_ENABLED_PROPERTY; + +import static com.google.common.truth.Truth.assertThat; + +import android.content.Context; +import android.os.Looper; +import android.os.SystemProperties; + +import androidx.preference.SwitchPreference; +import androidx.preference.PreferenceManager; +import androidx.preference.PreferenceScreen; +import androidx.test.core.app.ApplicationProvider; +import androidx.test.ext.junit.runners.AndroidJUnit4; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidJUnit4.class) +public class NfcStackDebugLogPreferenceControllerTest { + + private Context mContext; + private NfcStackDebugLogPreferenceController mController; + private SwitchPreference mPreference; + + @Before + public void setUp() { + mContext = ApplicationProvider.getApplicationContext(); + mController = new NfcStackDebugLogPreferenceController(mContext); + if (Looper.myLooper() == null) { + Looper.prepare(); + } + + final PreferenceManager preferenceManager = new PreferenceManager(mContext); + final PreferenceScreen screen = preferenceManager.createPreferenceScreen(mContext); + mPreference = new SwitchPreference(mContext); + mPreference.setKey(mController.getPreferenceKey()); + screen.addPreference(mPreference); + mController.displayPreference(screen); + } + + @Test + public void onPreferenceChanged_settingDisabled_shouldTurnOffNfcStackDebugLog() { + mController.onPreferenceChange(mPreference, false /* new value */); + + final boolean mode = SystemProperties.getBoolean( + NFC_STACK_DEBUGLOG_ENABLED_PROPERTY, false /* default */); + + assertThat(mode).isFalse(); + } + + @Test + public void onPreferenceChanged_settingEnabled_shouldTurnOnNfcStackDebugLog() { + mController.onPreferenceChange(mPreference, true /* new value */); + + final boolean mode = SystemProperties.getBoolean( + NFC_STACK_DEBUGLOG_ENABLED_PROPERTY, false /* default */); + + assertThat(mode).isTrue(); + } + + @Test + public void updateState_settingEnabled_preferenceShouldBeChecked() { + SystemProperties.set(NFC_STACK_DEBUGLOG_ENABLED_PROPERTY, + Boolean.toString(true)); + + mController.updateState(mPreference); + assertThat(mPreference.isChecked()).isTrue(); + } + + @Test + public void updateState_settingDisabled_preferenceShouldNotBeChecked() { + SystemProperties.set(NFC_STACK_DEBUGLOG_ENABLED_PROPERTY, + Boolean.toString(false)); + + mController.updateState(mPreference); + assertThat(mPreference.isChecked()).isFalse(); + } + + @Test + public void onDeveloperOptionsDisabled_shouldDisablePreference() { + mController.onDeveloperOptionsSwitchDisabled(); + final boolean mode = SystemProperties.getBoolean( + NFC_STACK_DEBUGLOG_ENABLED_PROPERTY, + false /* default */); + + mController.updateState(mPreference); + + assertThat(mode).isFalse(); + assertThat(mPreference.isChecked()).isFalse(); + } +}