Change control semantics in transcode settings

Change global transcode enable toggle preference to global disable
toggle preference. Change app slection for skipping transcode to
app selection for enabling transcode, by default transcoding would be
disabled for all apps.

Test: Manual, Roboelectric unit tests
Change-Id: I44f4d1b24fac70a4560e8b3a12d505bd2da26f20
This commit is contained in:
Biswarup Pal
2020-11-15 13:49:29 +00:00
parent 5816d414db
commit ab51e8ff38
5 changed files with 41 additions and 41 deletions

View File

@@ -29,5 +29,5 @@
<PreferenceCategory <PreferenceCategory
android:key="transcode_skip_apps" android:key="transcode_skip_apps"
android:title="@string/transcode_skip_apps" android:title="@string/transcode_skip_apps"
settings:controller="com.android.settings.development.transcode.TranscodeSkipAppsPreferenceController" /> settings:controller="com.android.settings.development.transcode.TranscodeAppsPreferenceController" />
</PreferenceScreen> </PreferenceScreen>

View File

@@ -33,19 +33,19 @@ import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
* The controller for the "Skip transcoding for apps" section on the transcode settings * The controller for the "Enable transcoding for apps" section on the transcode settings
* screen. * screen.
*/ */
public class TranscodeSkipAppsPreferenceController extends BasePreferenceController implements public class TranscodeAppsPreferenceController extends BasePreferenceController implements
Preference.OnPreferenceChangeListener { Preference.OnPreferenceChangeListener {
private static final String SKIP_SELECTED_APPS_PROP_KEY = private static final String TRANSCODE_SELECTED_APPS_PROP_KEY =
"persist.sys.fuse.transcode_skip_uids"; "persist.sys.fuse.transcode_uids";
private final PackageManager mPackageManager; private final PackageManager mPackageManager;
private final List<String> mUidsToSkip = new ArrayList<>(); private final List<String> mUids = new ArrayList<>();
public TranscodeSkipAppsPreferenceController(Context context, public TranscodeAppsPreferenceController(Context context,
String preferenceKey) { String preferenceKey) {
super(context, preferenceKey); super(context, preferenceKey);
mPackageManager = context.getPackageManager(); mPackageManager = context.getPackageManager();
@@ -60,8 +60,8 @@ public class TranscodeSkipAppsPreferenceController extends BasePreferenceControl
public void displayPreference(PreferenceScreen screen) { public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen); super.displayPreference(screen);
final Context context = screen.getContext(); final Context context = screen.getContext();
mUidsToSkip.addAll(Arrays.asList( mUids.addAll(Arrays.asList(
SystemProperties.get(SKIP_SELECTED_APPS_PROP_KEY).split(","))); SystemProperties.get(TRANSCODE_SELECTED_APPS_PROP_KEY).split(",")));
Intent launcherIntent = new Intent(Intent.ACTION_MAIN); Intent launcherIntent = new Intent(Intent.ACTION_MAIN);
launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER); launcherIntent.addCategory(Intent.CATEGORY_LAUNCHER);
List<ResolveInfo> apps = mPackageManager.queryIntentActivities(launcherIntent, 0); List<ResolveInfo> apps = mPackageManager.queryIntentActivities(launcherIntent, 0);
@@ -71,7 +71,7 @@ public class TranscodeSkipAppsPreferenceController extends BasePreferenceControl
preference.setTitle(app.loadLabel(mPackageManager)); preference.setTitle(app.loadLabel(mPackageManager));
preference.setIcon(app.loadIcon(mPackageManager)); preference.setIcon(app.loadIcon(mPackageManager));
preference.setKey(uid); preference.setKey(uid);
preference.setChecked(isSkippedForTranscoding(uid)); preference.setChecked(isSelectedForTranscoding(uid));
preference.setOnPreferenceChangeListener(this); preference.setOnPreferenceChangeListener(this);
screen.addPreference(preference); screen.addPreference(preference);
@@ -83,15 +83,15 @@ public class TranscodeSkipAppsPreferenceController extends BasePreferenceControl
boolean value = (Boolean) o; boolean value = (Boolean) o;
String uidStr = preference.getKey(); String uidStr = preference.getKey();
if (value) { if (value) {
mUidsToSkip.add(uidStr); mUids.add(uidStr);
} else { } else {
mUidsToSkip.remove(uidStr); mUids.remove(uidStr);
} }
SystemProperties.set(SKIP_SELECTED_APPS_PROP_KEY, String.join(",", mUidsToSkip)); SystemProperties.set(TRANSCODE_SELECTED_APPS_PROP_KEY, String.join(",", mUids));
return true; return true;
} }
private boolean isSkippedForTranscoding(String uid) { private boolean isSelectedForTranscoding(String uid) {
return mUidsToSkip.contains(uid); return mUids.contains(uid);
} }
} }

View File

@@ -22,7 +22,7 @@ import android.os.SystemProperties;
import com.android.settings.core.TogglePreferenceController; import com.android.settings.core.TogglePreferenceController;
/** /**
* The controller for the "Enable transcode for all apps" switch on the transcode settings * The controller for the "Disable transcoding for all apps" switch on the transcode settings
* screen. * screen.
*/ */
public class TranscodeGlobalTogglePreferenceController extends TogglePreferenceController { public class TranscodeGlobalTogglePreferenceController extends TogglePreferenceController {
@@ -41,12 +41,12 @@ public class TranscodeGlobalTogglePreferenceController extends TogglePreferenceC
@Override @Override
public boolean isChecked() { public boolean isChecked() {
return SystemProperties.getBoolean(TRANSCODE_ENABLED_PROP_KEY, false); return !SystemProperties.getBoolean(TRANSCODE_ENABLED_PROP_KEY, false);
} }
@Override @Override
public boolean setChecked(boolean isChecked) { public boolean setChecked(boolean isChecked) {
SystemProperties.set(TRANSCODE_ENABLED_PROP_KEY, String.valueOf(isChecked)); SystemProperties.set(TRANSCODE_ENABLED_PROP_KEY, String.valueOf(!isChecked));
return true; return true;
} }
} }

View File

@@ -51,24 +51,24 @@ import org.robolectric.shadows.ShadowPackageManager;
import java.util.Collections; import java.util.Collections;
@RunWith(RobolectricTestRunner.class) @RunWith(RobolectricTestRunner.class)
public class TranscodeSkipAppsPreferenceControllerTest { public class TranscodeAppsPreferenceControllerTest {
private static final int APPLICATION_UID = 1234; private static final int APPLICATION_UID = 1234;
private static final String SKIP_SELECTED_APPS_PROP_KEY = private static final String TRANSCODE_SELECTED_APPS_PROP_KEY =
"persist.sys.fuse.transcode_skip_uids"; "persist.sys.fuse.transcode_uids";
@Mock @Mock
private PreferenceScreen mScreen; private PreferenceScreen mScreen;
private Context mContext; private Context mContext;
private ShadowPackageManager mShadowPackageManager; private ShadowPackageManager mShadowPackageManager;
private TranscodeSkipAppsPreferenceController mController; private TranscodeAppsPreferenceController mController;
@Before @Before
public void setUp() { public void setUp() {
MockitoAnnotations.initMocks(this); MockitoAnnotations.initMocks(this);
mContext = ApplicationProvider.getApplicationContext(); mContext = ApplicationProvider.getApplicationContext();
mShadowPackageManager = Shadows.shadowOf(mContext.getPackageManager()); mShadowPackageManager = Shadows.shadowOf(mContext.getPackageManager());
mController = new TranscodeSkipAppsPreferenceController(mContext, "test_key"); mController = new TranscodeAppsPreferenceController(mContext, "test_key");
Preference preference = new Preference(mContext); Preference preference = new Preference(mContext);
when(mScreen.getContext()).thenReturn(mContext); when(mScreen.getContext()).thenReturn(mContext);
@@ -99,28 +99,28 @@ public class TranscodeSkipAppsPreferenceControllerTest {
} }
@Test @Test
public void preferenceChecked_shouldSkipApp() { public void preferenceChecked_shouldSelectApp() {
// First ensure that the app is not in skip list. // First ensure that the app is not selected.
SystemProperties.set(SKIP_SELECTED_APPS_PROP_KEY, String.valueOf(-1)); SystemProperties.set(TRANSCODE_SELECTED_APPS_PROP_KEY, String.valueOf(-1));
SwitchPreference switchPreference = createPreference(/* defaultCheckedState = */ false); SwitchPreference switchPreference = createPreference(/* defaultCheckedState = */ false);
switchPreference.performClick(); switchPreference.performClick();
// Verify that the app is added to skip list. // Verify that the app is selected.
assertThat(SystemProperties.get(SKIP_SELECTED_APPS_PROP_KEY)).contains( assertThat(SystemProperties.get(TRANSCODE_SELECTED_APPS_PROP_KEY)).contains(
String.valueOf(APPLICATION_UID)); String.valueOf(APPLICATION_UID));
} }
@Test @Test
public void preferenceUnchecked_shouldNotSkipApp() { public void preferenceUnchecked_shouldUnSelectApp() {
// First ensure that the app is in skip list. // First ensure that the app is selected.
SystemProperties.set(SKIP_SELECTED_APPS_PROP_KEY, String.valueOf(APPLICATION_UID)); SystemProperties.set(TRANSCODE_SELECTED_APPS_PROP_KEY, String.valueOf(APPLICATION_UID));
SwitchPreference switchPreference = createPreference(/* defaultCheckedState = */ true); SwitchPreference switchPreference = createPreference(/* defaultCheckedState = */ true);
switchPreference.performClick(); switchPreference.performClick();
// Verify that the app is removed from skip list. // Verify that the app is not selected.
assertThat(SystemProperties.get(SKIP_SELECTED_APPS_PROP_KEY)).doesNotContain( assertThat(SystemProperties.get(TRANSCODE_SELECTED_APPS_PROP_KEY)).doesNotContain(
String.valueOf(APPLICATION_UID)); String.valueOf(APPLICATION_UID));
} }

View File

@@ -47,14 +47,14 @@ public class TranscodeGlobalTogglePreferenceControllerTest {
} }
@Test @Test
public void isChecked_whenEnabled_shouldReturnTrue() { public void isChecked_whenDisabled_shouldReturnTrue() {
SystemProperties.set(TRANSCODE_ENABLED_PROP_KEY, "true"); SystemProperties.set(TRANSCODE_ENABLED_PROP_KEY, "false");
assertThat(mController.isChecked()).isTrue(); assertThat(mController.isChecked()).isTrue();
} }
@Test @Test
public void isChecked_whenDisabled_shouldReturnTrue() { public void isChecked_whenEnabled_shouldReturnFalse() {
SystemProperties.set(TRANSCODE_ENABLED_PROP_KEY, "false"); SystemProperties.set(TRANSCODE_ENABLED_PROP_KEY, "true");
assertThat(mController.isChecked()).isFalse(); assertThat(mController.isChecked()).isFalse();
} }
@@ -63,8 +63,8 @@ public class TranscodeGlobalTogglePreferenceControllerTest {
// Simulate the UI being clicked. // Simulate the UI being clicked.
mController.setChecked(true); mController.setChecked(true);
// Verify the system property was updated with the UI value. // Verify the system property was updated.
assertThat(SystemProperties.getBoolean(TRANSCODE_ENABLED_PROP_KEY, false)).isTrue(); assertThat(SystemProperties.getBoolean(TRANSCODE_ENABLED_PROP_KEY, true)).isFalse();
} }
@Test @Test
@@ -72,7 +72,7 @@ public class TranscodeGlobalTogglePreferenceControllerTest {
// Simulate the UI being clicked. // Simulate the UI being clicked.
mController.setChecked(false); mController.setChecked(false);
// Verify the system property was updated with the UI value. // Verify the system property was updated.
assertThat(SystemProperties.getBoolean(TRANSCODE_ENABLED_PROP_KEY, true)).isFalse(); assertThat(SystemProperties.getBoolean(TRANSCODE_ENABLED_PROP_KEY, false)).isTrue();
} }
} }