Refactor ToggleAutoclickPreferenceFragment to improve maintainability

Root cause: There is a bunch of different logic of preferences in ToggleAutoclickPreferenceFragment. It’s hard to implement new features and hard to maintain and hard to be testable.
Solution: Move out logic of ToggleAutoclickPreferenceFragment into controllers to reduce the complexity of the relationship between preference and fragment.

Bug: 197695932
Test: make RunSettingsRoboTests ROBOTEST_FILTER=com.android.settings.accessibility
Change-Id: I5db18d5a0c577ad67d15c2d0169a36a67e9f13db
This commit is contained in:
menghanli
2022-07-21 11:22:30 +08:00
parent 6544dee983
commit cb008ccf17
11 changed files with 486 additions and 423 deletions

View File

@@ -16,11 +16,17 @@
package com.android.settings.accessibility;
import static android.view.accessibility.AccessibilityManager.AUTOCLICK_DELAY_DEFAULT;
import static com.android.settings.accessibility.AccessibilityUtil.State.OFF;
import static com.android.settings.accessibility.AccessibilityUtil.State.ON;
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
import android.provider.Settings;
import android.view.accessibility.AccessibilityManager;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
@@ -29,17 +35,16 @@ import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
/** Tests for {@link AutoclickPreferenceController}. */
@RunWith(RobolectricTestRunner.class)
public class AutoclickPreferenceControllerTest {
private Context mContext;
private final Context mContext = ApplicationProvider.getApplicationContext();
private AutoclickPreferenceController mController;
@Before
public void setUp() {
mContext = RuntimeEnvironment.application;
mController = new AutoclickPreferenceController(mContext, "auto_click");
}
@@ -52,7 +57,7 @@ public class AutoclickPreferenceControllerTest {
@Test
public void getSummary_disabledAutoclick_shouldReturnOffSummary() {
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, 0);
Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, OFF);
assertThat(mController.getSummary())
.isEqualTo(mContext.getText(R.string.accessibility_feature_state_off));
@@ -60,14 +65,15 @@ public class AutoclickPreferenceControllerTest {
@Test
public void getSummary_enabledAutoclick_shouldReturnOnSummary() {
final int autoclickDelayDefault = AccessibilityManager.AUTOCLICK_DELAY_DEFAULT;
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, 1);
Settings.Secure.ACCESSIBILITY_AUTOCLICK_ENABLED, ON);
Settings.Secure.putInt(mContext.getContentResolver(),
Settings.Secure.ACCESSIBILITY_AUTOCLICK_DELAY, autoclickDelayDefault);
Settings.Secure.ACCESSIBILITY_AUTOCLICK_DELAY, AUTOCLICK_DELAY_DEFAULT);
assertThat(mController.getSummary())
.isEqualTo(ToggleAutoclickPreferenceFragment.getAutoclickPreferenceSummary(
mContext.getResources(), autoclickDelayDefault));
assertThat(mController.getSummary().toString())
.isEqualTo(AutoclickUtils.getAutoclickDelaySummary(
mContext.getResources(),
R.plurals.accessibilty_autoclick_preference_subtitle_medium_delay,
AUTOCLICK_DELAY_DEFAULT).toString());
}
}