Snap for 11510485 from 71e2c70225 to 24Q2-release

Change-Id: Ifd7456be2a2ee2cfff112e6a7fa1a0a60203e079
This commit is contained in:
Android Build Coastguard Worker
2024-02-29 00:21:44 +00:00
92 changed files with 2471 additions and 729 deletions

View File

@@ -2508,6 +2508,22 @@
android:value="true" />
</activity>
<activity
android:name="Settings$ColorContrastActivity"
android:exported="true"
android:label="@string/accessibility_color_contrast_title">
<intent-filter>
<action android:name="android.settings.ACCESSIBILITY_COLOR_CONTRAST_SETTINGS" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
<meta-data android:name="com.android.settings.FRAGMENT_CLASS"
android:value="com.android.settings.accessibility.ColorContrastFragment" />
<meta-data android:name="com.android.settings.HIGHLIGHT_MENU_KEY"
android:value="@string/menu_key_accessibility"/>
<meta-data android:name="com.android.settings.PRIMARY_PROFILE_CONTROLLED"
android:value="true" />
</activity>
<activity
android:name="Settings$TextToSpeechSettingsActivity"
android:exported="true"

View File

@@ -30,3 +30,10 @@ flag {
description: "Don't show quick settings tooltip in SUW, since the user can't use quick settings there."
bug: "294560581"
}
flag {
name: "enable_color_contrast_control"
namespace: "accessibility"
description: "Allows users to control color contrast in the Accessibility settings page."
bug: "246577325"
}

View File

@@ -21,10 +21,3 @@ flag {
description: "Order the saved bluetooth devices by most recently connected."
bug: "306160434"
}
flag {
name: "enable_hide_exclusively_managed_bluetooth_device"
namespace: "dck_framework"
description: "Hide exclusively managed Bluetooth devices in BT settings menu."
bug: "322285078"
}

View File

@@ -0,0 +1,28 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/system_accent1_200"
android:pathData="M12,4C7,4 2.73,7.11 1,11.5C2.73,15.89 7,19 12,19s9.27,-3.11 11,-7.5C21.27,7.11 17,4 12,4zM12,16c-2.48,0 -4.5,-2.02 -4.5,-4.5S9.52,7 12,7s4.5,2.02 4.5,4.5S14.48,16 12,16z"/>
<path
android:fillColor="@android:color/system_accent1_50"
android:pathData="M12,11.5m-2.7,0a2.7,2.7 0,1 1,5.4 0a2.7,2.7 0,1 1,-5.4 0"/>
</vector>

View File

@@ -0,0 +1,28 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/system_accent1_400"
android:pathData="M12,4C7,4 2.73,7.11 1,11.5C2.73,15.89 7,19 12,19s9.27,-3.11 11,-7.5C21.27,7.11 17,4 12,4zM12,16c-2.48,0 -4.5,-2.02 -4.5,-4.5S9.52,7 12,7s4.5,2.02 4.5,4.5S14.48,16 12,16z"/>
<path
android:fillColor="@android:color/system_accent1_100"
android:pathData="M12,11.5m-2.7,0a2.7,2.7 0,1 1,5.4 0a2.7,2.7 0,1 1,-5.4 0"/>
</vector>

View File

@@ -0,0 +1,28 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/system_accent1_700"
android:pathData="M12,4C7,4 2.73,7.11 1,11.5C2.73,15.89 7,19 12,19s9.27,-3.11 11,-7.5C21.27,7.11 17,4 12,4zM12,16c-2.48,0 -4.5,-2.02 -4.5,-4.5S9.52,7 12,7s4.5,2.02 4.5,4.5S14.48,16 12,16z"/>
<path
android:fillColor="@android:color/system_accent1_200"
android:pathData="M12,11.5m-2.7,0a2.7,2.7 0,1 1,5.4 0a2.7,2.7 0,1 1,-5.4 0"/>
</vector>

View File

@@ -0,0 +1,64 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2024 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.
-->
<selector
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android">
<item android:state_selected="true">
<layer-list>
<item>
<shape android:shape="rectangle">
<solid android:color="?androidprv:attr/materialColorSurfaceContainerHighest" />
<stroke
android:color="?androidprv:attr/materialColorSecondary"
android:width="@dimen/contrast_button_stroke_width" />
<corners android:radius="@dimen/contrast_button_radius"/>
</shape>
</item>
<item
android:width="24dp"
android:height="24dp"
android:left="57dp"
android:top="57dp">
<vector
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="?androidprv:attr/materialColorPrimary"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10c5.52,0 10,-4.48 10,-10S17.52,2 12,2zM10.59,16.6l-4.24,-4.24l1.41,-1.41l2.83,2.83l5.66,-5.66l1.41,1.41L10.59,16.6z"/>
</vector>
</item>
</layer-list>
</item>
<item>
<layer-list>
<item android:top="@dimen/contrast_button_stroke_width"
android:bottom="@dimen/contrast_button_stroke_width"
android:left="@dimen/contrast_button_stroke_width"
android:right="@dimen/contrast_button_stroke_width">
<shape android:shape="rectangle">
<solid android:color="?androidprv:attr/materialColorSurfaceContainerHighest" />
<corners android:radius="@dimen/contrast_button_radius"/>
</shape>
</item>
</layer-list>
</item>
</selector>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2024 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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="rectangle" >
<solid android:color="?androidprv:attr/materialColorSurfaceContainerHigh"/>
<corners android:radius="20dp" />
</shape>

View File

@@ -0,0 +1,26 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2024 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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="rectangle" >
<solid android:color="?androidprv:attr/materialColorSurfaceContainer"/>
<corners
android:bottomLeftRadius="20dp"
android:bottomRightRadius="20dp"
android:topLeftRadius="0dp"
android:topRightRadius="0dp" />
</shape>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2024 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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="rectangle" >
<solid android:color="?androidprv:attr/materialColorTertiaryContainer"/>
<corners android:radius="7dp" />
</shape>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2024 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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="rectangle" >
<solid android:color="?androidprv:attr/materialColorSurfaceContainerLow"/>
<corners android:radius="12dp" />
</shape>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2024 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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="rectangle" >
<solid android:color="?androidprv:attr/materialColorPrimary"/>
<corners android:radius="20dp" />
</shape>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2024 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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="oval" >
<solid android:color="?androidprv:attr/materialColorSurfaceContainer"/>
<size android:width="36dp" android:height="36dp" />
</shape>

View File

@@ -0,0 +1,23 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2024 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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="rectangle" >
<solid android:color="?androidprv:attr/materialColorSecondaryContainer"/>
<corners android:radius="20dp" />
<size android:height="30dp" android:width="60dp" />
</shape>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2024 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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="oval" >
<solid android:color="?androidprv:attr/materialColorPrimary"/>
<size android:width="36dp" android:height="36dp" />
</shape>

View File

@@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2024 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.
-->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:shape="rectangle" >
<solid android:color="?androidprv:attr/materialColorSurfaceContainerHighest"/>
<corners android:radius="4dp" />
</shape>

View File

@@ -0,0 +1,27 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal"
android:autoMirrored="true">
<path
android:fillColor="?androidprv:attr/materialColorOnSurfaceVariant"
android:pathData="M19,5v14L5,19L5,5h14m0,-2L5,3c-1.1,0 -2,0.9 -2,2v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2L21,5c0,-1.1 -0.9,-2 -2,-2zM14,17L7,17v-2h7v2zM17,13L7,13v-2h10v2zM17,9L7,9L7,7h10v2z"/>
</vector>

View File

@@ -0,0 +1,26 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:width="18dp"
android:height="18dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="?androidprv:attr/materialColorOnTertiaryContainer"
android:pathData="M19,3H5C3.9,3 3,3.9 3,5v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5C21,3.9 20.1,3 19,3zM14,17H7v-2h7V17zM17,13H7v-2h10V13zM17,9H7V7h10V9z"/>
</vector>

View File

@@ -0,0 +1,26 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="?androidprv:attr/materialColorOnSurfaceVariant"
android:pathData="M20,2L4,2c-1.1,0 -2,0.9 -2,2v18l4,-4h14c1.1,0 2,-0.9 2,-2L22,4c0,-1.1 -0.9,-2 -2,-2zM20,16L4,16L4,4h16v12z"/>
</vector>

View File

@@ -0,0 +1,35 @@
<!--
~ Copyright (C) 2024 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.
-->
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<item>
<com.android.settingslib.widget.AdaptiveIconShapeDrawable
android:width="@dimen/accessibility_icon_size"
android:height="@dimen/accessibility_icon_size"
android:color="@color/accessibility_feature_background"/>
</item>
<item android:gravity="center">
<vector
android:width="@dimen/accessibility_icon_foreground_size"
android:height="@dimen/accessibility_icon_foreground_size"
android:viewportWidth="24"
android:viewportHeight="24">
<path
android:fillColor="#ffffff"
android:pathData="M12,2C6.48,2 2,6.48 2,12s4.48,10 10,10s10,-4.48 10,-10S17.52,2 12,2zM11,19.93C7.06,19.44 4,16.08 4,12s3.05,-7.44 7,-7.93V19.93zM13,4.07C14.03,4.2 15,4.52 15.87,5H13V4.07zM13,7h5.24c0.25,0.31 0.48,0.65 0.68,1H13V7zM13,10h6.74c0.08,0.33 0.15,0.66 0.19,1H13V10zM13,19.93V19h2.87C15,19.48 14.03,19.8 13,19.93zM18.24,17H13v-1h5.92C18.72,16.35 18.49,16.69 18.24,17zM19.74,14H13v-1h6.93C19.89,13.34 19.82,13.67 19.74,14z"/>
</vector>
</item>
</layer-list>

View File

@@ -0,0 +1,28 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/system_accent1_700"
android:pathData="M12,4C7,4 2.73,7.11 1,11.5C2.73,15.89 7,19 12,19s9.27,-3.11 11,-7.5C21.27,7.11 17,4 12,4zM12,16c-2.48,0 -4.5,-2.02 -4.5,-4.5S9.52,7 12,7s4.5,2.02 4.5,4.5S14.48,16 12,16z"/>
<path
android:fillColor="@android:color/system_accent1_900"
android:pathData="M12,11.5m-2.7,0a2.7,2.7 0,1 1,5.4 0a2.7,2.7 0,1 1,-5.4 0"/>
</vector>

View File

@@ -0,0 +1,28 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/system_accent1_500"
android:pathData="M12,4C7,4 2.73,7.11 1,11.5C2.73,15.89 7,19 12,19s9.27,-3.11 11,-7.5C21.27,7.11 17,4 12,4zM12,16c-2.48,0 -4.5,-2.02 -4.5,-4.5S9.52,7 12,7s4.5,2.02 4.5,4.5S14.48,16 12,16z"/>
<path
android:fillColor="@android:color/system_accent1_700"
android:pathData="M12,11.5m-2.7,0a2.7,2.7 0,1 1,5.4 0a2.7,2.7 0,1 1,-5.4 0"/>
</vector>

View File

@@ -0,0 +1,28 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="@android:color/system_accent1_100"
android:pathData="M12,4C7,4 2.73,7.11 1,11.5C2.73,15.89 7,19 12,19s9.27,-3.11 11,-7.5C21.27,7.11 17,4 12,4zM12,16c-2.48,0 -4.5,-2.02 -4.5,-4.5S9.52,7 12,7s4.5,2.02 4.5,4.5S14.48,16 12,16z"/>
<path
android:fillColor="@android:color/system_accent1_600"
android:pathData="M12,11.5m-2.7,0a2.7,2.7 0,1 1,5.4 0a2.7,2.7 0,1 1,-5.4 0"/>
</vector>

View File

@@ -0,0 +1,26 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:width="32dp"
android:height="32dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="?androidprv:attr/materialColorOnPrimary"
android:pathData="M20.41,4.94l-1.35,-1.35c-0.78,-0.78 -2.05,-0.78 -2.83,0L3,16.82L3,21h4.18L20.41,7.77c0.79,-0.78 0.79,-2.05 0,-2.83zM6.41,19.06L5,19v-1.36l9.82,-9.82 1.41,1.41 -9.82,9.83z"/>
</vector>

View File

@@ -0,0 +1,26 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="?androidprv:attr/materialColorSecondary"
android:pathData="M15,8c0,-1.42 -0.5,-2.73 -1.33,-3.76C14.09,4.1 14.53,4 15,4c2.21,0 4,1.79 4,4s-1.79,4 -4,4c-0.43,0 -0.84,-0.09 -1.23,-0.21c-0.03,-0.01 -0.06,-0.02 -0.1,-0.03C14.5,10.73 15,9.42 15,8zM16.66,13.13C18.03,14.06 19,15.32 19,17v3h4v-3C23,14.82 19.42,13.53 16.66,13.13zM9,4c2.21,0 4,1.79 4,4s-1.79,4 -4,4s-4,-1.79 -4,-4S6.79,4 9,4zM9,13c2.67,0 8,1.34 8,4v3H1v-3C1,14.34 6.33,13 9,13z"/>
</vector>

View File

@@ -0,0 +1,26 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="?androidprv:attr/materialColorOnSecondaryContainer"
android:pathData="M19,3H5C3.9,3 3,3.9 3,5v14c0,1.1 0.9,2 2,2h14c1.1,0 2,-0.9 2,-2V5C21,3.9 20.1,3 19,3zM19,5v9h-4.18c-0.41,1.16 -1.51,2 -2.82,2s-2.4,-0.84 -2.82,-2H5V5H19z"/>
</vector>

View File

@@ -0,0 +1,25 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="48dp"
android:height="48dp"
android:viewportWidth="48"
android:viewportHeight="48">
<path
android:pathData="M22,25.6H26V12.7H22V25.6ZM22,33.9H26V29.6H22V33.9ZM24,44C23.767,44 23.533,43.983 23.3,43.95C23.1,43.883 22.9,43.8 22.7,43.7C17.767,41.167 14.083,38.033 11.65,34.3C9.217,30.533 8,25.967 8,20.6V11.65C8,11.017 8.183,10.45 8.55,9.95C8.917,9.45 9.4,9.083 10,8.85L23,4.15C23.167,4.083 23.333,4.05 23.5,4.05C23.667,4.017 23.833,4 24,4C24.1,4 24.433,4.05 25,4.15L38,8.8C38.6,9.033 39.083,9.417 39.45,9.95C39.817,10.45 40,11.017 40,11.65V20.6C40,25.967 38.75,30.533 36.25,34.3C33.783,38.067 30.117,41.2 25.25,43.7C25.05,43.8 24.85,43.883 24.65,43.95C24.45,43.983 24.233,44 24,44ZM24,41C28.367,38.633 31.617,35.817 33.75,32.55C35.917,29.25 37,25.267 37,20.6V11.65L24,7L11,11.65V20.6C11,25.267 12.1,29.267 14.3,32.6C16.533,35.933 19.767,38.733 24,41Z"
android:fillColor="?android:attr/colorAccent"/>
</vector>

View File

@@ -0,0 +1,26 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:width="20dp"
android:height="20dp"
android:viewportWidth="24"
android:viewportHeight="24"
android:tint="?attr/colorControlNormal">
<path
android:fillColor="?androidprv:attr/materialColorOnPrimary"
android:pathData="M14.43,10l-2.43,-8l-2.43,8l-7.57,0l6.18,4.41l-2.35,7.59l6.17,-4.69l6.18,4.69l-2.35,-7.59l6.17,-4.41z"/>
</vector>

View File

@@ -1,84 +0,0 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="364dp"
android:height="266dp"
android:viewportWidth="364"
android:viewportHeight="266">
<group>
<clip-path
android:pathData="M0,0.95h364v265.05h-364z"/>
<path
android:pathData="M339.42,265.47H24.58C11.07,265.47 0,254.17 0,240.39V26.42C0,12.6 11.07,1.3 24.58,1.3H339.52C352.93,1.3 364,12.6 364,26.38V240.49C364,254.17 352.93,265.47 339.42,265.47Z"
android:fillColor="#000000"/>
<path
android:pathData="M300.32,99.22C310.82,106.16 324.97,103.31 331.93,92.85C338.89,82.39 336.03,68.29 325.54,61.35L301.31,45.32C290.82,38.38 276.67,41.24 269.7,51.69C262.74,62.15 265.6,76.26 276.1,83.19L300.32,99.22Z"
android:fillColor="#C7EBD4"/>
<path
android:pathData="M323.02,78.05L314.03,79.7C313.56,79.79 313.24,80.25 313.33,80.72L314.98,89.71C315.07,90.19 315.52,90.5 316,90.41L324.99,88.76C325.46,88.68 325.78,88.22 325.69,87.75L324.04,78.76C323.95,78.28 323.5,77.97 323.02,78.05Z"
android:fillColor="#5BB974"/>
<path
android:pathData="M310.61,70.73L310.59,70.95C311.1,73.37 309.48,75.68 307.04,76.1L298.41,77.6C295.97,78.01 293.62,76.36 293.19,73.99L293.21,73.77C292.7,71.35 294.32,69.04 296.76,68.63L305.39,67.13C307.83,66.71 310.1,68.31 310.61,70.73Z"
android:fillColor="#5BB974"/>
<path
android:pathData="M280.24,67.28C283.75,69.56 288.46,68.56 290.74,65.05C293.02,61.54 292.02,56.84 288.51,54.56C285,52.28 280.29,53.28 278.02,56.79C275.73,60.3 276.73,65 280.24,67.28Z"
android:fillColor="#5BB974"/>
<path
android:pathData="M68.38,36.61C69.99,35.55 71.95,35.17 73.84,35.55C75.73,35.92 77.39,37.02 78.48,38.6L78.71,38.97L80.09,41.3C80.7,42.37 81.58,43.26 82.64,43.89C83.7,44.52 84.9,44.87 86.14,44.89L88.76,44.96C90.69,45.04 92.52,45.87 93.84,47.28C95.16,48.69 95.87,50.56 95.82,52.49C95.77,52.62 95.77,52.77 95.83,52.91L95.52,55.59C95.39,56.8 95.58,58.03 96.06,59.15C96.54,60.28 97.3,61.26 98.27,62L100.32,63.72C101.82,64.92 102.8,66.65 103.03,68.56C103.26,70.47 102.73,72.39 101.56,73.91C101.44,73.98 101.39,74.18 101.27,74.26L99.55,76.2C98.72,77.1 98.14,78.2 97.87,79.4C97.59,80.59 97.63,81.84 97.99,83.01L98.66,85.58C99.17,87.44 98.92,89.43 97.97,91.11C97.02,92.78 95.44,94.02 93.58,94.55C93.46,94.63 93.26,94.58 93.13,94.66L90.56,95.23C89.36,95.48 88.24,96.04 87.32,96.84C86.4,97.64 85.69,98.67 85.28,99.82L84.38,102.36C83.69,104.16 82.33,105.61 80.58,106.42C78.83,107.22 76.83,107.31 75.02,106.65C74.88,106.64 74.74,106.57 74.64,106.46L72.32,105.41C71.19,104.94 69.96,104.75 68.74,104.85C67.52,104.96 66.34,105.36 65.31,106.01L63.11,107.43C61.5,108.48 59.54,108.86 57.65,108.49C55.76,108.12 54.1,107.02 53.01,105.44L52.78,105.07L51.4,102.75C50.78,101.68 49.89,100.79 48.81,100.17C47.74,99.55 46.52,99.22 45.28,99.22L42.66,99.15C40.72,99.07 38.9,98.24 37.58,96.83C36.25,95.42 35.54,93.55 35.6,91.62C35.64,91.49 35.64,91.34 35.59,91.2L35.89,88.52C36.02,87.31 35.84,86.08 35.36,84.95C34.88,83.83 34.12,82.84 33.15,82.09L31.08,80.46C30.32,79.87 29.68,79.13 29.21,78.28C28.74,77.44 28.43,76.51 28.32,75.56C28.21,74.6 28.29,73.63 28.55,72.7C28.82,71.77 29.27,70.9 29.87,70.15C29.99,70.07 30.04,69.87 30.16,69.79L31.89,67.77C32.72,66.87 33.3,65.76 33.58,64.57C33.85,63.38 33.81,62.13 33.46,60.96L32.79,58.37C32.29,56.51 32.54,54.53 33.49,52.86C34.44,51.18 36.01,49.95 37.87,49.42C37.99,49.34 38.19,49.39 38.32,49.31L40.89,48.73C42.09,48.48 43.21,47.92 44.13,47.12C45.06,46.31 45.76,45.29 46.17,44.13L47.07,41.6C47.75,39.81 49.12,38.35 50.87,37.55C52.62,36.75 54.62,36.66 56.43,37.31C56.57,37.33 56.71,37.4 56.81,37.5L59.2,38.58C60.33,39.04 61.56,39.23 62.78,39.13C64,39.02 65.18,38.63 66.21,37.97L68.38,36.61Z"
android:fillColor="#CEE3FF"/>
<path
android:pathData="M60.5,74.56C59.92,74.56 59.44,74.37 59.05,73.97C58.65,73.58 58.45,73.09 58.45,72.52C58.45,71.95 58.65,71.46 59.05,71.07C59.44,70.67 59.92,70.48 60.5,70.48C61.07,70.48 61.55,70.67 61.95,71.07C62.34,71.46 62.54,71.95 62.54,72.52C62.54,73.09 62.34,73.58 61.95,73.97C61.55,74.37 61.07,74.56 60.5,74.56ZM70.3,74.56C69.73,74.56 69.25,74.37 68.85,73.97C68.46,73.58 68.26,73.09 68.26,72.52C68.26,71.95 68.46,71.46 68.85,71.07C69.25,70.67 69.73,70.48 70.3,70.48C70.88,70.48 71.36,70.67 71.75,71.07C72.15,71.46 72.35,71.95 72.35,72.52C72.35,73.09 72.15,73.58 71.75,73.97C71.36,74.37 70.88,74.56 70.3,74.56ZM65.4,83.96C69.05,83.96 72.14,82.69 74.68,80.16C77.21,77.63 78.48,74.54 78.48,70.89C78.48,70.23 78.43,69.6 78.35,68.99C78.27,68.37 78.12,67.78 77.9,67.21C77.33,67.34 76.76,67.45 76.19,67.51C75.61,67.58 75.02,67.62 74.39,67.62C71.91,67.62 69.57,67.09 67.36,66.02C65.15,64.96 63.27,63.48 61.72,61.57C60.85,63.69 59.6,65.54 57.98,67.11C56.36,68.67 54.48,69.85 52.32,70.64V70.89C52.32,74.54 53.59,77.63 56.12,80.16C58.66,82.69 61.75,83.96 65.4,83.96ZM65.4,87.23C63.14,87.23 61.01,86.8 59.03,85.94C57.04,85.09 55.31,83.92 53.84,82.45C52.36,80.98 51.2,79.25 50.34,77.26C49.48,75.27 49.05,73.15 49.05,70.89C49.05,68.62 49.48,66.5 50.34,64.51C51.2,62.52 52.36,60.79 53.84,59.32C55.31,57.85 57.04,56.69 59.03,55.83C61.01,54.97 63.14,54.54 65.4,54.54C67.66,54.54 69.79,54.97 71.77,55.83C73.76,56.69 75.49,57.85 76.96,59.32C78.43,60.79 79.6,62.52 80.46,64.51C81.32,66.5 81.74,68.62 81.74,70.89C81.74,73.15 81.32,75.27 80.46,77.26C79.6,79.25 78.43,80.98 76.96,82.45C75.49,83.92 73.76,85.09 71.77,85.94C69.79,86.8 67.66,87.23 65.4,87.23ZM63.19,58.01C64.34,59.92 65.89,61.45 67.85,62.61C69.81,63.77 71.99,64.35 74.39,64.35C74.77,64.35 75.14,64.33 75.49,64.29C75.85,64.25 76.21,64.2 76.6,64.14C75.45,62.24 73.9,60.7 71.94,59.55C69.98,58.39 67.8,57.81 65.4,57.81C65.02,57.81 64.65,57.83 64.3,57.87C63.94,57.91 63.57,57.96 63.19,58.01ZM53.02,66.76C54.41,65.97 55.62,64.95 56.66,63.69C57.69,62.44 58.47,61.04 58.98,59.49C57.6,60.28 56.38,61.3 55.35,62.55C54.31,63.8 53.54,65.21 53.02,66.76Z"
android:fillColor="#559DFD"/>
<path
android:pathData="M185.48,137.47C186.07,137.47 186.56,137.28 186.94,136.89C187.33,136.51 187.52,136.02 187.52,135.43C187.52,134.84 187.33,134.35 186.94,133.96C186.56,133.58 186.07,133.39 185.48,133.39C184.88,133.39 184.4,133.58 184.01,133.96C183.62,134.35 183.43,134.84 183.43,135.43C183.43,136.02 183.62,136.51 184.01,136.89C184.4,137.28 184.88,137.47 185.48,137.47Z"
android:fillColor="#202124"/>
<path
android:pathData="M54.83,176.56L60.78,178.1C63.63,178.83 66.64,178.74 69.45,177.82L75.29,175.92C86.88,172.14 98.07,182.63 94.99,194.4L93.44,200.33C92.69,203.18 92.78,206.18 93.69,208.97L95.6,214.79C99.37,226.35 88.83,237.52 77.03,234.47L71.09,232.93C68.23,232.19 65.22,232.29 62.42,233.2L56.58,235.11C44.98,238.89 33.8,228.4 36.88,216.63L38.43,210.7C39.17,207.85 39.08,204.85 38.17,202.06L36.27,196.23C32.49,184.68 43.03,173.51 54.83,176.56Z"
android:fillColor="#FFF7DD"/>
<path
android:pathData="M80.51,190.74m-6.18,0a6.18,6.18 0,1 1,12.37 0a6.18,6.18 0,1 1,-12.37 0"
android:fillColor="#FFC800"/>
<path
android:pathData="M50.47,219.9m-6.18,0a6.18,6.18 0,1 1,12.37 0a6.18,6.18 0,1 1,-12.37 0"
android:fillColor="#FFC800"/>
<path
android:pathData="M80.51,219.9m-6.18,0a6.18,6.18 0,1 1,12.37 0a6.18,6.18 0,1 1,-12.37 0"
android:fillColor="#FFC800"/>
<path
android:pathData="M77.6,193.13L50.21,220.52"
android:strokeWidth="1.76699"
android:fillColor="#00000000"
android:strokeColor="#FFC800"/>
<path
android:pathData="M80.07,219.9L50.47,219.9"
android:strokeWidth="1.76699"
android:fillColor="#00000000"
android:strokeColor="#FFC800"/>
<path
android:pathData="M311.22,173.59L289.22,173.9C286.98,173.93 284.78,174.55 282.85,175.7C280.92,176.85 279.34,178.48 278.25,180.44L267.53,199.55C266.44,201.5 265.88,203.71 265.91,205.95C265.94,208.18 266.56,210.38 267.72,212.3L278.99,231.12C280.14,233.04 281.78,234.63 283.74,235.72C285.7,236.81 287.91,237.36 290.15,237.33L312.15,237.01C314.39,236.99 316.59,236.37 318.52,235.22C320.45,234.08 322.04,232.45 323.14,230.49L333.84,211.37C334.93,209.41 335.49,207.21 335.45,204.97C335.42,202.73 334.79,200.54 333.64,198.62L322.38,179.8C321.23,177.88 319.59,176.3 317.63,175.21C315.67,174.12 313.46,173.56 311.22,173.59Z"
android:fillColor="#CEE3FF"/>
<path
android:pathData="M285.54,202.36C285.35,202.24 285.23,202.07 285.18,201.88C285.14,201.68 285.19,201.47 285.35,201.25C286.94,198.95 288.98,197.13 291.46,195.8C293.93,194.48 296.6,193.77 299.45,193.68C302.3,193.59 305.02,194.11 307.58,195.24C310.15,196.37 312.32,198.05 314.08,200.28C314.28,200.51 314.35,200.72 314.28,200.91C314.22,201.1 314.11,201.26 313.96,201.4C313.8,201.53 313.61,201.6 313.4,201.59C313.18,201.59 312.99,201.48 312.82,201.27C311.28,199.25 309.32,197.72 306.96,196.69C304.6,195.66 302.11,195.19 299.5,195.27C296.89,195.35 294.46,195.98 292.21,197.15C289.95,198.33 288.11,199.97 286.67,202.09C286.51,202.33 286.33,202.47 286.11,202.51C285.9,202.54 285.71,202.49 285.54,202.36ZM304.89,221.4C302.07,220.8 299.73,219.5 297.89,217.5C296.05,215.5 295.09,213.01 294.99,210.04C294.95,208.71 295.4,207.58 296.34,206.65C297.28,205.72 298.44,205.23 299.81,205.18C301.18,205.14 302.37,205.56 303.37,206.43C304.36,207.3 304.88,208.4 304.92,209.73C304.95,210.6 305.31,211.33 306,211.9C306.69,212.48 307.5,212.76 308.41,212.73C309.33,212.7 310.1,212.38 310.73,211.76C311.35,211.14 311.65,210.39 311.62,209.52C311.53,206.44 310.3,203.89 307.95,201.86C305.6,199.84 302.83,198.87 299.66,198.97C296.48,199.07 293.79,200.21 291.56,202.38C289.34,204.54 288.28,207.15 288.37,210.21C288.39,210.84 288.48,211.64 288.63,212.59C288.78,213.54 289.11,214.65 289.6,215.9C289.69,216.14 289.69,216.35 289.6,216.54C289.51,216.73 289.36,216.87 289.15,216.96C288.94,217.04 288.73,217.04 288.52,216.96C288.32,216.87 288.17,216.72 288.09,216.51C287.65,215.49 287.33,214.47 287.12,213.45C286.92,212.44 286.79,211.38 286.76,210.29C286.65,206.77 287.86,203.77 290.38,201.3C292.9,198.83 295.96,197.54 299.57,197.42C303.2,197.31 306.36,198.4 309.05,200.71C311.73,203.02 313.13,205.94 313.24,209.47C313.28,210.79 312.84,211.92 311.91,212.84C310.98,213.76 309.83,214.24 308.46,214.28C307.09,214.32 305.9,213.91 304.89,213.06C303.88,212.2 303.35,211.1 303.31,209.78C303.28,208.9 302.93,208.18 302.25,207.6C301.57,207.02 300.78,206.75 299.86,206.78C298.95,206.81 298.17,207.13 297.53,207.75C296.89,208.37 296.58,209.11 296.61,209.99C296.69,212.56 297.53,214.69 299.13,216.36C300.73,218.04 302.77,219.18 305.24,219.8C305.48,219.87 305.65,220 305.74,220.18C305.82,220.37 305.84,220.56 305.8,220.78C305.75,220.96 305.64,221.13 305.49,221.27C305.33,221.4 305.13,221.45 304.89,221.4ZM290.53,193.88C290.32,194.02 290.1,194.06 289.89,194C289.67,193.94 289.5,193.81 289.39,193.6C289.27,193.39 289.24,193.2 289.29,193.02C289.34,192.85 289.47,192.69 289.68,192.55C291.16,191.71 292.72,191.05 294.35,190.57C295.97,190.1 297.64,189.83 299.33,189.78C301.05,189.73 302.74,189.88 304.39,190.24C306.05,190.6 307.66,191.14 309.21,191.86C309.46,191.99 309.61,192.14 309.65,192.32C309.7,192.51 309.68,192.7 309.61,192.88C309.53,193.07 309.4,193.22 309.22,193.34C309.03,193.45 308.8,193.44 308.53,193.32C307.08,192.65 305.59,192.14 304.06,191.8C302.53,191.47 300.97,191.32 299.38,191.37C297.82,191.42 296.29,191.65 294.8,192.05C293.3,192.46 291.88,193.07 290.53,193.88ZM296.15,221.12C294.51,219.52 293.24,217.88 292.34,216.2C291.44,214.51 290.95,212.5 290.88,210.17C290.8,207.75 291.63,205.69 293.35,203.97C295.07,202.26 297.19,201.36 299.69,201.28C302.19,201.21 304.37,201.97 306.23,203.57C308.08,205.17 309.05,207.18 309.12,209.6C309.13,209.84 309.06,210.03 308.92,210.18C308.77,210.33 308.58,210.41 308.34,210.42C308.12,210.42 307.93,210.36 307.77,210.22C307.6,210.07 307.52,209.88 307.51,209.65C307.45,207.66 306.65,206.01 305.11,204.72C303.58,203.43 301.79,202.81 299.74,202.88C297.7,202.94 295.96,203.66 294.54,205.05C293.11,206.44 292.43,208.13 292.49,210.12C292.56,212.27 292.99,214.08 293.79,215.55C294.59,217.03 295.74,218.5 297.24,219.97C297.41,220.12 297.5,220.31 297.5,220.52C297.51,220.73 297.44,220.92 297.28,221.08C297.12,221.25 296.94,221.33 296.72,221.34C296.51,221.35 296.32,221.27 296.15,221.12ZM308.25,218.03C305.86,218.11 303.76,217.38 301.94,215.84C300.13,214.3 299.19,212.32 299.11,209.91C299.11,209.7 299.17,209.51 299.32,209.35C299.46,209.18 299.65,209.1 299.89,209.09C300.14,209.08 300.33,209.15 300.49,209.31C300.64,209.46 300.72,209.65 300.73,209.86C300.79,211.85 301.57,213.46 303.06,214.69C304.55,215.91 306.27,216.5 308.2,216.44C308.37,216.43 308.59,216.41 308.89,216.38C309.18,216.34 309.49,216.29 309.81,216.23C310.05,216.17 310.26,216.2 310.44,216.31C310.62,216.42 310.74,216.6 310.8,216.84C310.86,217.05 310.83,217.23 310.7,217.4C310.57,217.56 310.4,217.67 310.18,217.73C309.7,217.88 309.28,217.97 308.92,217.99C308.56,218.01 308.33,218.03 308.25,218.03Z"
android:fillColor="#669DF6"/>
<path
android:pathData="M214.98,100.49V166.46H149.02V100.49H214.98ZM214.98,91.07H149.02C143.83,91.07 139.59,95.31 139.59,100.49V166.46C139.59,171.64 143.83,175.88 149.02,175.88H214.98C220.17,175.88 224.41,171.64 224.41,166.46V100.49C224.41,95.31 220.17,91.07 214.98,91.07Z"
android:fillColor="#669DF6"/>
<path
android:pathData="M186.4,134.74L189.09,149.96H174.95L177.64,134.74C174.62,133.19 172.6,130.03 172.6,126.4C172.6,121.22 176.84,116.98 182.02,116.98C187.2,116.98 191.44,121.22 191.44,126.4C191.44,130.03 189.42,133.19 186.4,134.74Z"
android:fillColor="#669DF6"/>
</group>
</vector>

View File

@@ -1,82 +0,0 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="412dp"
android:height="300dp"
android:viewportWidth="364"
android:viewportHeight="265">
<group>
<clip-path
android:pathData="M0,0h364v265h-364z"/>
<group>
<clip-path
android:pathData="M0,0h364v265.05h-364z"/>
<path
android:pathData="M339.44,265.05H24.56C11.04,265.05 0,253.74 0,239.87V25.18C0,11.31 11.04,0 24.56,0H339.53C352.96,0 364,11.31 364,25.18V240.05C364,253.74 352.96,265.05 339.44,265.05Z"
android:fillColor="#000000"/>
<path
android:pathData="M85.7,153.29a17.67,18.11 0,1 0,35.34 0a17.67,18.11 0,1 0,-35.34 0z"
android:fillColor="#3C4043"/>
<path
android:pathData="M155.05,153.29m-18.11,0a18.11,18.11 0,1 1,36.22 0a18.11,18.11 0,1 1,-36.22 0"
android:fillColor="#3C4043"/>
<path
android:pathData="M208.95,153.29m-18.11,0a18.11,18.11 0,1 1,36.22 0a18.11,18.11 0,1 1,-36.22 0"
android:fillColor="#3C4043"/>
<path
android:pathData="M75.1,76.86L288.9,76.86A8.83,8.83 0,0 1,297.74 85.7L297.74,236.78A8.83,8.83 0,0 1,288.9 245.61L75.1,245.61A8.83,8.83 0,0 1,66.26 236.78L66.26,85.7A8.83,8.83 0,0 1,75.1 76.86z"
android:fillColor="#E8F0FE"/>
<path
android:pathData="M288.02,104.25C288.02,112.06 281.69,118.39 273.88,118.39C266.08,118.39 259.75,112.06 259.75,104.25C259.75,96.45 266.08,90.12 273.88,90.12C281.69,90.12 288.02,96.45 288.02,104.25Z"
android:fillColor="#D2E3FC"/>
<path
android:pathData="M275.92,98.6C275.92,97.39 276.99,96.37 278.35,96.37C279.71,96.37 280.78,97.39 280.78,98.6V101.88H282.72V98.6C282.72,96.33 280.74,94.53 278.35,94.53C275.96,94.53 273.98,96.33 273.98,98.6V100.96H267.57C266.18,100.96 265.05,102.03 265.05,103.35V110.7C265.05,112.02 266.18,113.09 267.57,113.09H276.7C278.09,113.09 279.22,112.02 279.22,110.7V103.35C279.22,102.03 278.09,100.96 276.7,100.96H275.92V98.6ZM267.57,102.8C267.25,102.8 266.99,103.05 266.99,103.35V110.7C266.99,111 267.25,111.25 267.57,111.25H276.7C277.02,111.25 277.28,111 277.28,110.7V103.35C277.28,103.05 277.02,102.8 276.7,102.8H267.57ZM272.14,108.68C273.1,108.68 273.88,107.94 273.88,107.03C273.88,106.11 273.1,105.37 272.14,105.37C271.17,105.37 270.39,106.11 270.39,107.03C270.39,107.94 271.17,108.68 272.14,108.68Z"
android:fillColor="#669DF6"
android:fillType="evenOdd"/>
<path
android:pathData="M102.04,147.1m-19.88,0a19.88,19.88 0,1 1,39.76 0a19.88,19.88 0,1 1,-39.76 0"
android:fillColor="#669DF6"/>
<path
android:pathData="M155.94,147.1m-19.88,0a19.88,19.88 0,1 1,39.76 0a19.88,19.88 0,1 1,-39.76 0"
android:fillColor="#669DF6"/>
<path
android:pathData="M102.04,204.53m-19.88,0a19.88,19.88 0,1 1,39.76 0a19.88,19.88 0,1 1,-39.76 0"
android:fillColor="#669DF6"/>
<path
android:pathData="M155.94,204.53m-19.88,0a19.88,19.88 0,1 1,39.76 0a19.88,19.88 0,1 1,-39.76 0"
android:fillColor="#669DF6"/>
<path
android:pathData="M210.71,203.65m-19.88,0a19.88,19.88 0,1 1,39.76 0a19.88,19.88 0,1 1,-39.76 0"
android:fillColor="#669DF6"/>
<path
android:pathData="M265.49,203.65m-19.88,0a19.88,19.88 0,1 1,39.76 0a19.88,19.88 0,1 1,-39.76 0"
android:fillColor="#669DF6"/>
</group>
<path
android:pathData="M86.14,46.38m-19.88,0a19.88,19.88 0,1 1,39.76 0a19.88,19.88 0,1 1,-39.76 0"
android:fillColor="#3C4043"/>
<path
android:pathData="M150.64,46.38m-19.88,0a19.88,19.88 0,1 1,39.76 0a19.88,19.88 0,1 1,-39.76 0"
android:fillColor="#3C4043"/>
<path
android:pathData="M213.36,46.38m-19.88,0a19.88,19.88 0,1 1,39.76 0a19.88,19.88 0,1 1,-39.76 0"
android:fillColor="#3C4043"/>
<path
android:pathData="M277.86,46.38m-19.88,0a19.88,19.88 0,1 1,39.76 0a19.88,19.88 0,1 1,-39.76 0"
android:fillColor="#3C4043"/>
</group>
</vector>

View File

@@ -1,65 +0,0 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="364dp"
android:height="265dp"
android:viewportWidth="364"
android:viewportHeight="265">
<group>
<group>
<clip-path
android:pathData="M0,0.48h364v265.05h-364z"/>
<path
android:pathData="M339.42,264.99H24.58C11.07,264.99 0,253.7 0,239.92V25.94C0,12.12 11.07,0.83 24.58,0.83H339.52C352.93,0.83 364,12.12 364,25.91V240.01C364,253.7 352.93,264.99 339.42,264.99Z"
android:fillColor="#000000"/>
</group>
<path
android:pathData="M200.49,144.8C200.49,139.45 205.07,134.95 210.92,134.95C216.77,134.95 221.36,139.45 221.36,144.8V159.36H229.71V144.8C229.71,134.78 221.21,126.82 210.92,126.82C200.64,126.82 192.14,134.78 192.14,144.8V155.29H164.58C158.59,155.29 153.73,160.02 153.73,165.86V198.4C153.73,204.24 158.59,208.98 164.58,208.98H203.82C209.82,208.98 214.68,204.24 214.68,198.4V165.86C214.68,160.02 209.82,155.29 203.82,155.29H200.49V144.8ZM164.58,163.42C163.2,163.42 162.08,164.52 162.08,165.86V198.4C162.08,199.75 163.2,200.85 164.58,200.85H203.82C205.21,200.85 206.33,199.75 206.33,198.4V165.86C206.33,164.52 205.21,163.42 203.82,163.42H164.58ZM184.2,189.46C188.35,189.46 191.72,186.18 191.72,182.13C191.72,178.09 188.35,174.81 184.2,174.81C180.05,174.81 176.69,178.09 176.69,182.13C176.69,186.18 180.05,189.46 184.2,189.46Z"
android:fillColor="#C58AF9"
android:fillType="evenOdd"/>
<path
android:pathData="M163.56,220.47C168.99,220.47 173.39,224.87 173.39,230.3C173.39,235.72 168.99,240.13 163.56,240.13C158.13,240.13 153.73,235.72 153.73,230.3C153.73,224.87 158.13,220.47 163.56,220.47Z"
android:fillColor="#5F6368"/>
<path
android:pathData="M201.15,220.47C206.58,220.47 210.98,224.87 210.98,230.3C210.98,235.72 206.58,240.13 201.15,240.13C195.71,240.13 191.32,235.72 191.32,230.3C191.32,224.87 195.71,220.47 201.15,220.47Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M89.23,28.75L257.1,28.75A13.25,13.25 0,0 1,270.35 42L270.35,79.99A13.25,13.25 0,0 1,257.1 93.24L89.23,93.24A13.25,13.25 0,0 1,75.98 79.99L75.98,42A13.25,13.25 0,0 1,89.23 28.75z"
android:fillColor="#E9D2FD"/>
<path
android:pathData="M145.78,43.77L241.19,43.77A5.3,5.3 0,0 1,246.49 49.07L246.49,49.07A5.3,5.3 0,0 1,241.19 54.37L145.78,54.37A5.3,5.3 0,0 1,140.48 49.07L140.48,49.07A5.3,5.3 0,0 1,145.78 43.77z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M145.34,64.97L241.64,64.97A4.86,4.86 0,0 1,246.49 69.83L246.49,69.83A4.86,4.86 0,0 1,241.64 74.69L145.34,74.69A4.86,4.86 0,0 1,140.48 69.83L140.48,69.83A4.86,4.86 0,0 1,145.34 64.97z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M108.23,81.76C120.18,81.76 129.87,72.07 129.87,60.11C129.87,48.16 120.18,38.47 108.23,38.47C96.27,38.47 86.58,48.16 86.58,60.11C86.58,72.07 96.27,81.76 108.23,81.76Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M266.37,112.68C278.33,112.68 288.02,102.99 288.02,91.03C288.02,79.08 278.33,69.39 266.37,69.39C254.42,69.39 244.73,79.08 244.73,91.03C244.73,102.99 254.42,112.68 266.37,112.68Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M96.3,70.05V66.96H99.39V56.14C99.39,54 100.04,52.1 101.33,50.43C102.61,48.77 104.29,47.68 106.35,47.17V46.09C106.35,45.44 106.58,44.89 107.03,44.44C107.48,43.99 108.03,43.77 108.67,43.77C109.31,43.77 109.86,43.99 110.31,44.44C110.76,44.89 110.99,45.44 110.99,46.09V47.17C113.05,47.68 114.73,48.77 116.01,50.43C117.3,52.1 117.95,54 117.95,56.14V66.96H121.04V70.05H96.3ZM108.67,74.69C107.82,74.69 107.09,74.39 106.49,73.78C105.88,73.18 105.58,72.45 105.58,71.6H111.76C111.76,72.45 111.46,73.18 110.85,73.78C110.25,74.39 109.52,74.69 108.67,74.69ZM102.49,66.96H114.85V56.14C114.85,54.43 114.25,52.98 113.04,51.77C111.83,50.56 110.37,49.95 108.67,49.95C106.97,49.95 105.51,50.56 104.3,51.77C103.09,52.98 102.49,54.43 102.49,56.14V66.96Z"
android:fillColor="#E9D2FD"/>
<path
android:pathData="M276.44,81.86V101.1H257.2V81.86H276.44ZM276.44,79.11H257.2C255.68,79.11 254.45,80.34 254.45,81.86V101.1C254.45,102.61 255.68,103.84 257.2,103.84H276.44C277.95,103.84 279.18,102.61 279.18,101.1V81.86C279.18,80.34 277.95,79.11 276.44,79.11Z"
android:fillColor="#E9D2FD"/>
<path
android:pathData="M268.09,91.85L268.87,96.29H264.75L265.54,91.85C264.65,91.39 264.06,90.47 264.06,89.42C264.06,87.9 265.3,86.67 266.81,86.67C268.33,86.67 269.56,87.9 269.56,89.42C269.56,90.47 268.97,91.39 268.09,91.85Z"
android:fillColor="#E9D2FD"/>
</group>
</vector>

View File

@@ -1,77 +0,0 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="364dp"
android:height="266dp"
android:viewportWidth="364"
android:viewportHeight="266">
<group>
<clip-path
android:pathData="M0,0.48h364v265.05h-364z"/>
<path
android:pathData="M339.42,264.99H24.58C11.07,264.99 0,253.7 0,239.92V25.94C0,12.13 11.07,0.83 24.58,0.83H339.52C352.93,0.83 364,12.13 364,25.91V240.01C364,253.7 352.93,264.99 339.42,264.99Z"
android:fillColor="#000000"/>
<path
android:pathData="M75.92,137.81L50.21,111.72C50.1,111.61 49.96,111.54 49.81,111.5C49.66,111.47 49.51,111.49 49.36,111.54C49.22,111.6 49.1,111.7 49.01,111.83C48.93,111.95 48.88,112.1 48.88,112.26L48.52,162.99C48.52,163.14 48.56,163.29 48.64,163.42C48.73,163.54 48.84,163.64 48.98,163.7C49.12,163.76 49.27,163.78 49.42,163.76C49.57,163.73 49.71,163.66 49.82,163.56L75.92,137.81Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M79.16,134.61L87.37,126.51L54.65,107.44C54.48,107.32 54.27,107.28 54.07,107.31C53.87,107.35 53.69,107.46 53.57,107.62C53.45,107.78 53.39,107.99 53.42,108.19C53.44,108.39 53.55,108.58 53.71,108.71L79.16,134.61Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M53.24,166.57C53.09,166.71 53.01,166.89 52.99,167.08C52.97,167.27 53.02,167.47 53.13,167.63C53.24,167.79 53.41,167.9 53.6,167.95C53.79,167.99 53.99,167.97 54.16,167.88L87.22,149.32L79.13,141.09L53.24,166.57Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M101.4,134.67L91.43,128.87L82.37,137.83L91.35,146.94L101.4,141.28C101.97,140.94 102.45,140.46 102.78,139.88C103.11,139.3 103.29,138.64 103.29,137.97C103.29,137.31 103.11,136.65 102.78,136.07C102.45,135.49 101.97,135.01 101.4,134.67Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M263.42,132.67C263.42,136.04 264.61,138.92 267,141.32C269.39,143.71 272.26,144.91 275.61,144.91C278.96,144.91 281.83,143.71 284.22,141.32C286.61,138.92 287.8,136.04 287.8,132.67C287.8,129.31 286.61,126.43 284.22,124.03C281.83,121.63 278.96,120.43 275.61,120.43C272.26,120.43 269.39,121.63 267,124.03C264.61,126.43 263.42,129.31 263.42,132.67ZM275.61,151.03C276.27,151.03 276.9,151.01 277.51,150.95C278.12,150.9 278.73,150.8 279.34,150.65L272.18,163.04C264.51,162.17 258.08,158.87 252.9,153.13C247.72,147.4 245.13,140.58 245.13,132.67C245.13,130.53 245.33,128.45 245.74,126.44C246.14,124.43 246.75,122.5 247.57,120.66L259.76,141.85C261.33,144.6 263.52,146.82 266.31,148.51C269.11,150.19 272.2,151.03 275.61,151.03ZM275.61,114.32C271.55,114.32 267.94,115.5 264.79,117.87C261.64,120.24 259.45,123.26 258.23,126.94L251.07,114.54C253.87,110.77 257.38,107.75 261.63,105.48C265.87,103.21 270.53,102.08 275.61,102.08C280.64,102.08 285.26,103.19 289.48,105.4C293.69,107.62 297.2,110.59 299.99,114.32H275.61ZM303.5,120.43C304.36,122.32 305.01,124.29 305.44,126.32C305.87,128.36 306.09,130.48 306.09,132.67C306.09,140.58 303.51,147.38 298.36,153.1C293.2,158.81 286.84,162.12 279.27,163.04L291.46,141.85C292.22,140.53 292.82,139.09 293.25,137.53C293.68,135.98 293.9,134.36 293.9,132.67C293.9,130.28 293.48,128.04 292.64,125.98C291.8,123.92 290.65,122.07 289.17,120.43H303.5Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M155.01,119.75h41.52v36.22h-41.52z"
android:fillColor="#E9D2FD"/>
<path
android:pathData="M175.77,149.2C179.47,149.2 182.62,147.91 185.21,145.33C187.8,142.76 189.09,139.63 189.09,135.95C189.09,132.26 187.8,129.13 185.21,126.56C182.62,123.98 179.47,122.69 175.77,122.69C172.07,122.69 168.93,123.98 166.34,126.56C163.75,129.13 162.46,132.26 162.46,135.95C162.46,139.63 163.75,142.76 166.34,145.33C168.93,147.91 172.07,149.2 175.77,149.2ZM175.77,143.31C173.7,143.31 171.95,142.6 170.52,141.17C169.09,139.75 168.38,138.01 168.38,135.95C168.38,133.88 169.09,132.14 170.52,130.72C171.95,129.29 173.7,128.58 175.77,128.58C177.85,128.58 179.6,129.29 181.03,130.72C182.46,132.14 183.17,133.88 183.17,135.95C183.17,138.01 182.46,139.75 181.03,141.17C179.6,142.6 177.85,143.31 175.77,143.31ZM152.1,159.51C150.47,159.51 149.07,158.93 147.92,157.77C146.76,156.62 146.18,155.24 146.18,153.62V118.28C146.18,116.65 146.76,115.27 147.92,114.11C149.07,112.96 150.47,112.39 152.1,112.39H161.42L166.9,106.5H184.65L190.13,112.39H199.45C201.08,112.39 202.47,112.96 203.63,114.11C204.79,115.27 205.37,116.65 205.37,118.28V153.62C205.37,155.24 204.79,156.62 203.63,157.77C202.47,158.93 201.08,159.51 199.45,159.51H152.1Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M109.51,182.48C121.47,182.48 131.16,172.78 131.16,160.83C131.16,148.88 121.47,139.18 109.51,139.18C97.56,139.18 87.87,148.88 87.87,160.83C87.87,172.78 97.56,182.48 109.51,182.48Z"
android:fillColor="#E9D2FD"/>
<path
android:pathData="M119.57,151.65V170.89H100.33V151.65H119.57ZM119.57,148.9H100.33C98.82,148.9 97.58,150.14 97.58,151.65V170.89C97.58,172.4 98.82,173.64 100.33,173.64H119.57C121.09,173.64 122.32,172.4 122.32,170.89V151.65C122.32,150.14 121.09,148.9 119.57,148.9Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M111.23,161.64L112.01,166.08H107.89L108.67,161.64C107.79,161.19 107.2,160.27 107.2,159.21C107.2,157.7 108.44,156.46 109.95,156.46C111.46,156.46 112.7,157.7 112.7,159.21C112.7,160.27 112.11,161.19 111.23,161.64Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M208.46,182.48C220.42,182.48 230.11,172.78 230.11,160.83C230.11,148.88 220.42,139.18 208.46,139.18C196.51,139.18 186.82,148.88 186.82,160.83C186.82,172.78 196.51,182.48 208.46,182.48Z"
android:fillColor="#E9D2FD"/>
<path
android:pathData="M218.52,151.65V170.89H199.29V151.65H218.52ZM218.52,148.9H199.29C197.77,148.9 196.54,150.14 196.54,151.65V170.89C196.54,172.4 197.77,173.64 199.29,173.64H218.52C220.04,173.64 221.27,172.4 221.27,170.89V151.65C221.27,150.14 220.04,148.9 218.52,148.9Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M210.18,161.64L210.96,166.08H206.84L207.62,161.64C206.74,161.19 206.15,160.27 206.15,159.21C206.15,157.7 207.39,156.46 208.9,156.46C210.41,156.46 211.65,157.7 211.65,159.21C211.65,160.27 211.06,161.19 210.18,161.64Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M312.72,182.48C324.67,182.48 334.36,172.78 334.36,160.83C334.36,148.88 324.67,139.18 312.72,139.18C300.76,139.18 291.07,148.88 291.07,160.83C291.07,172.78 300.76,182.48 312.72,182.48Z"
android:fillColor="#E9D2FD"/>
<path
android:pathData="M322.78,151.65V170.89H303.54V151.65H322.78ZM322.78,148.9H303.54C302.03,148.9 300.79,150.14 300.79,151.65V170.89C300.79,172.4 302.03,173.64 303.54,173.64H322.78C324.29,173.64 325.53,172.4 325.53,170.89V151.65C325.53,150.14 324.29,148.9 322.78,148.9Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M314.43,161.64L315.22,166.08H311.09L311.88,161.64C311,161.19 310.41,160.27 310.41,159.21C310.41,157.7 311.64,156.46 313.15,156.46C314.67,156.46 315.9,157.7 315.9,159.21C315.9,160.27 315.31,161.19 314.43,161.64Z"
android:fillColor="#C58AF9"/>
</group>
</vector>

View File

@@ -1,100 +0,0 @@
<!--
~ Copyright (C) 2024 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="364dp"
android:height="266dp"
android:viewportWidth="364"
android:viewportHeight="266">
<group>
<clip-path
android:pathData="M0,0.48h364v265.05h-364z"/>
<path
android:pathData="M339.42,264.99H24.58C11.07,264.99 0,253.7 0,239.92V25.94C0,12.13 11.07,0.83 24.58,0.83H339.52C352.93,0.83 364,12.13 364,25.91V240.01C364,253.7 352.93,264.99 339.42,264.99Z"
android:fillColor="#000000"/>
<path
android:pathData="M201.15,182.48C195.72,182.48 191.32,186.88 191.32,192.31C191.32,197.73 195.72,202.14 201.15,202.14C206.58,202.14 210.98,197.73 210.98,192.31C210.98,186.88 206.58,182.48 201.15,182.48Z"
android:fillColor="#3C4043"/>
<path
android:pathData="M163.56,182.48C158.13,182.48 153.73,186.88 153.73,192.31C153.73,197.73 158.13,202.14 163.56,202.14C168.99,202.14 173.39,197.73 173.39,192.31C173.39,186.88 168.99,182.48 163.56,182.48Z"
android:fillColor="#669DF6"/>
<path
android:pathData="M185.48,136.99C186.07,136.99 186.56,136.8 186.94,136.41C187.33,136.03 187.52,135.54 187.52,134.95C187.52,134.36 187.33,133.88 186.94,133.49C186.56,133.1 186.07,132.91 185.48,132.91C184.88,132.91 184.4,133.1 184.01,133.49C183.62,133.88 183.43,134.36 183.43,134.95C183.43,135.54 183.62,136.03 184.01,136.41C184.4,136.8 184.88,136.99 185.48,136.99Z"
android:fillColor="#202124"/>
<path
android:pathData="M338.13,145.81L322.74,131.98C319.02,128.64 313.3,128.94 309.97,132.66C306.63,136.37 306.93,142.09 310.65,145.43L326.05,159.26C329.76,162.6 335.48,162.3 338.82,158.58C342.15,154.87 341.85,149.15 338.13,145.81Z"
android:fillColor="#AECBFA"/>
<path
android:pathData="M325.81,64.64L295.79,43.72C293.73,42.28 290.89,42.79 289.45,44.85L268.54,74.87C267.1,76.93 267.6,79.77 269.67,81.21L299.69,102.13C301.75,103.56 304.59,103.06 306.02,100.99L326.94,70.97C328.38,68.91 327.87,66.07 325.81,64.64Z"
android:fillColor="#E8F0FE"/>
<path
android:pathData="M297.96,73.56C299.44,74.63 301.2,75.25 303.04,75.33C304.87,75.41 306.69,74.95 308.25,74.01C309.82,73.06 311.07,71.68 311.85,70.03C312.63,68.38 312.89,66.53 312.61,64.73C312.34,62.93 311.53,61.25 310.29,59.91C309.05,58.56 307.44,57.61 305.66,57.18C303.88,56.75 302,56.85 300.28,57.47C298.56,58.09 297.06,59.21 295.97,60.68C294.52,62.65 293.91,65.11 294.28,67.53C294.65,69.94 295.98,72.11 297.96,73.56Z"
android:fillColor="#669DF6"/>
<path
android:pathData="M295.71,77.78C287.35,71.94 278.5,69.93 272.37,77.85L302.63,98.92C308.76,91 304.07,83.58 295.71,77.78Z"
android:fillColor="#669DF6"/>
<path
android:pathData="M84.13,50.89L47.87,55.78C45.37,56.11 43.63,58.4 43.96,60.89L48.85,97.15C49.18,99.65 51.47,101.39 53.97,101.06L90.23,96.17C92.72,95.84 94.47,93.55 94.13,91.05L89.25,54.79C88.91,52.3 86.62,50.55 84.13,50.89Z"
android:fillColor="#E9D2FD"/>
<path
android:pathData="M69.64,76.29C71.46,76.08 73.18,75.35 74.58,74.17C75.99,72.99 77.01,71.42 77.53,69.66C78.05,67.91 78.03,66.04 77.49,64.3C76.94,62.56 75.89,61.02 74.47,59.88C73.05,58.74 71.32,58.05 69.49,57.9C67.67,57.75 65.84,58.14 64.24,59.02C62.63,59.91 61.32,61.24 60.47,62.87C59.62,64.49 59.27,66.33 59.47,68.15C59.73,70.58 60.94,72.81 62.85,74.33C64.76,75.86 67.2,76.56 69.64,76.29Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M70.84,80.92C60.73,82.28 52.85,86.78 53.69,96.76L90.23,91.82C89.39,81.84 80.92,79.54 70.84,80.92Z"
android:fillColor="#C58AF9"/>
<path
android:pathData="M39.14,170.33L66.27,160.64A11.49,11.49 115.34,0 1,80.95 167.59L89.91,192.65A11.49,11.49 115.34,0 1,82.96 207.33L55.82,217.03A11.49,11.49 115.34,0 1,41.14 210.07L32.19,185.01A11.49,11.49 115.34,0 1,39.14 170.33z"
android:fillColor="#E8F0FE"/>
<path
android:pathData="M66.57,172.29a4.81,4.58 70.34,1 0,8.63 -3.08a4.81,4.58 70.34,1 0,-8.63 3.08z"
android:fillColor="#669DF6"/>
<group>
<clip-path
android:pathData="M39.14,170.33L66.27,160.64A11.49,11.49 115.34,0 1,80.95 167.59L89.91,192.65A11.49,11.49 115.34,0 1,82.96 207.33L55.82,217.03A11.49,11.49 115.34,0 1,41.14 210.07L32.19,185.01A11.49,11.49 115.34,0 1,39.14 170.33z"/>
<path
android:pathData="M57.86,186.51C53.39,183.04 46.83,185.22 45.32,190.67L39.9,210.23C38.18,216.44 44.17,222.01 50.24,219.85L72.6,211.86C72.78,211.79 72.95,211.72 73.12,211.65C73.31,211.59 73.49,211.54 73.68,211.47L88.87,206.04C95.09,203.82 96.05,195.42 90.49,191.86L79.38,184.73C74.99,181.92 69.13,184.01 67.52,188.97L66.21,193L57.86,186.51Z"
android:fillColor="#669DF6"
android:fillType="evenOdd"/>
</group>
<path
android:pathData="M297.35,169.44L324.72,178.44A11.49,11.49 63.19,0 1,332.04 192.93L323.74,218.22A11.49,11.49 63.19,0 1,309.24 225.54L281.87,216.55A11.49,11.49 63.19,0 1,274.54 202.05L282.85,176.77A11.49,11.49 63.19,0 1,297.35 169.44z"
android:fillColor="#E9D2FD"/>
<path
android:pathData="M317.81,187.82a4.81,4.58 108.19,1 0,8.71 2.86a4.81,4.58 108.19,1 0,-8.71 -2.86z"
android:fillColor="#C58AF9"/>
<group>
<clip-path
android:pathData="M297.35,169.44L324.72,178.44A11.49,11.49 63.19,0 1,332.04 192.93L323.74,218.22A11.49,11.49 63.19,0 1,309.24 225.54L281.87,216.55A11.49,11.49 63.19,0 1,274.54 202.05L282.85,176.77A11.49,11.49 63.19,0 1,297.35 169.44z"/>
<path
android:pathData="M302.2,193.71C300.8,188.23 294.29,185.92 289.75,189.3L273.46,201.42C268.3,205.27 269.61,213.34 275.73,215.35L298.28,222.76C298.46,222.82 298.64,222.87 298.83,222.92C299.01,222.99 299.19,223.06 299.38,223.12L314.71,228.15C320.98,230.22 326.89,224.17 324.68,217.95L320.28,205.5C318.54,200.59 312.63,198.65 308.32,201.57L304.82,203.95L302.2,193.71Z"
android:fillColor="#C58AF9"
android:fillType="evenOdd"/>
</group>
</group>
<path
android:pathData="M157.77,52.17L131.31,64.89C130.6,65.23 129.79,65.27 129.04,65.01C128.3,64.75 127.69,64.21 127.36,63.5L126.91,62.58C124.89,58.37 124.62,53.52 126.17,49.1C127.72,44.69 130.96,41.07 135.17,39.04C139.39,37.01 144.24,36.74 148.66,38.29C153.07,39.84 156.69,43.08 158.72,47.3L159.16,48.21C159.5,48.92 159.54,49.74 159.28,50.48C159.02,51.22 158.48,51.83 157.77,52.17Z"
android:fillColor="#669DF6"/>
<path
android:pathData="M200.49,106.81C200.49,101.46 205.07,96.96 210.92,96.96C216.77,96.96 221.36,101.46 221.36,106.81V121.37H229.71V106.81C229.71,96.79 221.21,88.83 210.92,88.83C200.64,88.83 192.14,96.79 192.14,106.81V117.3H164.58C158.59,117.3 153.73,122.03 153.73,127.87V160.41C153.73,166.26 158.59,170.99 164.58,170.99H203.82C209.82,170.99 214.68,166.26 214.68,160.41V127.87C214.68,122.03 209.82,117.3 203.82,117.3H200.49V106.81ZM164.58,125.43C163.2,125.43 162.08,126.53 162.08,127.87V160.41C162.08,161.76 163.2,162.85 164.58,162.85H203.82C205.21,162.85 206.33,161.76 206.33,160.41V127.87C206.33,126.53 205.21,125.43 203.82,125.43H164.58ZM184.2,151.47C188.35,151.47 191.72,148.19 191.72,144.14C191.72,140.1 188.35,136.82 184.2,136.82C180.05,136.82 176.69,140.1 176.69,144.14C176.69,148.19 180.05,151.47 184.2,151.47Z"
android:fillColor="#C58AF9"
android:fillType="evenOdd"/>
<path
android:pathData="M163.56,182.48C168.99,182.48 173.39,186.88 173.39,192.31C173.39,197.73 168.99,202.14 163.56,202.14C158.13,202.14 153.73,197.73 153.73,192.31C153.73,186.88 158.13,182.48 163.56,182.48Z"
android:fillColor="#5F6368"/>
<path
android:pathData="M201.15,182.48C206.58,182.48 210.98,186.88 210.98,192.31C210.98,197.73 206.58,202.14 201.15,202.14C195.71,202.14 191.32,197.73 191.32,192.31C191.32,186.88 195.71,182.48 201.15,182.48Z"
android:fillColor="#C58AF9"/>
</vector>

View File

@@ -1,143 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2023 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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="364dp"
android:height="265dp"
android:viewportWidth="364"
android:viewportHeight="265">
<group>
<clip-path
android:pathData="M0,0h364v265h-364z"/>
<path
android:pathData="M339.42,265H24.58C11.07,265 0,253.67 0,239.84V25.19C0,11.33 11.07,0 24.58,0H339.52C352.93,0 364,11.33 364,25.16V239.94C364,253.67 352.93,265 339.42,265Z"
android:fillColor="#000000"/>
<path
android:pathData="M247.65,93.87V85.83C247.65,84.73 246.73,83.82 245.61,83.82V41.94C245.61,36.42 241.02,32 235.5,32H142.1C136.49,32 132,36.52 132,41.94V233.67C132,239.2 136.59,243.62 142.1,243.62H235.5C241.12,243.62 245.61,239.1 245.61,233.67V135.85C246.73,135.85 247.65,134.95 247.65,133.84V113.86C247.65,112.75 246.73,111.85 245.61,111.85V95.88C246.84,95.88 247.65,94.97 247.65,93.87ZM243.67,233.67C243.67,238.09 240,241.71 235.5,241.71H142.1C137.61,241.71 133.94,238.09 133.94,233.67V41.94C133.94,37.52 137.61,33.91 142.1,33.91H235.5C240,33.91 243.67,37.52 243.67,41.94V233.67Z"
android:fillColor="#DADCE0"/>
<path
android:pathData="M151.68,46.76L225.5,46.76A7.38,7.38 0,0 1,232.89 54.15L232.89,54.15A7.38,7.38 0,0 1,225.5 61.53L151.68,61.53A7.38,7.38 0,0 1,144.3 54.15L144.3,54.15A7.38,7.38 0,0 1,151.68 46.76z"
android:fillColor="#444746"/>
<path
android:pathData="M147.42,187.02L228.54,187.02A8.04,8.04 0,0 1,236.58 195.06L236.58,226.97A8.04,8.04 0,0 1,228.54 235L147.42,235A8.04,8.04 0,0 1,139.38 226.97L139.38,195.06A8.04,8.04 0,0 1,147.42 187.02z"
android:fillColor="#1F1F1F"/>
<path
android:pathData="M154.15,77.52m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M177.52,77.52m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M200.9,77.52m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M224.27,77.52m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M154.15,99.67m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M154.15,121.81m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M154.15,143.96m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M154.15,166.11m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M177.52,99.67m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M177.52,121.81m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M177.52,143.96m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M177.52,166.11m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M200.9,99.67m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M200.9,121.81m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M200.9,143.96m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M200.9,166.11m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M224.27,99.67m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M224.27,121.81m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M224.27,143.96m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M224.27,166.11m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#D9D9D9"
android:fillAlpha="0.4"/>
<path
android:pathData="M154.15,199.32m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#0B57D0"/>
<path
android:pathData="M154.15,220.24m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#0B57D0"/>
<path
android:pathData="M177.52,199.32m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#0B57D0"/>
<path
android:pathData="M177.52,220.24m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#0B57D0"/>
<path
android:pathData="M200.9,199.32m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#0B57D0"/>
<path
android:pathData="M200.9,220.24m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#0B57D0"/>
<path
android:pathData="M224.27,199.32m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#0B57D0"/>
<path
android:pathData="M224.27,220.24m-7.38,0a7.38,7.38 0,1 1,14.76 0a7.38,7.38 0,1 1,-14.76 0"
android:fillColor="#0B57D0"/>
</group>
</vector>

View File

@@ -0,0 +1,251 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2024 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.
-->
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingLeft="24dp"
android:paddingRight="24dp"
android:paddingBottom="24dp"
android:background="@drawable/color_contrast_preview_background">
<View
android:id="@+id/preview_background"
android:background="?androidprv:attr/materialColorSurface"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toTopOf="@+id/bottom_appbar_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/preview"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:layout_margin="8dp"
android:textSize="14sp"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:textColor="?androidprv:attr/textColorPrimary"
android:text="@string/color_contrast_preview" />
<View
android:id="@+id/email_background"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginLeft="12dp"
android:layout_marginRight="12dp"
android:layout_marginTop="8dp"
android:layout_marginBottom="24dp"
android:background="@drawable/color_contrast_preview_dialog_background"
app:layout_constraintBottom_toTopOf="@+id/bottom_appbar_background"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/preview" />
<ImageView
android:id="@+id/ic_group"
android:contentDescription="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:layout_marginLeft="14dp"
android:padding="8dp"
android:src="@drawable/ic_group_24dp"
android:background="@drawable/color_contrast_preview_icon_group_background"
app:layout_constraintStart_toStartOf="@+id/email_background"
app:layout_constraintTop_toTopOf="@+id/email_background" />
<TextView
android:id="@+id/sender_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginTop="17dp"
android:textColor="?androidprv:attr/materialColorOnSurface"
android:textSize="12sp"
app:layout_constraintStart_toEndOf="@+id/ic_group"
app:layout_constraintTop_toTopOf="@+id/email_background"
android:text="@string/color_contrast_preview_sender_name" />
<TextView
android:id="@+id/date"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?androidprv:attr/materialColorOnSurfaceVariant"
android:textSize="11sp"
app:layout_constraintStart_toStartOf="@+id/sender_name"
app:layout_constraintTop_toBottomOf="@+id/sender_name"
android:text="@string/color_contrast_preview_email_send_date" />
<TextView
android:id="@+id/email_tag"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="10dp"
android:textColor="?androidprv:attr/materialColorOnSurface"
android:background="@drawable/color_contrast_preview_tag_background"
android:textSize="11sp"
app:layout_constraintStart_toEndOf="@+id/sender_name"
app:layout_constraintTop_toTopOf="@+id/sender_name"
android:text="@string/color_contrast_preview_email_badge" />
<ImageView
android:id="@+id/ic_star"
android:contentDescription="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="14dp"
android:layout_marginRight="14dp"
android:padding="8dp"
android:src="@drawable/ic_star_24dp"
android:background="@drawable/color_contrast_preview_icon_star_background"
app:layout_constraintEnd_toEndOf="@+id/email_background"
app:layout_constraintTop_toTopOf="@+id/email_background" />
<TextView
android:id="@+id/email_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="14dp"
android:layout_marginTop="62dp"
android:textColor="?androidprv:attr/materialColorOnSurface"
android:textSize="16sp"
app:layout_constraintStart_toStartOf="@+id/email_background"
app:layout_constraintTop_toTopOf="@+id/email_background"
android:text="@string/color_contrast_preview_email_title" />
<TextView
android:id="@+id/email_body"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="?androidprv:attr/materialColorOnSurfaceVariant"
android:textSize="12sp"
android:paddingBottom="8dp"
android:maxLines="2"
app:layout_constraintStart_toStartOf="@+id/email_title"
app:layout_constraintTop_toBottomOf="@+id/email_title"
android:text="@string/color_contrast_preview_email_body" />
<View
android:id="@+id/attachment_background"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/color_contrast_preview_button_background"
app:layout_constraintBottom_toBottomOf="@+id/ic_article_filled"
app:layout_constraintEnd_toEndOf="@+id/email_attachment"
app:layout_constraintStart_toStartOf="@+id/email_title"
app:layout_constraintTop_toBottomOf="@+id/email_body" />
<ImageView
android:id="@+id/ic_article_filled"
android:contentDescription="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/ic_article_filled_24dp"
android:padding="6dp"
app:layout_constraintStart_toStartOf="@+id/email_title"
app:layout_constraintTop_toBottomOf="@+id/email_body" />
<TextView
android:id="@+id/email_attachment"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:paddingRight="8dp"
android:textColor="?androidprv:attr/materialColorOnTertiaryContainer"
android:textSize="12sp"
app:layout_constraintStart_toEndOf="@+id/ic_article_filled"
app:layout_constraintTop_toTopOf="@+id/attachment_background"
app:layout_constraintBottom_toBottomOf="@+id/attachment_background"
android:text="@string/color_contrast_preview_email_attachment_name" />
<ImageView
android:id="@+id/ic_edit"
android:contentDescription="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="48dp"
android:padding="27dp"
android:src="@drawable/ic_edit_24dp"
android:background="@drawable/color_contrast_preview_icon_edit_background"
app:layout_constraintEnd_toEndOf="@+id/email_background"
app:layout_constraintTop_toBottomOf="@+id/ic_star" />
<View
android:id="@+id/bottom_appbar_background"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="@drawable/color_contrast_preview_bottom_appbar_background"
app:layout_constraintBottom_toBottomOf="@+id/ic_inbox"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/ic_inbox" />
<ImageView
android:contentDescription="@null"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:src="@drawable/color_contrast_preview_icon_inbox_background"
app:layout_constraintBottom_toBottomOf="@+id/ic_inbox"
app:layout_constraintEnd_toEndOf="@+id/ic_inbox"
app:layout_constraintStart_toStartOf="@+id/ic_inbox"
app:layout_constraintTop_toTopOf="@+id/ic_inbox" />
<ImageView
android:id="@+id/ic_inbox"
android:contentDescription="@null"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="42dp"
android:padding="24dp"
android:src="@drawable/ic_inbox_24dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@+id/ic_article"
app:layout_constraintTop_toBottomOf="@+id/ic_article_filled" />
<ImageView
android:id="@+id/ic_article"
android:contentDescription="@null"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="24dp"
android:src="@drawable/ic_article_24dp"
app:layout_constraintStart_toEndOf="@+id/ic_inbox"
app:layout_constraintEnd_toStartOf="@+id/ic_chat_bubble"
app:layout_constraintTop_toTopOf="@id/ic_inbox"
app:layout_constraintBottom_toBottomOf="@id/ic_inbox" />
<ImageView
android:id="@+id/ic_chat_bubble"
android:contentDescription="@null"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="24dp"
android:src="@drawable/ic_chat_bubble_24dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/ic_article"
app:layout_constraintTop_toTopOf="@id/ic_inbox"
app:layout_constraintBottom_toBottomOf="@id/ic_inbox" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@@ -0,0 +1,147 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2024 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.
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd">
<FrameLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:paddingVertical="@dimen/settingslib_illustration_padding"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingStart="?android:attr/listPreferredItemPaddingStart">
<include layout="@layout/accessibility_color_contrast_preview" />
</FrameLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Space
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<FrameLayout
android:id="@+id/contrast_button_default"
android:layout_width="@dimen/contrast_button_total_size"
android:layout_height="@dimen/contrast_button_total_size"
android:background="@drawable/accessibility_contrast_button_background">
<ImageView
android:layout_gravity="center"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:contentDescription="@string/contrast_default"
android:src="@drawable/ic_contrast_standard"/>
</FrameLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/contrast_button_text_spacing"
android:gravity="center_horizontal|top"
android:textSize="@dimen/contrast_button_text_size"
android:text="@string/contrast_default"
android:textColor="?androidprv:attr/materialColorOnSurface"/>
</LinearLayout>
<Space
android:layout_width="@dimen/contrast_button_horizontal_spacing"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<FrameLayout
android:id="@+id/contrast_button_medium"
android:layout_width="@dimen/contrast_button_total_size"
android:layout_height="@dimen/contrast_button_total_size"
android:background="@drawable/accessibility_contrast_button_background">
<ImageView
android:layout_gravity="center"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:contentDescription="@string/contrast_medium"
android:src="@drawable/ic_contrast_medium"/>
</FrameLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/contrast_button_text_spacing"
android:gravity="center_horizontal|top"
android:textSize="@dimen/contrast_button_text_size"
android:text="@string/contrast_medium"
android:textColor="?androidprv:attr/materialColorOnSurface"/>
</LinearLayout>
<Space
android:layout_width="@dimen/contrast_button_horizontal_spacing"
android:layout_height="match_parent" />
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical">
<FrameLayout
android:id="@+id/contrast_button_high"
android:layout_width="@dimen/contrast_button_total_size"
android:layout_height="@dimen/contrast_button_total_size"
android:background="@drawable/accessibility_contrast_button_background">
<ImageView
android:layout_gravity="center"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:contentDescription="@string/contrast_high"
android:src="@drawable/ic_contrast_high"/>
</FrameLayout>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="@dimen/contrast_button_text_spacing"
android:gravity="center_horizontal|top"
android:textSize="@dimen/contrast_button_text_size"
android:text="@string/contrast_high"
android:textColor="?androidprv:attr/materialColorOnSurface"/>
</LinearLayout>
<Space
android:layout_width="0dp"
android:layout_height="match_parent"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>

View File

@@ -0,0 +1,95 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2024 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.
-->
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:minHeight="?android:attr/listPreferredItemHeight"
android:paddingEnd="?android:attr/listPreferredItemPaddingEnd"
android:paddingStart="?android:attr/listPreferredItemPaddingStart"
android:paddingVertical="@dimen/settingslib_switchbar_margin"
android:background="@android:color/transparent">
<LinearLayout
android:id="@+id/background"
android:layout_height="wrap_content"
android:layout_width="match_parent"
android:paddingStart="@dimen/settingslib_switchbar_padding_left"
android:paddingEnd="@dimen/settingslib_switchbar_padding_right"
android:orientation="horizontal"
android:gravity="start|center_vertical"
android:baselineAligned="false">
<FrameLayout
android:id="@+id/icon_frame"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="15dip"
android:layout_marginRight="15dip">
<androidx.preference.internal.PreferenceImageView
android:id="@android:id/icon"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:maxWidth="48dp"
app:maxHeight="48dp" />
</FrameLayout>
<RelativeLayout
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginEnd="6dip"
android:layout_marginRight="6dip"
android:layout_marginTop="@dimen/settingslib_switch_title_margin"
android:layout_marginBottom="@dimen/settingslib_switch_title_margin"
android:layout_weight="1">
<TextView android:id="@android:id/title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:singleLine="true"
android:textAppearance="?android:attr/textAppearanceListItem"
android:textColor="?android:attr/textColorPrimary"
android:ellipsize="marquee"
android:fadingEdge="horizontal"
android:hyphenationFrequency="normalFast"
android:lineBreakWordStyle="phrase" />
<TextView android:id="@android:id/summary"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@android:id/title"
android:layout_alignStart="@android:id/title"
android:layout_alignLeft="@android:id/title"
android:textAppearance="?android:attr/textAppearanceSmall"
android:textColor="?android:attr/textColorSecondary"
android:hyphenationFrequency="normalFast"
android:lineBreakWordStyle="phrase"
android:maxLines="4"
android:scrollbars="none"/>
</RelativeLayout>
<!-- Preference should place its actual preference widget here. -->
<LinearLayout android:id="@android:id/widget_frame"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:gravity="center_vertical"
android:orientation="vertical" />
</LinearLayout>
</FrameLayout>

View File

@@ -0,0 +1,25 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
Copyright (C) 2024 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.
-->
<ImageView
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center_vertical"
android:contentDescription="@null"
android:scaleType="center"
android:src="@drawable/ic_arrow_forward" />

View File

@@ -25,13 +25,13 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<ImageView
android:id="@+id/setup_advance_image"
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottie_animation"
style="@style/SudContentIllustration"
android:layout_width="match_parent"
android:layout_height="0dp"
android:layout_weight="1"
android:contentDescription="@null"
android:src="@null"/>
app:lottie_rawRes="@null"/>
<TextView
android:id="@+id/createMessage"

View File

@@ -33,14 +33,16 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:id="@+id/setup_education_image"
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottie_animation"
style="@style/SudContentIllustration"
android:layout_width="match_parent"
android:layout_marginLeft="24dp"
android:layout_marginRight="24dp"
android:layout_height="wrap_content"
android:src="@drawable/private_space_illustration"/>
android:layout_height="match_parent"
app:lottie_autoPlay="true"
app:lottie_loop="true"
app:lottie_rawRes="@raw/private_space_illustration"/>
<TextView
style="@style/PrivateSpaceSetupSubHeaderStyle"
android:text="@string/private_space_setup_sub_header"/>

View File

@@ -0,0 +1,111 @@
<!--
~ Copyright (C) 2024 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.
-->
<com.google.android.setupdesign.GlifLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/ps_account_intro_screen"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:filterTouchesWhenObscured="true">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical">
<ImageView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="24dp"
android:layout_marginRight="24dp"
android:contentDescription="@null"
android:src="@drawable/ic_security_privacy_alert_primary"/>
<TextView
style="@style/PrivateSpaceSetupTextFontStyle"
android:fontFamily="google-sans"
android:text="@string/private_space_gaia_education_title"
android:layout_margin="24dp"
android:layout_marginTop="40dp"
android:gravity="center"
android:textSize="28sp"/>
<TextView
style="@style/PrivateSpaceSetupTextFontStyle"
android:layout_marginLeft="24dp"
android:layout_marginRight="24dp"
android:layout_marginBottom="40dp"
android:textSize="14sp"
android:text="@string/private_space_gaia_education_description"/>
<TextView
style="@style/PrivateSpaceSetupTextFontStyle"
android:layout_marginLeft="24dp"
android:layout_marginRight="24dp"
android:layout_marginBottom="16dp"
android:textSize="14sp"
android:text="@string/private_space_gaia_education_header"/>
<RelativeLayout
style="@style/PrivateSpaceSetupBulletPointLayoutStyle"
android:paddingTop="8dp"
android:paddingBottom="8dp">
<ImageView
android:id="@+id/point1"
style="@style/PrivateSpaceBulletPointIconStyle"
android:contentDescription="@null"
android:src="@drawable/ic_text_dot" />
<TextView
style="@style/PrivateSpaceBulletPointTextFontStyle"
android:layout_toRightOf="@+id/point1"
android:textSize="14sp"
android:text="@string/private_space_gaia_education_bullet1"/>
</RelativeLayout>
<RelativeLayout
style="@style/PrivateSpaceSetupBulletPointLayoutStyle">
<ImageView
android:id="@+id/point2"
style="@style/PrivateSpaceBulletPointIconStyle"
android:contentDescription="@null"
android:src="@drawable/ic_text_dot" />
<TextView
style="@style/PrivateSpaceBulletPointTextFontStyle"
android:layout_toRightOf="@+id/point2"
android:textSize="14sp"
android:text="@string/private_space_gaia_education_bullet2"/>
</RelativeLayout>
<RelativeLayout
style="@style/PrivateSpaceSetupBulletPointLayoutStyle">
<ImageView
android:id="@+id/point3"
style="@style/PrivateSpaceBulletPointIconStyle"
android:contentDescription="@null"
android:src="@drawable/ic_text_dot" />
<TextView
style="@style/PrivateSpaceBulletPointTextFontStyle"
android:layout_toRightOf="@+id/point3"
android:textSize="14sp"
android:text="@string/private_space_gaia_education_bullet3"/>
</RelativeLayout>
<RelativeLayout
style="@style/PrivateSpaceSetupBulletPointLayoutStyle">
<ImageView
android:id="@+id/point4"
style="@style/PrivateSpaceBulletPointIconStyle"
android:contentDescription="@null"
android:src="@drawable/ic_text_dot" />
<TextView
style="@style/PrivateSpaceBulletPointTextFontStyle"
android:layout_toRightOf="@+id/point4"
android:textSize="14sp"
android:text="@string/private_space_gaia_education_bullet4"/>
</RelativeLayout>
</LinearLayout>
</com.google.android.setupdesign.GlifLayout>

View File

@@ -31,13 +31,14 @@
android:maxWidth="@dimen/animation_max_size"
android:maxHeight="@dimen/animation_max_size">
<ImageView
android:id="@+id/privatespace_lock_image"
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottie_animation"
style="@style/SudContentIllustration"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:scaleType="fitCenter"
android:contentDescription="@null"
android:src="@drawable/private_space_choose_lock_illustration"/>
app:lottie_autoPlay="true"
app:lottie_loop="true"
app:lottie_rawRes="@raw/private_space_use_screen_lock_illustration"/>
</com.google.android.setupdesign.view.FillContentLayout>
</com.google.android.setupdesign.GlifLayout>

View File

@@ -24,13 +24,21 @@
app:sucHeaderText="@string/private_space_success_title"
app:sudDescriptionText="@string/private_space_access_text"
android:icon="@drawable/ic_privatespace_done">
<ImageView
android:id="@+id/privatespace_success_image"
<com.google.android.setupdesign.view.FillContentLayout
style="@style/SudContentFrame"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_marginLeft="24dp"
android:layout_marginRight="24dp"
android:src="@drawable/private_space_illustration"/>
android:maxWidth="@dimen/animation_max_size"
android:maxHeight="@dimen/animation_max_size">
<com.airbnb.lottie.LottieAnimationView
android:id="@+id/lottie_animation"
style="@style/SudContentIllustration"
android:layout_width="match_parent"
android:layout_height="match_parent"
app:lottie_autoPlay="true"
app:lottie_loop="true"
app:lottie_rawRes="@raw/private_space_illustration"/>
</com.google.android.setupdesign.view.FillContentLayout>
</com.google.android.setupdesign.GlifLayout>

View File

@@ -35,6 +35,9 @@
<action
android:id="@+id/action_set_lock_fragment"
app:destination="@id/ps_profile_lock_fragment"/>
<action
android:id="@+id/action_account_intro_fragment"
app:destination="@id/ps_account_intro_fragment"/>
</fragment>
<fragment android:id="@+id/ps_profile_error_fragment"
android:name="com.android.settings.privatespace.PrivateProfileCreationError"
@@ -51,14 +54,24 @@
android:label="fragment_account_error">
<action
android:id="@+id/action_advance_login_error"
app:destination="@id/ps_account_error_fragment"/>
app:destination="@id/ps_account_intro_fragment"/>
<action
android:id="@+id/action_success_fragment"
app:destination="@id/ps_profile_success_fragment"/>
android:id="@+id/action_skip_account_login"
app:destination="@id/ps_profile_lock_fragment"/>
</fragment>
<fragment android:id="@+id/ps_profile_lock_fragment"
android:name="com.android.settings.privatespace.PrivateSpaceSetLockFragment"
android:label="fragment_ps_lock">
<action
android:id="@+id/action_lock_success_fragment"
app:destination="@id/ps_profile_success_fragment"/>
</fragment>
<fragment android:id="@+id/ps_account_intro_fragment"
android:name="com.android.settings.privatespace.PrivateSpaceGaiaEducationFragment"
android:label="fragment_ps_account_intro">
<action
android:id="@+id/action_account_lock_fragment"
app:destination="@id/ps_profile_lock_fragment"/>
<action
android:id="@+id/action_advance_login_error"
app:destination="@id/ps_account_error_fragment"/>

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -198,4 +198,9 @@
<attr name="notification_importance_button_background_color_selected" format="color" />
<attr name="notification_importance_button_border_color_selected" format="color" />
<attr name="notification_importance_button_foreground_color_selected" format="color" />
<!-- For BackgroundPreference -->
<declare-styleable name="BackgroundPreference">
<attr name="background" format="reference" />
</declare-styleable>
</resources>

View File

@@ -477,4 +477,13 @@
<!-- Credential Manager settings dimensions -->
<dimen name="credman_primary_provider_pref_left_padding">80dp</dimen>
<dimen name="credman_primary_provider_pref_left_padding_compact">24dp</dimen>
<!-- Color contrast screen -->
<dimen name="contrast_button_total_size">90dp</dimen>
<dimen name="contrast_button_inner_size">82dp</dimen>
<dimen name="contrast_button_radius">20dp</dimen>
<dimen name="contrast_button_stroke_width">2dp</dimen>
<dimen name="contrast_button_text_size">14sp</dimen>
<dimen name="contrast_button_text_spacing">4dp</dimen>
<dimen name="contrast_button_horizontal_spacing">16dp</dimen>
</resources>

View File

@@ -152,10 +152,10 @@
<string name="bluetooth_pair_other_ear_dialog_left_ear_positive_button">Pair left ear</string>
<!-- Title for all hearing devices related controls section. [CHAR LIMIT=60] -->
<string name="bluetooth_device_controls_general">For all available hearing devices</string>
<!-- Connected devices settings. Title of the preference to show the entrance of the hearing device controls related page. [CHAR LIMIT=65] -->
<string name="bluetooth_device_controls_title">Hearing device settings</string>
<!-- Connected devices settings. Title of the preference to show the entrance of the hearing device controls related page. [CHAR LIMIT=65] -->
<string name="bluetooth_device_controls_summary">Shortcut, hearing aid compatibility</string>
<!-- Connected devices settings. Title of the preference to show the entrance of the hearing device settings related page. [CHAR LIMIT=65] -->
<string name="bluetooth_device_controls_title">More hearing device settings</string>
<!-- Connected devices settings. Summary of the preference to show the item in the hearing device settings related page. [CHAR LIMIT=120] -->
<string name="bluetooth_device_controls_summary">Change cross-device settings like shortcut, and telecoil controls</string>
<!-- Title for this device specific controls section. [CHAR LIMIT=30] -->
<string name="bluetooth_device_controls_specific">For this device</string>
<!-- Connected devices settings. Title of the preference to show the entrance of the audio output page. It can change different types of audio are played on phone or other bluetooth devices. [CHAR LIMIT=35] -->
@@ -1318,7 +1318,7 @@
<!-- Title for private space setup in auto advancing screen informing to explore private space settings for hide and auto lock. [CHAR LIMIT=NONE] -->
<string name="private_space_explore_settings_title">Explore private space settings to hide private space and set up automatic locking</string>
<!-- Title for private space setup in auto advancing screen informing some system apps are already installed in private space. [CHAR LIMIT=NONE] -->
<string name="private_space_apps_installed_title">Some apps are already installed in your private space</string>
<string name="private_space_apps_installed_title">Required apps are already installed in your private space</string>
<!-- Title for private space creation error screen. [CHAR LIMIT=60] -->
<string name="private_space_error_screen_title">Couldn\u2019t set up a private space</string>
<!-- Label for button to retry creating private space again on creation error. [CHAR LIMIT=30] -->
@@ -1363,6 +1363,22 @@
<string name="private_space_notifications_title">Sensitive notifications on lock screen</string>
<!-- Summary description for private space sensitive notifications toggle [CHAR LIMIT=200] -->
<string name="private_space_sensitive_notifications_description">Show sensitive content when private space is unlocked</string>
<!-- Title for private space GAIA education screen [CHAR LIMIT=90] -->
<string name="private_space_gaia_education_title">Create a Google Account to help keep your data private</string>
<!-- Description for private space GAIA education screen [CHAR LIMIT=120] -->
<string name="private_space_gaia_education_description">On the next screen you can sign in to an account to use with your private space</string>
<!-- Sub header for private space GAIA education screen [CHAR LIMIT=120] -->
<string name="private_space_gaia_education_header"><b>Create a dedicated account to help stop data appearing outside private space, such as:</b></string>
<!-- Text for private space GAIA education screen [CHAR LIMIT=90] -->
<string name="private_space_gaia_education_bullet1">Synced photos, files, emails, contacts, calendar events, and other data</string>
<!-- Text for private space GAIA education screen [CHAR LIMIT=60] -->
<string name="private_space_gaia_education_bullet2">App download history and recommendations</string>
<!-- Text for private space GAIA education screen [CHAR LIMIT=60] -->
<string name="private_space_gaia_education_bullet3">Browsing history, bookmarks, and saved passwords</string>
<!-- Text for private space GAIA education screen [CHAR LIMIT=90] -->
<string name="private_space_gaia_education_bullet4">Suggested content related to your activity in private space apps</string>
<!-- Text for button in private space GAIA education screen to start login [CHAR LIMIT=20] -->
<string name="private_space_gaia_education_got_it">Got it</string>
<!-- Text shown when "Add fingerprint" button is disabled -->
<string name="fingerprint_add_max">You can add up to <xliff:g id="count" example="5">%d</xliff:g> fingerprints</string>
@@ -4608,6 +4624,28 @@
<string name="display_category_title">Display</string>
<!-- Title for the accessibility color and motion page. [CHAR LIMIT=50] -->
<string name="accessibility_color_and_motion_title">Color and motion</string>
<!-- Title for the accessibility color contrast page. [CHAR LIMIT=50] -->
<string name="accessibility_color_contrast_title">Color contrast</string>
<!-- Intro for the accessibility color contrast page. [CHAR LIMIT=NONE] -->
<string name="accessibility_color_contrast_intro">Higher contrast makes text, buttons, and icons stand out more. Choose the contrast that looks best to you.</string>
<!-- Notes in color contrast page footer for something should be aware. [CHAR LIMIT=NONE] -->
<string name="color_contrast_note">Some apps may not support all color and text contrast settings</string>
<!-- Summary for the accessibility color setting. [CHAR LIMIT=NONE] -->
<string name="accessibility_color_contrast_summary">Adjust how colors and text look against your screen\'s background color</string>
<!-- Preview screen title on the color contrast page. [CHAR LIMIT=20] -->
<string name="color_contrast_preview">Preview</string>
<!-- Preview screen email sender's name on the color contrast page. [CHAR LIMIT=15] -->
<string name="color_contrast_preview_sender_name">Helen, Adam</string>
<!-- Preview screen email sent date on the color contrast page. [CHAR LIMIT=15] -->
<string name="color_contrast_preview_email_send_date">2 days ago</string>
<!-- Preview screen email badge on the contrast page. [CHAR LIMIT=15] -->
<string name="color_contrast_preview_email_badge">Follow up?</string>
<!-- Preview screen email title on the contrast page. [CHAR LIMIT=30] -->
<string name="color_contrast_preview_email_title">Business trip report</string>
<!-- Preview screen email body on the contrast page. [CHAR LIMIT=NONE] -->
<string name="color_contrast_preview_email_body">For further assistance, please reach out to \nmyself or Helen. This report will be</string>
<!-- Preview screen email attachment name on the contrast page. [CHAR LIMIT=30] -->
<string name="color_contrast_preview_email_attachment_name">Client Expenses</string>
<!-- Title for the accessibility text options page. [CHAR LIMIT=50] -->
<string name="accessibility_turn_screen_darker_title">Turn screen darker</string>
<!-- Title for the accessibility preference category of interaction control services and settings. [CHAR LIMIT=50] -->
@@ -4909,6 +4947,10 @@
<string name="accessibility_toggle_high_text_contrast_preference_title">High contrast text</string>
<!-- Summary for the accessibility preference to high contrast text. [CHAR LIMIT=NONE] -->
<string name="accessibility_toggle_high_text_contrast_preference_summary">Change text color to black or white. Maximizes contrast with the background.</string>
<!-- Title for the accessibility preference to high contrast text. [CHAR LIMIT=35] -->
<string name="accessibility_toggle_maximize_text_contrast_preference_title">Maximize text contrast</string>
<!-- Summary for the accessibility preference to high contrast text. [CHAR LIMIT=NONE] -->
<string name="accessibility_toggle_maximize_text_contrast_preference_summary">Change text color to black or white to increase contrast with the background.</string>
<!-- Title for the accessibility preference to auto update screen magnification. [CHAR LIMIT=35] -->
<string name="accessibility_toggle_screen_magnification_auto_update_preference_title">Auto
update screen magnification</string>
@@ -11467,8 +11509,6 @@
<!-- Mobile network settings screen, message asking the user to check their pricing with their Carrier, when enabling Data roaming. [CHAR LIMIT=NONE] -->
<string name="roaming_check_price_warning">Check with your network provider for pricing.</string>
<!-- Title for mobile data preference, to display the mobile data usage for each app. [CHAR LIMIT=NONE]-->
<string name="mobile_data_usage_title">App data usage</string>
<!-- Summary to show the current network mode is invalid. [CHAR LIMIT=NONE]-->
<string name="mobile_network_mode_error">Invalid Network Mode <xliff:g id="networkModeId" example="0">%1$d</xliff:g>. Ignore.</string>
<!-- Title for _satellite_setting_preference_layout in mobile network settings [CHAR LIMIT=60] -->
@@ -12872,6 +12912,8 @@
<string name="contrast_title">Contrast</string>
<!-- 'Standard' contrast option [CHAR LIMIT=20] -->
<string name="contrast_standard">Standard</string>
<!-- 'Default' contrast option [CHAR LIMIT=20] -->
<string name="contrast_default">Default</string>
<!-- 'Medium' contrast option [CHAR LIMIT=20] -->
<string name="contrast_medium">Medium</string>
<!-- 'High' contrast option [CHAR LIMIT=20] -->

View File

@@ -21,6 +21,16 @@
android:persistent="false"
android:title="@string/accessibility_color_and_motion_title">
<Preference
android:fragment="com.android.settings.accessibility.ColorContrastFragment"
android:key="color_contrast"
android:icon="@drawable/ic_color_contrast"
android:persistent="false"
android:title="@string/accessibility_color_contrast_title"
android:summary="@string/accessibility_color_contrast_summary"
settings:controller="com.android.settings.accessibility.ContrastPreferenceController"
settings:searchable="true"/>
<Preference
android:fragment="com.android.settings.accessibility.ToggleDaltonizerPreferenceFragment"
android:icon="@drawable/ic_daltonizer"

View File

@@ -0,0 +1,46 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2024 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.
-->
<PreferenceScreen
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:settings="http://schemas.android.com/apk/res-auto"
android:persistent="false"
android:title="@string/accessibility_color_contrast_title">
<com.android.settingslib.widget.TopIntroPreference
android:title="@string/accessibility_color_contrast_intro" />
<com.android.settingslib.widget.LayoutPreference
android:key="color_contrast_selector"
android:selectable="false"
android:layout="@layout/accessibility_color_contrast_selector"
settings:controller="com.android.settings.accessibility.ContrastSelectorPreferenceController"/>
<SwitchPreferenceCompat
android:key="toggle_high_text_contrast_preference"
android:persistent="false"
android:summary="@string/accessibility_toggle_maximize_text_contrast_preference_summary"
android:title="@string/accessibility_toggle_maximize_text_contrast_preference_title"
settings:controller=
"com.android.settings.accessibility.HighTextContrastPreferenceController" />
<com.android.settings.accessibility.AccessibilityFooterPreference
android:title="@string/color_contrast_note"
android:selectable="false"
settings:searchable="false"/>
</PreferenceScreen>

View File

@@ -57,9 +57,7 @@
android:key="toggle_high_text_contrast_preference"
android:persistent="false"
android:summary="@string/accessibility_toggle_high_text_contrast_preference_summary"
android:title="@string/accessibility_toggle_high_text_contrast_preference_title"
settings:controller=
"com.android.settings.accessibility.HighTextContrastPreferenceController" />
android:title="@string/accessibility_toggle_high_text_contrast_preference_title" />
<com.android.settings.accessibility.TextReadingResetPreference
android:key="reset"

View File

@@ -95,7 +95,7 @@
<Preference
android:key="data_usage_summary"
android:title="@string/mobile_data_usage_title"
android:title="@string/app_cellular_data_usage"
settings:controller="com.android.settings.network.telephony.DataUsagePreferenceController"/>
<com.android.settings.datausage.BillingCyclePreference

View File

@@ -21,7 +21,7 @@
<com.android.settingslib.widget.IllustrationPreference
android:key="privatespace_hide_video"
settings:searchable="false"
settings:lottie_rawRes="@drawable/privatespace_placeholder_image"/>
settings:lottie_rawRes="@raw/private_space_hide_when_locked_illustration"/>
<com.android.settingslib.widget.MainSwitchPreference
android:key="hide_when_locked"

View File

@@ -25,7 +25,7 @@
<com.android.settingslib.widget.IllustrationPreference
android:key="private_space_settings"
settings:searchable="false"
settings:lottie_rawRes="@drawable/private_space_illustration"/>
settings:lottie_rawRes="@raw/private_space_illustration"/>
<Preference
android:key="private_space_description"

View File

@@ -117,6 +117,8 @@ public class Settings extends SettingsActivity {
public static class TextReadingSettingsActivity extends SettingsActivity { /* empty */ }
/** Activity for text color and motion settings. */
public static class ColorAndMotionActivity extends SettingsActivity { /* empty */ }
/** Activity for color contrast settings. */
public static class ColorContrastActivity extends SettingsActivity { /* empty */ }
/** Activity for the security dashboard. */
public static class SecurityDashboardActivity extends SettingsActivity {

View File

@@ -38,7 +38,6 @@ import android.os.AsyncTask;
import android.os.Bundle;
import android.os.UserHandle;
import android.os.UserManager;
import android.permission.flags.Flags;
import android.text.TextUtils;
import android.util.Log;
import android.view.View;
@@ -829,29 +828,12 @@ public class SettingsActivity extends SettingsBaseActivity
if (ai == null || ai.metaData == null) return;
mFragmentClass = ai.metaData.getString(META_DATA_KEY_FRAGMENT_CLASS);
mHighlightMenuKey = ai.metaData.getString(META_DATA_KEY_HIGHLIGHT_MENU_KEY);
/* TODO(b/327036144) Once the Flags.walletRoleEnabled() is rolled out, we will replace
value for the fragment class within the com.android.settings.nfc.PaymentSettings
activity with com.android.settings.connecteddevice.NfcAndPaymentFragment so that this
code can be removed.
*/
if (shouldOverrideContactlessPaymentRouting()) {
overrideContactlessPaymentRouting();
}
} catch (NameNotFoundException nnfe) {
// No recovery
Log.d(LOG_TAG, "Cannot get Metadata for: " + getComponentName().toString());
}
}
private boolean shouldOverrideContactlessPaymentRouting() {
return Flags.walletRoleEnabled()
&& mFragmentClass.equals("com.android.settings.nfc.PaymentSettings");
}
private void overrideContactlessPaymentRouting() {
mFragmentClass = "com.android.settings.connecteddevice.NfcAndPaymentFragment";
}
// give subclasses access to the Next button
public boolean hasNextButton() {
return mNextButton != null;

View File

@@ -22,17 +22,25 @@ import android.util.AttributeSet;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.res.TypedArrayUtils;
import androidx.preference.Preference;
import com.android.settings.R;
/**
* A settings preference with colored rounded rectangle background and an arrow icon on the right
* A settings preference with colored rounded rectangle background and an arrow icon on the right.
*/
public class ArrowPreference extends Preference {
public class ArrowPreference extends BackgroundPreference {
public ArrowPreference(@NonNull Context context) {
this(context, null);
public ArrowPreference(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
setBackground(
com.android.settingslib.widget.mainswitch.R.drawable.settingslib_switch_bar_bg_on);
setWidgetLayoutResource(R.layout.preference_widget_arrow);
}
public ArrowPreference(@NonNull Context context, @Nullable AttributeSet attrs,
int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public ArrowPreference(@NonNull Context context, @Nullable AttributeSet attrs) {
@@ -41,18 +49,7 @@ public class ArrowPreference extends Preference {
android.R.attr.preferenceStyle));
}
public ArrowPreference(@NonNull Context context, @Nullable AttributeSet attrs,
int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public ArrowPreference(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
init();
}
private void init() {
setLayoutResource(R.layout.arrow_preference);
public ArrowPreference(@NonNull Context context) {
this(context, null);
}
}

View File

@@ -0,0 +1,93 @@
/*
* Copyright (C) 2024 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.accessibility;
import android.content.Context;
import android.content.res.TypedArray;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.widget.LinearLayout;
import androidx.annotation.DrawableRes;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.core.content.res.TypedArrayUtils;
import androidx.preference.Preference;
import androidx.preference.PreferenceViewHolder;
import com.android.settings.R;
/**
* A preference with custom background.
*/
public class BackgroundPreference extends Preference {
private int mBackgroundId;
public BackgroundPreference(@NonNull Context context,
@Nullable AttributeSet attrs, int defStyleAttr,
int defStyleRes) {
super(context, attrs, defStyleAttr, defStyleRes);
setLayoutResource(R.layout.preference_background);
setIconSpaceReserved(false);
final TypedArray styledAttrs = context.obtainStyledAttributes(attrs,
R.styleable.BackgroundPreference);
mBackgroundId = styledAttrs.getResourceId(R.styleable.BackgroundPreference_background, 0);
styledAttrs.recycle();
}
public BackgroundPreference(@NonNull Context context, @Nullable AttributeSet attrs,
int defStyleAttr) {
this(context, attrs, defStyleAttr, 0);
}
public BackgroundPreference(@NonNull Context context, @Nullable AttributeSet attrs) {
this(context, attrs, TypedArrayUtils.getAttr(context,
androidx.preference.R.attr.preferenceStyle,
com.android.internal.R.attr.preferenceStyle), 0);
}
public BackgroundPreference(@NonNull Context context) {
this(context, null, TypedArrayUtils.getAttr(context,
androidx.preference.R.attr.preferenceStyle,
com.android.internal.R.attr.preferenceStyle), 0);
}
@Override
public void onBindViewHolder(@NonNull PreferenceViewHolder holder) {
super.onBindViewHolder(holder);
final LinearLayout layout = (LinearLayout) holder.findViewById(R.id.background);
if (mBackgroundId != 0) {
final Drawable backgroundDrawable = getContext().getDrawable(mBackgroundId);
layout.setBackground(backgroundDrawable);
}
}
/**
* Sets the background to a given resource. The resource should refer to a Drawable object.
*
* @param resId The identifier of the resource.
*/
public void setBackground(@DrawableRes int resId) {
if (mBackgroundId != resId) {
mBackgroundId = resId;
notifyChanged();
}
}
}

View File

@@ -0,0 +1,49 @@
/*
* Copyright (C) 2024 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.accessibility;
import com.android.settings.R;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settingslib.search.SearchIndexable;
/** Accessibility settings for color contrast. */
@SearchIndexable(forTarget = SearchIndexable.ALL & ~SearchIndexable.ARC)
public class ColorContrastFragment extends DashboardFragment {
private static final String TAG = "ColorContrastFragment";
@Override
protected int getPreferenceScreenResId() {
return R.xml.accessibility_color_contrast;
}
@Override
protected String getLogTag() {
return TAG;
}
@Override
public int getMetricsCategory() {
// TODO(b/326539398): Add metrics tracking for color contrast.
return 0;
}
public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
new BaseSearchIndexProvider(R.xml.accessibility_color_contrast);
}

View File

@@ -0,0 +1,38 @@
/*
* Copyright (C) 2024 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.accessibility;
import android.content.Context;
import androidx.annotation.NonNull;
import com.android.settings.core.BasePreferenceController;
/**
* Controller for {@link ColorContrastFragment}.
*/
public class ContrastPreferenceController extends BasePreferenceController {
public ContrastPreferenceController(@NonNull Context context, @NonNull String preferenceKey) {
super(context, preferenceKey);
}
@Override
public int getAvailabilityStatus() {
return Flags.enableColorContrastControl() ? AVAILABLE : UNSUPPORTED_ON_DEVICE;
}
}

View File

@@ -0,0 +1,122 @@
/*
* Copyright (C) 2024 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.accessibility;
import static android.app.UiModeManager.ContrastUtils.CONTRAST_LEVEL_HIGH;
import static android.app.UiModeManager.ContrastUtils.CONTRAST_LEVEL_MEDIUM;
import static android.app.UiModeManager.ContrastUtils.CONTRAST_LEVEL_STANDARD;
import static android.app.UiModeManager.ContrastUtils.fromContrastLevel;
import static android.app.UiModeManager.ContrastUtils.toContrastLevel;
import android.app.UiModeManager;
import android.content.Context;
import android.provider.Settings;
import android.view.View;
import android.widget.FrameLayout;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.core.lifecycle.LifecycleObserver;
import com.android.settingslib.core.lifecycle.events.OnStart;
import com.android.settingslib.core.lifecycle.events.OnStop;
import com.android.settingslib.widget.LayoutPreference;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.Executor;
/**
* Controller for contrast selector.
*/
public class ContrastSelectorPreferenceController extends BasePreferenceController
implements LifecycleObserver, OnStart, OnStop, UiModeManager.ContrastChangeListener {
private static final String KEY_COLOR_CONTRAST_SELECTOR = "color_contrast_selector";
private final Executor mMainExecutor;
private final UiModeManager mUiModeManager;
private Map<Integer, FrameLayout> mContrastButtons = new HashMap<>();
public ContrastSelectorPreferenceController(@NonNull Context context,
@NonNull String preferenceKey) {
super(context, preferenceKey);
mMainExecutor = mContext.getMainExecutor();
mUiModeManager = mContext.getSystemService(UiModeManager.class);
}
@Override
public void displayPreference(@NonNull PreferenceScreen screen) {
super.displayPreference(screen);
final LayoutPreference mLayoutPreference =
screen.findPreference(KEY_COLOR_CONTRAST_SELECTOR);
mContrastButtons = Map.ofEntries(
Map.entry(CONTRAST_LEVEL_STANDARD,
mLayoutPreference.findViewById(R.id.contrast_button_default)),
Map.entry(CONTRAST_LEVEL_MEDIUM,
mLayoutPreference.findViewById(R.id.contrast_button_medium)),
Map.entry(CONTRAST_LEVEL_HIGH,
mLayoutPreference.findViewById(R.id.contrast_button_high))
);
mContrastButtons.forEach((contrastLevel, contrastButton) -> {
contrastButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(@Nullable View v) {
Settings.Secure.putFloat(mContext.getContentResolver(),
Settings.Secure.CONTRAST_LEVEL,
fromContrastLevel(contrastLevel));
}
});
});
highlightContrast(toContrastLevel(mUiModeManager.getContrast()));
}
@Override
public int getAvailabilityStatus() {
// The main preferences screen is feature guarded, so this always returns AVAILABLE.
return AVAILABLE;
}
@Override
public void onStart() {
mUiModeManager.addContrastChangeListener(mMainExecutor, this);
}
@Override
public void onStop() {
mUiModeManager.removeContrastChangeListener(this);
}
@Override
public void onContrastChanged(float contrast) {
highlightContrast(toContrastLevel(contrast));
}
private void highlightContrast(int contrast) {
mContrastButtons.forEach((level, button) -> {
button.setSelected(level == contrast);
});
}
}

View File

@@ -117,6 +117,11 @@ public class TextReadingPreferenceFragment extends DashboardFragment {
}
}
}
if (Flags.enableColorContrastControl()) {
// High text contrast toggle will be added inside Color Contrast page on V+.
removePreference(HIGH_TEXT_CONTRAST_KEY);
}
}
@Override
@@ -203,10 +208,12 @@ public class TextReadingPreferenceFragment extends DashboardFragment {
mFontWeightAdjustmentController.setEntryPoint(mEntryPoint);
controllers.add(mFontWeightAdjustmentController);
final HighTextContrastPreferenceController highTextContrastController =
new HighTextContrastPreferenceController(context, HIGH_TEXT_CONTRAST_KEY);
highTextContrastController.setEntryPoint(mEntryPoint);
controllers.add(highTextContrastController);
if (!Flags.enableColorContrastControl()) {
final HighTextContrastPreferenceController highTextContrastController =
new HighTextContrastPreferenceController(context, HIGH_TEXT_CONTRAST_KEY);
highTextContrastController.setEntryPoint(mEntryPoint);
controllers.add(highTextContrastController);
}
final TextReadingResetController resetController =
new TextReadingResetController(context, RESET_KEY,

View File

@@ -26,6 +26,7 @@ import androidx.preference.PreferenceScreen;
import com.android.settings.R;
import com.android.settings.accessibility.AccessibilityHearingAidsFragment;
import com.android.settings.accessibility.ArrowPreference;
import com.android.settings.core.SubSettingLauncher;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -83,7 +84,7 @@ public class BluetoothDetailsHearingDeviceControlsController extends BluetoothDe
}
private Preference createHearingDeviceControlsPreference(Context context) {
final Preference preference = new Preference(context);
final ArrowPreference preference = new ArrowPreference(context);
preference.setKey(KEY_HEARING_DEVICE_CONTROLS);
preference.setTitle(context.getString(R.string.bluetooth_device_controls_title));
preference.setSummary(context.getString(R.string.bluetooth_device_controls_summary));

View File

@@ -24,9 +24,9 @@ import android.util.Log;
import androidx.preference.Preference;
import com.android.settings.connecteddevice.DevicePreferenceCallback;
import com.android.settings.flags.Flags;
import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.flags.Flags;
/**
* Controller to maintain connected bluetooth devices

View File

@@ -34,13 +34,13 @@ import androidx.preference.PreferenceCategory
import androidx.preference.PreferenceGroup
import com.android.settings.R
import com.android.settings.dashboard.RestrictedDashboardFragment
import com.android.settings.flags.Flags
import com.android.settingslib.bluetooth.BluetoothCallback
import com.android.settingslib.bluetooth.BluetoothDeviceFilter
import com.android.settingslib.bluetooth.BluetoothUtils
import com.android.settingslib.bluetooth.CachedBluetoothDevice
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager
import com.android.settingslib.bluetooth.LocalBluetoothManager
import com.android.settingslib.flags.Flags
import java.util.concurrent.ConcurrentHashMap
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers

View File

@@ -25,10 +25,10 @@ import androidx.annotation.VisibleForTesting;
import androidx.preference.Preference;
import com.android.settings.connecteddevice.DevicePreferenceCallback;
import com.android.settings.flags.Flags;
import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
import com.android.settingslib.flags.Flags;
import java.util.ArrayList;
import java.util.List;

View File

@@ -29,6 +29,7 @@ import com.android.settings.accessibility.AccessibilitySettings;
import com.android.settings.accessibility.AccessibilitySettingsForSetupWizard;
import com.android.settings.accessibility.CaptioningPropertiesFragment;
import com.android.settings.accessibility.ColorAndMotionFragment;
import com.android.settings.accessibility.ColorContrastFragment;
import com.android.settings.accessibility.TextReadingPreferenceFragment;
import com.android.settings.accessibility.TextReadingPreferenceFragmentForSetupWizard;
import com.android.settings.accessibility.ToggleColorInversionPreferenceFragment;
@@ -379,6 +380,7 @@ public class SettingsGateway {
TurnScreenOnDetails.class.getName(),
NfcAndPaymentFragment.class.getName(),
ColorAndMotionFragment.class.getName(),
ColorContrastFragment.class.getName(),
LongBackgroundTasksDetails.class.getName(),
RegionalPreferencesEntriesFragment.class.getName(),
BatteryInfoFragment.class.getName(),

View File

@@ -18,10 +18,12 @@ package com.android.settings.datausage.lib
import android.app.usage.NetworkStats
import android.content.Context
import android.content.pm.UserProperties
import android.net.NetworkPolicyManager
import android.net.NetworkTemplate
import android.os.Process
import android.os.UserHandle
import android.os.UserManager
import android.util.SparseArray
import android.util.SparseBooleanArray
import androidx.annotation.VisibleForTesting
@@ -50,7 +52,11 @@ class AppDataUsageRepository(
val items = ArrayList<AppItem>()
val knownItems = SparseArray<AppItem>()
val profiles = context.userManager.userProfiles
bindStats(buckets, profiles, knownItems, items)
val userManager : UserManager = context.getSystemService(Context.USER_SERVICE) as UserManager
val userIdToIsHiddenMap = profiles.associate { profile ->
profile.identifier to shouldSkipProfile(userManager, profile)
}
bindStats(buckets, userIdToIsHiddenMap, knownItems, items)
val restrictedUids = context.getSystemService(NetworkPolicyManager::class.java)!!
.getUidsWithPolicy(NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND)
for (uid in restrictedUids) {
@@ -98,7 +104,7 @@ class AppDataUsageRepository(
private fun bindStats(
buckets: List<Bucket>,
profiles: List<UserHandle>,
userIdToIsHiddenMap: Map<Int, Boolean>,
knownItems: SparseArray<AppItem>,
items: ArrayList<AppItem>,
) {
@@ -108,8 +114,11 @@ class AppDataUsageRepository(
val collapseKey: Int
val category: Int
val userId = UserHandle.getUserId(uid)
if(userIdToIsHiddenMap[userId] == true) {
continue
}
if (UserHandle.isApp(uid) || Process.isSdkSandboxUid(uid)) {
if (profiles.contains(UserHandle(userId))) {
if (userIdToIsHiddenMap.keys.contains(userId)) {
if (userId != currentUserId) {
// Add to a managed user item.
accumulate(
@@ -153,6 +162,16 @@ class AppDataUsageRepository(
}
}
private fun shouldSkipProfile(userManager : UserManager, userHandle: UserHandle): Boolean {
if (android.os.Flags.allowPrivateProfile()
&& android.multiuser.Flags.handleInterleavedSettingsForPrivateSpace()) {
return (userManager.isQuietModeEnabled(userHandle)
&& userManager.getUserProperties(userHandle).showInQuietMode
== UserProperties.SHOW_IN_QUIET_MODE_HIDDEN)
}
return false
}
/**
* Accumulate data usage of a network stats entry for the item mapped by the collapse key.
* Creates the item if needed.

View File

@@ -81,16 +81,12 @@ class DataUsagePreferenceController(context: Context, key: String) :
}
private suspend fun update() {
val summary = withContext(Dispatchers.Default) {
val (summary, enabled) = withContext(Dispatchers.Default) {
networkTemplate = getNetworkTemplate()
getDataUsageSummary()
}
if (summary == null) {
preference.isEnabled = false
} else {
preference.isEnabled = true
preference.summary = summary
getDataUsageSummaryAndEnabled()
}
preference.isEnabled = enabled
preference.summary = summary
}
private fun getNetworkTemplate(): NetworkTemplate? = when {
@@ -105,17 +101,19 @@ class DataUsagePreferenceController(context: Context, key: String) :
fun createNetworkCycleDataRepository(): NetworkCycleDataRepository? =
networkTemplate?.let { NetworkCycleDataRepository(mContext, it) }
private fun getDataUsageSummary(): String? {
val repository = createNetworkCycleDataRepository() ?: return null
private fun getDataUsageSummaryAndEnabled(): Pair<String?, Boolean> {
val repository = createNetworkCycleDataRepository() ?: return null to false
repository.loadFirstCycle()?.let { usageData ->
return mContext.getString(
R.string.data_usage_template,
usageData.formatUsage(mContext),
usageData.formatDateRange(mContext),
)
) to (usageData.usage > 0 || repository.queryUsage(AllTimeRange).usage > 0)
}
return repository.queryUsage(AllTimeRange).takeIf { it.usage > 0 }
?.getDataUsedString(mContext)
val allTimeUsage = repository.queryUsage(AllTimeRange)
if (allTimeUsage.usage > 0) return allTimeUsage.getDataUsedString(mContext) to true
return null to false
}
}

View File

@@ -24,6 +24,9 @@ import android.animation.AnimatorSet;
import android.animation.ObjectAnimator;
import android.animation.ValueAnimator;
import android.app.settings.SettingsEnums;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.Bundle;
import android.os.Handler;
import android.os.Looper;
@@ -32,7 +35,6 @@ import android.util.Pair;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageView;
import androidx.activity.OnBackPressedCallback;
import androidx.annotation.Nullable;
@@ -41,6 +43,7 @@ import androidx.navigation.fragment.NavHostFragment;
import com.android.settings.R;
import com.android.settings.core.InstrumentedFragment;
import com.airbnb.lottie.LottieAnimationView;
import com.google.android.setupdesign.GlifLayout;
import com.google.common.collect.ImmutableList;
@@ -58,21 +61,21 @@ public class AutoAdvanceSetupFragment extends InstrumentedFragment {
private GlifLayout mRootView;
private Handler mHandler;
private int mScreenTitleIndex;
private static final List<Pair<Integer, Integer>> HEADER_IMAGE_PAIRS =
private static final List<Pair<Integer, Integer>> HEADER_ILLUSTRATION_PAIRS =
ImmutableList.of(
new Pair(R.string.private_space_notifications_hidden_title,
R.drawable.private_space_setup_notification_illustration),
R.raw.private_space_notifications_illustration),
new Pair(R.string.private_space_apps_installed_title,
R.drawable.private_space_setup_preinstalled_illustration),
R.raw.private_space_unlock_to_share_illustration),
new Pair(R.string.private_space_explore_settings_title,
R.drawable.private_space_setup_sharing_illustration));
R.raw.private_space_placeholder_illustration));
private Runnable mUpdateScreenResources =
new Runnable() {
@Override
public void run() {
if (getActivity() != null) {
if (++mScreenTitleIndex < HEADER_IMAGE_PAIRS.size()) {
if (++mScreenTitleIndex < HEADER_ILLUSTRATION_PAIRS.size()) {
startFadeOutAnimation();
mHandler.postDelayed(mUpdateScreenResources, DELAY_BETWEEN_SCREENS);
} else if (PrivateSpaceMaintainer.getInstance(getActivity())
@@ -81,8 +84,13 @@ public class AutoAdvanceSetupFragment extends InstrumentedFragment {
getContext(),
SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_SPACE_CREATED,
true);
NavHostFragment.findNavController(AutoAdvanceSetupFragment.this)
.navigate(R.id.action_set_lock_fragment);
if (isConnectedToInternet()) {
NavHostFragment.findNavController(AutoAdvanceSetupFragment.this)
.navigate(R.id.action_account_intro_fragment);
} else {
NavHostFragment.findNavController(AutoAdvanceSetupFragment.this)
.navigate(R.id.action_set_lock_fragment);
}
} else {
mMetricsFeatureProvider.action(
getContext(),
@@ -112,7 +120,7 @@ public class AutoAdvanceSetupFragment extends InstrumentedFragment {
}
} else {
mScreenTitleIndex = savedInstanceState.getInt(TITLE_INDEX);
if (mScreenTitleIndex >= HEADER_IMAGE_PAIRS.size()) {
if (mScreenTitleIndex >= HEADER_ILLUSTRATION_PAIRS.size()) {
return super.onCreateView(inflater, container, savedInstanceState);
}
}
@@ -121,7 +129,7 @@ public class AutoAdvanceSetupFragment extends InstrumentedFragment {
inflater.inflate(R.layout.private_space_advancing_screen, container, false);
mRootView.getHeaderTextView().setMaxLines(HEADER_TEXT_MAX_LINES);
mRootView.getHeaderTextView().setBreakStrategy(BREAK_STRATEGY_SIMPLE);
updateHeaderAndImage();
updateHeaderAndIllustration();
mHandler = new Handler(Looper.getMainLooper());
mHandler.postDelayed(mUpdateScreenResources, DELAY_BETWEEN_SCREENS);
OnBackPressedCallback callback =
@@ -144,7 +152,9 @@ public class AutoAdvanceSetupFragment extends InstrumentedFragment {
@Override
public void onDestroy() {
mHandler.removeCallbacks(mUpdateScreenResources);
if (mHandler != null) {
mHandler.removeCallbacks(mUpdateScreenResources);
}
super.onDestroy();
}
@@ -158,20 +168,21 @@ public class AutoAdvanceSetupFragment extends InstrumentedFragment {
.navigate(R.id.action_advance_profile_error);
}
private void updateHeaderAndImage() {
mRootView.setHeaderText(HEADER_IMAGE_PAIRS.get(mScreenTitleIndex).first);
((ImageView) mRootView.findViewById(R.id.setup_advance_image))
.setImageResource(HEADER_IMAGE_PAIRS.get(mScreenTitleIndex).second);
private void updateHeaderAndIllustration() {
mRootView.setHeaderText(HEADER_ILLUSTRATION_PAIRS.get(mScreenTitleIndex).first);
LottieAnimationView animationView = mRootView.findViewById(R.id.lottie_animation);
animationView.setAnimation(HEADER_ILLUSTRATION_PAIRS.get(mScreenTitleIndex).second);
animationView.playAnimation();
startFadeInAnimation();
}
private void startFadeInAnimation() {
ValueAnimator textView = ObjectAnimator.ofFloat(
mRootView.getHeaderTextView(), View.ALPHA, 0f, 1f);
ValueAnimator imageView = ObjectAnimator.ofFloat(
mRootView.findViewById(R.id.setup_advance_image), View.ALPHA, 0, 1f);
ValueAnimator lottieView = ObjectAnimator.ofFloat(
mRootView.findViewById(R.id.lottie_animation), View.ALPHA, 0, 1f);
AnimatorSet fadeIn = new AnimatorSet();
fadeIn.playTogether(textView, imageView);
fadeIn.playTogether(textView, lottieView);
fadeIn.setDuration(ANIMATION_DURATION_MILLIS).start();
}
@@ -179,15 +190,24 @@ public class AutoAdvanceSetupFragment extends InstrumentedFragment {
AnimatorSet fadeOut = new AnimatorSet();
ValueAnimator textView = ObjectAnimator.ofFloat(
mRootView.getHeaderTextView(), View.ALPHA, 1f, 0f);
ValueAnimator imageView = ObjectAnimator.ofFloat(
mRootView.findViewById(R.id.setup_advance_image), View.ALPHA, 1f, 0f);
fadeOut.playTogether(textView, imageView);
ValueAnimator lottieView = ObjectAnimator.ofFloat(
mRootView.findViewById(R.id.lottie_animation), View.ALPHA, 1f, 0f);
fadeOut.playTogether(textView, lottieView);
fadeOut.setDuration(ANIMATION_DURATION_MILLIS).start();
fadeOut.addListener(new AnimatorListenerAdapter() {
@Override
public void onAnimationEnd(Animator animation) {
updateHeaderAndImage();
updateHeaderAndIllustration();
}
});
}
/** Returns true if device has an active internet connection, false otherwise. */
private boolean isConnectedToInternet() {
ConnectivityManager cm =
(ConnectivityManager)
getActivity().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo activeNetwork = cm.getActiveNetworkInfo();
return activeNetwork != null && activeNetwork.isConnectedOrConnecting();
}
}

View File

@@ -47,7 +47,7 @@ public class HidePrivateSpaceSettings extends DashboardFragment{
@Override
protected int getPreferenceScreenResId() {
return R.xml.privatespace_hide_locked;
return R.xml.private_space_hide_locked;
}
@Override

View File

@@ -60,9 +60,7 @@ public class PrivateProfileCreationError extends InstrumentedFragment {
.setText(R.string.private_space_cancel_label)
.setListener(onCancel())
.setButtonType(FooterButton.ButtonType.CANCEL)
.setTheme(
androidx.appcompat.R.style
.Base_TextAppearance_AppCompat_Widget_Button)
.setTheme(com.google.android.setupdesign.R.style.SudGlifButton_Secondary)
.build());
OnBackPressedCallback callback =
new OnBackPressedCallback(true /* enabled by default */) {

View File

@@ -16,15 +16,9 @@
package com.android.settings.privatespace;
import static com.android.settings.privatespace.PrivateSpaceSetupActivity.ACCOUNT_LOGIN_ACTION;
import static com.android.settings.privatespace.PrivateSpaceSetupActivity.EXTRA_ACTION_TYPE;
import android.annotation.SuppressLint;
import android.app.settings.SettingsEnums;
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -66,9 +60,7 @@ public class PrivateSpaceAccountLoginError extends InstrumentedFragment {
.setText(R.string.private_space_skip_login_label)
.setListener(onSkip())
.setButtonType(FooterButton.ButtonType.CANCEL)
.setTheme(
androidx.appcompat.R.style
.Base_TextAppearance_AppCompat_Widget_Button)
.setTheme(com.google.android.setupdesign.R.style.SudGlifButton_Secondary)
.build());
OnBackPressedCallback callback =
new OnBackPressedCallback(true /* enabled by default */) {
@@ -93,17 +85,8 @@ public class PrivateSpaceAccountLoginError extends InstrumentedFragment {
mMetricsFeatureProvider.action(
getContext(),
SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_TRY_CREATE_ACCOUNT_AGAIN);
PrivateSpaceMaintainer privateSpaceMaintainer =
PrivateSpaceMaintainer.getInstance(getActivity());
UserHandle userHandle;
if (privateSpaceMaintainer.doesPrivateSpaceExist()
&& (userHandle = privateSpaceMaintainer.getPrivateProfileHandle()) != null) {
Intent intent = new Intent(getContext(), PrivateProfileContextHelperActivity.class);
intent.putExtra(EXTRA_ACTION_TYPE, ACCOUNT_LOGIN_ACTION);
Log.d(TAG, "Start private space activity for account login");
getActivity()
.startActivityForResultAsUser(intent, ACCOUNT_LOGIN_ACTION, userHandle);
}
NavHostFragment.findNavController(PrivateSpaceAccountLoginError.this)
.navigate(R.id.action_advance_login_error);
};
}
@@ -116,7 +99,7 @@ public class PrivateSpaceAccountLoginError extends InstrumentedFragment {
SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_ACCOUNT_LOGIN_SUCCESS,
false);
NavHostFragment.findNavController(PrivateSpaceAccountLoginError.this)
.navigate(R.id.action_success_fragment);
.navigate(R.id.action_skip_account_login);
};
}
}

View File

@@ -62,9 +62,7 @@ public class PrivateSpaceEducation extends InstrumentedFragment {
.setText(R.string.private_space_cancel_label)
.setListener(onCancel())
.setButtonType(FooterButton.ButtonType.CANCEL)
.setTheme(
androidx.appcompat.R.style
.Base_TextAppearance_AppCompat_Widget_Button)
.setTheme(com.google.android.setupdesign.R.style.SudGlifButton_Secondary)
.build());
return rootView;

View File

@@ -0,0 +1,124 @@
/*
* Copyright (C) 2024 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.privatespace;
import static com.android.settings.privatespace.PrivateSpaceSetupActivity.ACCOUNT_LOGIN_ACTION;
import static com.android.settings.privatespace.PrivateSpaceSetupActivity.EXTRA_ACTION_TYPE;
import android.app.settings.SettingsEnums;
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import androidx.activity.OnBackPressedCallback;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.navigation.fragment.NavHostFragment;
import com.android.settings.R;
import com.android.settings.core.InstrumentedFragment;
import com.google.android.setupcompat.template.FooterBarMixin;
import com.google.android.setupcompat.template.FooterButton;
import com.google.android.setupdesign.GlifLayout;
/** Fragment for GAIA education screen */
public class PrivateSpaceGaiaEducationFragment extends InstrumentedFragment {
private static final String TAG = "PrivateSpaceGaiaEduFrag";
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
if (android.os.Flags.allowPrivateProfile()) {
super.onCreate(savedInstanceState);
}
}
@NonNull
@Override
public View onCreateView(
@NonNull LayoutInflater inflater,
@Nullable ViewGroup container,
@Nullable Bundle savedInstanceState) {
GlifLayout rootView =
(GlifLayout)
inflater.inflate(
R.layout.private_space_gaia_education_screen, container, false);
final FooterBarMixin mixin = rootView.getMixin(FooterBarMixin.class);
mixin.setPrimaryButton(
new FooterButton.Builder(getContext())
.setText(R.string.private_space_gaia_education_got_it)
.setListener(onStartLogin())
.setButtonType(FooterButton.ButtonType.NEXT)
.setTheme(com.google.android.setupdesign.R.style.SudGlifButton_Primary)
.build());
mixin.setSecondaryButton(
new FooterButton.Builder(getContext())
.setText(R.string.skip_label)
.setListener(onSkip())
.setButtonType(FooterButton.ButtonType.NEXT)
.setTheme(com.google.android.setupdesign.R.style.SudGlifButton_Secondary)
.build());
OnBackPressedCallback callback =
new OnBackPressedCallback(true /* enabled by default */) {
@Override
public void handleOnBackPressed() {
// Handle the back button event. We intentionally don't want to allow back
// button to work in this screen during the setup flow.
}
};
requireActivity().getOnBackPressedDispatcher().addCallback(this, callback);
return rootView;
}
@Override
public int getMetricsCategory() {
return METRICS_CATEGORY_UNKNOWN;
}
private View.OnClickListener onSkip() {
return v -> {
NavHostFragment.findNavController(PrivateSpaceGaiaEducationFragment.this)
.navigate(R.id.action_account_lock_fragment);
};
}
private View.OnClickListener onStartLogin() {
return v -> {
startAccountLogin();
};
}
/** Start new activity in private profile to add an account to private profile */
private void startAccountLogin() {
UserHandle userHandle =
PrivateSpaceMaintainer.getInstance(getActivity()).getPrivateProfileHandle();
if (userHandle != null) {
Intent intent = new Intent(getContext(), PrivateProfileContextHelperActivity.class);
intent.putExtra(EXTRA_ACTION_TYPE, ACCOUNT_LOGIN_ACTION);
mMetricsFeatureProvider.action(
getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_ACCOUNT_LOGIN_START);
getActivity().startActivityForResultAsUser(intent, ACCOUNT_LOGIN_ACTION, userHandle);
} else {
Log.w(TAG, "Private profile user handle is null");
}
}
}

View File

@@ -16,7 +16,6 @@
package com.android.settings.privatespace;
import static com.android.settings.privatespace.PrivateSpaceSetupActivity.ACCOUNT_LOGIN_ACTION;
import static com.android.settings.privatespace.PrivateSpaceSetupActivity.EXTRA_ACTION_TYPE;
import static com.android.settings.privatespace.PrivateSpaceSetupActivity.SET_LOCK_ACTION;
@@ -31,6 +30,7 @@ import android.view.ViewGroup;
import androidx.activity.OnBackPressedCallback;
import androidx.annotation.Nullable;
import androidx.navigation.fragment.NavHostFragment;
import com.android.settings.R;
import com.android.settings.core.InstrumentedFragment;
@@ -70,9 +70,7 @@ public class PrivateSpaceSetLockFragment extends InstrumentedFragment {
.setText(R.string.private_space_set_lock_label)
.setListener(onClickNewLock())
.setButtonType(FooterButton.ButtonType.NEXT)
.setTheme(
androidx.appcompat.R.style
.Base_TextAppearance_AppCompat_Widget_Button)
.setTheme(com.google.android.setupdesign.R.style.SudGlifButton_Secondary)
.build());
OnBackPressedCallback callback =
new OnBackPressedCallback(true /* enabled by default */) {
@@ -97,10 +95,8 @@ public class PrivateSpaceSetLockFragment extends InstrumentedFragment {
mMetricsFeatureProvider.action(
getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_USE_SCREEN_LOCK);
// Simply Use default screen lock. No need to handle
mMetricsFeatureProvider.action(
getContext(), SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_ACCOUNT_LOGIN_START);
Log.d(TAG, "Use device lock for private profile");
launchActivityForAction(ACCOUNT_LOGIN_ACTION);
NavHostFragment.findNavController(PrivateSpaceSetLockFragment.this)
.navigate(R.id.action_lock_success_fragment);
};
}

View File

@@ -19,8 +19,6 @@ package com.android.settings.privatespace;
import android.app.settings.SettingsEnums;
import android.content.Intent;
import android.os.Bundle;
import android.os.UserHandle;
import android.util.Log;
import androidx.annotation.Nullable;
import androidx.fragment.app.FragmentActivity;
@@ -61,23 +59,12 @@ public class PrivateSpaceSetupActivity extends FragmentActivity {
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
if (requestCode == SET_LOCK_ACTION && resultCode == RESULT_OK) {
/* Start new activity in private profile to add an account to private profile */
UserHandle userHandle =
PrivateSpaceMaintainer.getInstance(this).getPrivateProfileHandle();
if (userHandle != null) {
Intent intent = new Intent(this, PrivateProfileContextHelperActivity.class);
intent.putExtra(EXTRA_ACTION_TYPE, ACCOUNT_LOGIN_ACTION);
mMetricsFeatureProvider.action(
this, SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_ACCOUNT_LOGIN_START);
startActivityForResultAsUser(intent, ACCOUNT_LOGIN_ACTION, userHandle);
} else {
Log.w(TAG, "Private profile user handle is null");
}
mNavHostFragment.getNavController().navigate(R.id.action_success_fragment);
} else if (requestCode == ACCOUNT_LOGIN_ACTION) {
if (resultCode == RESULT_OK) {
mMetricsFeatureProvider.action(
this, SettingsEnums.ACTION_PRIVATE_SPACE_SETUP_ACCOUNT_LOGIN_SUCCESS, true);
mNavHostFragment.getNavController().navigate(R.id.action_success_fragment);
mNavHostFragment.getNavController().navigate(R.id.action_account_lock_fragment);
} else {
mMetricsFeatureProvider.action(
this,

View File

@@ -0,0 +1,49 @@
/*
* Copyright (C) 2024 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.accessibility;
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
/** Tests for {@link ArrowPreference} */
@RunWith(RobolectricTestRunner.class)
public class ArrowPreferenceTest {
private final Context mContext = ApplicationProvider.getApplicationContext();
private ArrowPreference mPreference;
@Before
public void setUp() {
mPreference = new ArrowPreference(mContext);
}
@Test
public void construct_withArrow() {
assertThat(mPreference.getWidgetLayoutResource()).isEqualTo(
R.layout.preference_widget_arrow);
}
}

View File

@@ -0,0 +1,72 @@
/*
* Copyright (C) 2024 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.accessibility;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.verify;
import android.content.Context;
import android.view.View;
import android.widget.LinearLayout;
import androidx.preference.PreferenceViewHolder;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Spy;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
/** Tests for {@link BackgroundPreference} */
@RunWith(RobolectricTestRunner.class)
public class BackgroundPreferenceTest {
@Rule
public final MockitoRule mMockitoRule = MockitoJUnit.rule();
private final Context mContext = ApplicationProvider.getApplicationContext();
private View mRootView = new View(mContext);
@Spy
private PreferenceViewHolder mViewHolder = PreferenceViewHolder.createInstanceForTests(
mRootView);
@Spy
private LinearLayout mLinearLayout = new LinearLayout(mContext);
private BackgroundPreference mPreference;
@Before
public void setUp() {
mPreference = new BackgroundPreference(mContext);
}
@Test
public void setBackground_success() {
doReturn(mLinearLayout).when(mViewHolder).findViewById(R.id.background);
mPreference.setBackground(android.R.drawable.screen_background_dark);
mPreference.onBindViewHolder(mViewHolder);
verify(mLinearLayout).setBackground(any());
}
}

View File

@@ -0,0 +1,86 @@
/*
* Copyright (C) 2024 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.accessibility;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.when;
import android.app.UiModeManager;
import android.content.Context;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import com.android.settings.testutils.XmlTestUtils;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import java.util.List;
/** Tests for {@link ColorContrastFragment}. */
@RunWith(RobolectricTestRunner.class)
public class ColorContrastFragmentTest {
private ColorContrastFragment mFragment;
private Context mContext;
@Mock
private UiModeManager mUiService;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mFragment = spy(new ColorContrastFragment());
mContext = spy(ApplicationProvider.getApplicationContext());
when(mFragment.getContext()).thenReturn(mContext);
when(mContext.getSystemService(UiModeManager.class)).thenReturn(mUiService);
}
@Test
public void getMetricsCategory_returnsCorrectCategory() {
assertThat(mFragment.getMetricsCategory()).isEqualTo(0);
}
@Test
public void getPreferenceScreenResId_returnsCorrectXml() {
assertThat(mFragment.getPreferenceScreenResId()).isEqualTo(
R.xml.accessibility_color_contrast);
}
@Test
public void getLogTag_returnsCorrectTag() {
assertThat(mFragment.getLogTag()).isEqualTo("ColorContrastFragment");
}
@Test
public void getNonIndexableKeys_existInXmlLayout() {
final List<String> niks =
ShortcutsSettingsFragment.SEARCH_INDEX_DATA_PROVIDER
.getNonIndexableKeys(mContext);
final List<String> keys =
XmlTestUtils.getKeysFromPreferenceXml(mContext,
R.xml.accessibility_color_contrast);
assertThat(keys).containsAtLeastElementsIn(niks);
}
}

View File

@@ -0,0 +1,70 @@
/*
* Copyright (C) 2024 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.accessibility;
import static com.google.common.truth.Truth.assertThat;
import android.content.Context;
import android.platform.test.flag.junit.CheckFlagsRule;
import android.platform.test.flag.junit.DeviceFlagsValueProvider;
import android.platform.test.flag.junit.SetFlagsRule;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.robolectric.RobolectricTestRunner;
/** Tests for {@link ContrastPreferenceController}. */
@RunWith(RobolectricTestRunner.class)
public class ContrastPreferenceControllerTest {
@Rule
public final CheckFlagsRule mCheckFlagsRule = DeviceFlagsValueProvider.createCheckFlagsRule();
@Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule();
private static final String PREFERENCE_KEY = "preference_key";
private Context mContext;
private ContrastPreferenceController mController;
@Before
public void setUp() {
mContext = ApplicationProvider.getApplicationContext();
mController = new ContrastPreferenceController(mContext, PREFERENCE_KEY);
}
@Test
public void getAvailabilityStatus_flagsEnabled_shouldReturnAvailable() {
mSetFlagsRule.enableFlags(Flags.FLAG_ENABLE_COLOR_CONTRAST_CONTROL);
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.AVAILABLE);
}
@Test
public void getAvailabilityStatus_flagsDisabled_shouldReturnUnsupported() {
mSetFlagsRule.disableFlags(Flags.FLAG_ENABLE_COLOR_CONTRAST_CONTROL);
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.UNSUPPORTED_ON_DEVICE);
}
}

View File

@@ -0,0 +1,115 @@
/*
* Copyright (C) 2024 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.accessibility;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.ArgumentMatchers.any;
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.app.UiModeManager;
import android.content.Context;
import android.widget.FrameLayout;
import androidx.preference.PreferenceScreen;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.core.BasePreferenceController;
import com.android.settingslib.widget.LayoutPreference;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.RobolectricTestRunner;
import java.util.concurrent.Executor;
/** Tests for {@link ContrastSelectorPreferenceController}. */
@RunWith(RobolectricTestRunner.class)
public class ContrastSelectorPreferenceControllerTest {
private static final String PREFERENCE_KEY = "color_contrast_selector";
@Mock
private UiModeManager mUiService;
@Mock
private Executor mExecutor;
@Mock
private PreferenceScreen mScreen;
@Mock
private FrameLayout mFrameLayout;
@Mock
private LayoutPreference mLayoutPreference;
private Context mContext;
private ContrastSelectorPreferenceController mController;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
mContext = spy(ApplicationProvider.getApplicationContext());
when(mContext.getMainExecutor()).thenReturn(mExecutor);
when(mContext.getSystemService(UiModeManager.class)).thenReturn(mUiService);
mController = new ContrastSelectorPreferenceController(mContext, PREFERENCE_KEY);
when(mScreen.findPreference(PREFERENCE_KEY)).thenReturn(mLayoutPreference);
when(mLayoutPreference.findViewById(anyInt())).thenReturn(mFrameLayout);
}
@Test
public void getAvailabilityStatus_byDefault_shouldReturnAvailable() {
assertThat(mController.getAvailabilityStatus())
.isEqualTo(BasePreferenceController.AVAILABLE);
}
@Test
public void onStart_shouldAddContrastListener() {
mController.displayPreference(mScreen);
mController.onStart();
verify(mUiService).addContrastChangeListener(mExecutor, mController);
}
@Test
public void onStop_shouldRemoveContrastListener() {
mController.displayPreference(mScreen);
mController.onStart();
mController.onStop();
verify(mUiService).removeContrastChangeListener(mController);
}
@Test
public void displayPreference_shouldAddClickListener() {
mController.displayPreference(mScreen);
verify(mFrameLayout, times(3)).setOnClickListener(any());
}
@Test
public void onContrastChanged_buttonShouldBeSelected() {
mController.displayPreference(mScreen);
mController.onContrastChanged(1);
verify(mFrameLayout, times(2)).setSelected(true);
}
}

View File

@@ -549,6 +549,7 @@ public class EditShortcutsPreferenceFragmentTest {
ComponentName componentName, String label) {
AccessibilityTarget target = mock(AccessibilityTarget.class);
when(target.getComponentName()).thenReturn(componentName);
when(target.getId()).thenReturn(componentName.flattenToString());
when(target.getLabel()).thenReturn(label);
return target;
}

View File

@@ -41,12 +41,12 @@ import android.util.Pair;
import com.android.settings.connecteddevice.DevicePreferenceCallback;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.flags.Flags;
import com.android.settings.testutils.shadow.ShadowAudioManager;
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
import com.android.settings.testutils.shadow.ShadowCachedBluetoothDeviceManager;
import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.flags.Flags;
import org.junit.Before;
import org.junit.Rule;

View File

@@ -40,12 +40,12 @@ import android.util.Pair;
import com.android.settings.connecteddevice.DevicePreferenceCallback;
import com.android.settings.dashboard.DashboardFragment;
import com.android.settings.flags.Flags;
import com.android.settings.testutils.shadow.ShadowBluetoothAdapter;
import com.android.settingslib.bluetooth.BluetoothUtils;
import com.android.settingslib.bluetooth.CachedBluetoothDevice;
import com.android.settingslib.bluetooth.CachedBluetoothDeviceManager;
import com.android.settingslib.bluetooth.LocalBluetoothManager;
import com.android.settingslib.flags.Flags;
import org.junit.Before;
import org.junit.Rule;

View File

@@ -33,6 +33,7 @@ import com.android.settings.core.BasePreferenceController.AVAILABLE_UNSEARCHABLE
import com.android.settings.datausage.DataUsageUtils
import com.android.settings.datausage.lib.DataUsageLib
import com.android.settings.datausage.lib.NetworkCycleDataRepository
import com.android.settings.datausage.lib.NetworkStatsRepository.Companion.AllTimeRange
import com.android.settings.datausage.lib.NetworkUsageData
import com.android.settingslib.spa.testutils.waitUntil
import com.google.common.truth.Truth.assertThat
@@ -140,11 +141,14 @@ class DataUsagePreferenceControllerTest {
}
@Test
fun updateState_noUsageData_shouldEnablePreference() = runBlocking {
fun updateState_noFistCycleUsageButOtherUsage_shouldEnablePreference() = runBlocking {
val usageData = NetworkUsageData(START_TIME, END_TIME, 0L)
repository.stub {
on { loadFirstCycle() } doReturn usageData
on { queryUsage(AllTimeRange) } doReturn
NetworkUsageData(AllTimeRange.lower, AllTimeRange.upper, 1L)
}
preference.isEnabled = false
controller.onViewCreated(TestLifecycleOwner())
@@ -152,6 +156,22 @@ class DataUsagePreferenceControllerTest {
waitUntil { preference.summary?.contains("0 B used") == true }
}
@Test
fun updateState_noDataUsage_shouldDisablePreference() = runBlocking {
val usageData = NetworkUsageData(START_TIME, END_TIME, 0L)
repository.stub {
on { loadFirstCycle() } doReturn usageData
on { queryUsage(AllTimeRange) } doReturn
NetworkUsageData(AllTimeRange.lower, AllTimeRange.upper, 0L)
}
preference.isEnabled = true
controller.onViewCreated(TestLifecycleOwner())
waitUntil { !preference.isEnabled }
waitUntil { preference.summary?.contains("0 B used") == true }
}
@Test
fun updateState_shouldUseIecUnit() = runBlocking {
val usageData = NetworkUsageData(START_TIME, END_TIME, DataUnit.MEBIBYTES.toBytes(1))