1 /* 2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.service.settings.preferences 18 19 import android.content.Intent 20 import android.os.Bundle 21 import android.os.Parcel 22 import android.platform.test.annotations.RequiresFlagsEnabled 23 import android.platform.test.flag.junit.CheckFlagsRule 24 import android.platform.test.flag.junit.DeviceFlagsValueProvider 25 import androidx.test.ext.junit.runners.AndroidJUnit4 26 import androidx.test.filters.SmallTest 27 import com.android.settingslib.flags.Flags.FLAG_SETTINGS_CATALYST 28 import com.google.common.truth.Truth.assertThat 29 import org.junit.Rule 30 import org.junit.Test 31 import org.junit.runner.RunWith 32 33 @RunWith(AndroidJUnit4::class) 34 @SmallTest 35 @RequiresFlagsEnabled(FLAG_SETTINGS_CATALYST) 36 class SettingsPreferenceMetadataTest { 37 38 @get:Rule 39 val checkFlagsRule: CheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule() 40 41 private val intent = Intent(Intent.ACTION_VIEW).setPackage("test") 42 43 private val metadata: SettingsPreferenceMetadata 44 get() = SettingsPreferenceMetadata.Builder("screenKey", "key") 45 .setTitle("title") 46 .setSummary("summary") 47 .setReadPermissions(listOf("readPermission")) 48 .setWritePermissions(listOf("writePermission")) 49 .setEnabled(true) 50 .setAvailable(true) 51 .setWritable(true) 52 .setRestricted(true) 53 .setWriteSensitivity(SettingsPreferenceMetadata.EXPECT_POST_CONFIRMATION) 54 .setLaunchIntent(intent) <lambda>null55 .setExtras(Bundle().apply { putString("bKey", "bValue") }) 56 .build() 57 58 @Test buildMetadata_allFieldsSetnull59 fun buildMetadata_allFieldsSet() { 60 with(metadata) { 61 assertThat(key).isEqualTo("key") 62 assertThat(screenKey).isEqualTo("screenKey") 63 assertThat(title!!).isEqualTo("title") 64 assertThat(summary!!).isEqualTo("summary") 65 assertThat(readPermissions).isEqualTo(listOf("readPermission")) 66 assertThat(writePermissions).isEqualTo(listOf("writePermission")) 67 assertThat(isEnabled).isTrue() 68 assertThat(isAvailable).isTrue() 69 assertThat(isWritable).isTrue() 70 assertThat(isRestricted).isTrue() 71 assertThat(writeSensitivity) 72 .isEqualTo(SettingsPreferenceMetadata.EXPECT_POST_CONFIRMATION) 73 assertThat(launchIntent!!).isEqualTo(intent) 74 assertThat(extras.getString("bKey")!!).isEqualTo("bValue") 75 } 76 } 77 78 @Test buildMetadata_deeplinkSensitivity_allFieldsSetnull79 fun buildMetadata_deeplinkSensitivity_allFieldsSet() { 80 val deeplinkOnlyMetadata = SettingsPreferenceMetadata.Builder("screenKey", "key") 81 .setTitle("title") 82 .setSummary("summary") 83 .setReadPermissions(listOf("readPermission")) 84 .setWritePermissions(listOf("writePermission")) 85 .setEnabled(true) 86 .setAvailable(true) 87 .setWritable(true) 88 .setRestricted(true) 89 .setWriteSensitivity(SettingsPreferenceMetadata.DEEPLINK_ONLY) 90 .setLaunchIntent(intent) 91 .setExtras(Bundle().apply { putString("bKey", "bValue") }) 92 .build() 93 with(deeplinkOnlyMetadata) { 94 assertThat(key).isEqualTo("key") 95 assertThat(screenKey).isEqualTo("screenKey") 96 assertThat(title!!).isEqualTo("title") 97 assertThat(summary!!).isEqualTo("summary") 98 assertThat(readPermissions).isEqualTo(listOf("readPermission")) 99 assertThat(writePermissions).isEqualTo(listOf("writePermission")) 100 assertThat(isEnabled).isTrue() 101 assertThat(isAvailable).isTrue() 102 assertThat(isWritable).isTrue() 103 assertThat(isRestricted).isTrue() 104 assertThat(writeSensitivity) 105 .isEqualTo(SettingsPreferenceMetadata.DEEPLINK_ONLY) 106 assertThat(launchIntent!!).isEqualTo(intent) 107 assertThat(extras.getString("bKey")!!).isEqualTo("bValue") 108 } 109 } 110 111 @Test buildMetadata_excludedSensitivity_nullLaunchIntentnull112 fun buildMetadata_excludedSensitivity_nullLaunchIntent() { 113 val md = SettingsPreferenceMetadata.Builder("screenKey", "key") 114 .setLaunchIntent(intent) 115 .setWriteSensitivity(SettingsPreferenceMetadata.NO_DIRECT_ACCESS) 116 .build() 117 assertThat(md.writeSensitivity).isEqualTo(SettingsPreferenceMetadata.NO_DIRECT_ACCESS) 118 assertThat(md.launchIntent).isNull() 119 } 120 121 @Test buildMetadata_fromParcelablenull122 fun buildMetadata_fromParcelable() { 123 val parcel = Parcel.obtain() 124 metadata.writeToParcel(parcel, 0) 125 parcel.setDataPosition(0) 126 val new = SettingsPreferenceMetadata.CREATOR.createFromParcel(parcel) 127 128 with(new) { 129 assertThat(key).isEqualTo("key") 130 assertThat(screenKey).isEqualTo("screenKey") 131 assertThat(title!!).isEqualTo("title") 132 assertThat(summary!!).isEqualTo("summary") 133 assertThat(readPermissions).isEqualTo(listOf("readPermission")) 134 assertThat(writePermissions).isEqualTo(listOf("writePermission")) 135 assertThat(isEnabled).isTrue() 136 assertThat(isAvailable).isTrue() 137 assertThat(isWritable).isTrue() 138 assertThat(isRestricted).isTrue() 139 assertThat(writeSensitivity) 140 .isEqualTo(SettingsPreferenceMetadata.EXPECT_POST_CONFIRMATION) 141 assertThat(launchIntent!!.toUri(0)).isEqualTo(intent.toUri(0)) 142 assertThat(extras.getString("bKey")!!).isEqualTo("bValue") 143 } 144 } 145 } 146