Make the default value of flashlight availibility to true.

We read from SettingsProvider to decide whether flashlight slice is
available. However, when switching to the second user, FLASHLIGHT_AVAILABLE
will be null. The default was 0 which causes the slice returning null,
so we have to set it to 1 when there is a physical flash unit to be
consistent with system ui.

Fixes: 134734608
Test: robotest
Change-Id: I981461b1b66e6e273e13a9cbcba96e3ccf0aec68
This commit is contained in:
Yi-Ling Chuang
2019-06-17 11:00:47 +08:00
parent 2ee1249b01
commit 8235ed14a4
2 changed files with 41 additions and 4 deletions

View File

@@ -39,6 +39,7 @@ import androidx.slice.builders.ListBuilder;
import androidx.slice.builders.ListBuilder.RowBuilder; import androidx.slice.builders.ListBuilder.RowBuilder;
import androidx.slice.builders.SliceAction; import androidx.slice.builders.SliceAction;
import com.android.internal.annotations.VisibleForTesting;
import com.android.settings.R; import com.android.settings.R;
import com.android.settings.Utils; import com.android.settings.Utils;
import com.android.settings.slices.CustomSliceRegistry; import com.android.settings.slices.CustomSliceRegistry;
@@ -131,10 +132,19 @@ public class FlashlightSlice implements CustomSliceable {
return null; return null;
} }
@VisibleForTesting
private static boolean isFlashlightAvailable(Context context) { static boolean isFlashlightAvailable(Context context) {
return Settings.Secure.getInt( int defaultAvailability = 0;
context.getContentResolver(), Secure.FLASHLIGHT_AVAILABLE, 0) == 1; try {
// check if there is a flash unit
if (getCameraId(context) != null) {
defaultAvailability = 1;
}
} catch (CameraAccessException e) {
Log.e(TAG, "Error getting camera id.", e);
}
return Secure.getInt(context.getContentResolver(),
Secure.FLASHLIGHT_AVAILABLE, defaultAvailability) == 1;
} }
private static boolean isFlashlightEnabled(Context context) { private static boolean isFlashlightEnabled(Context context) {

View File

@@ -20,6 +20,8 @@ package com.android.settings.flashlight;
import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertThat;
import android.content.Context; import android.content.Context;
import android.hardware.camera2.CameraCharacteristics;
import android.hardware.camera2.CameraManager;
import android.provider.Settings; import android.provider.Settings;
import androidx.slice.Slice; import androidx.slice.Slice;
@@ -35,6 +37,11 @@ import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner; import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment; import org.robolectric.RuntimeEnvironment;
import org.robolectric.Shadows;
import org.robolectric.annotation.Config;
import org.robolectric.shadow.api.Shadow;
import org.robolectric.shadows.ShadowCameraCharacteristics;
import org.robolectric.shadows.ShadowCameraManager;
import java.util.List; import java.util.List;
@@ -42,10 +49,12 @@ import java.util.List;
public class FlashlightSliceTest { public class FlashlightSliceTest {
private Context mContext; private Context mContext;
private ShadowCameraManager mShadowCameraManager;
@Before @Before
public void setUp() { public void setUp() {
mContext = RuntimeEnvironment.application; mContext = RuntimeEnvironment.application;
mShadowCameraManager = Shadows.shadowOf(mContext.getSystemService(CameraManager.class));
// Set-up specs for SliceMetadata. // Set-up specs for SliceMetadata.
SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS); SliceProvider.setSpecs(SliceLiveData.SUPPORTED_SPECS);
@@ -64,4 +73,22 @@ public class FlashlightSliceTest {
final List<SliceAction> toggles = metadata.getToggles(); final List<SliceAction> toggles = metadata.getToggles();
assertThat(toggles).hasSize(1); assertThat(toggles).hasSize(1);
} }
@Test
public void isFlashlightAvailable_nullSecureAttr_noFlashUnit_returnFalse() {
assertThat(FlashlightSlice.isFlashlightAvailable(mContext)).isFalse();
}
@Test
public void isFlashlightAvailable_nullSecureAttr_hasFlashUnit_returnTrue() {
final CameraCharacteristics characteristics =
ShadowCameraCharacteristics.newCameraCharacteristics();
final ShadowCameraCharacteristics shadowCharacteristics = Shadow.extract(characteristics);
shadowCharacteristics.set(CameraCharacteristics.FLASH_INFO_AVAILABLE, true);
shadowCharacteristics
.set(CameraCharacteristics.LENS_FACING, CameraCharacteristics.LENS_FACING_BACK);
mShadowCameraManager.addCamera("camera_id", characteristics);
assertThat(FlashlightSlice.isFlashlightAvailable(mContext)).isTrue();
}
} }