Merge changes from topic "catalyst-sims" into main
* changes:
[Catalyst] Migrate "Mobile data"
[Catalyst] Migrate SIMs entry point
diff --git a/res/drawable-night/satellite_sos_illustration.xml b/res/drawable-night/satellite_sos_illustration.xml
new file mode 100644
index 0000000..91c8609
--- /dev/null
+++ b/res/drawable-night/satellite_sos_illustration.xml
@@ -0,0 +1,139 @@
+<?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.
+ -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:width="380dp"
+ android:height="276dp"
+ android:viewportWidth="380"
+ android:viewportHeight="276"
+ tools:ignore="all">
+ <path
+ android:pathData="M353.46,276H25.58C11.5,276 0,264.13 0,249.78V26.22C0,11.78 11.5,0 25.58,0H353.56C367.54,0 379.04,11.78 379.04,26.22V249.96C379.04,264.13 367.54,276 353.46,276Z"
+ android:fillColor="#000000"/>
+ <path
+ android:pathData="M28,0L351,0A28,28 0,0 1,379 28L379,248A28,28 0,0 1,351 276L28,276A28,28 0,0 1,0 248L0,28A28,28 0,0 1,28 0z"
+ android:fillColor="#000000"/>
+ <path
+ android:pathData="M354.75,228.66H27.08V230.39H354.75V228.66Z"
+ android:fillColor="#3C4043"/>
+ <path
+ android:pathData="M191.82,54.37C190.76,54.37 189.71,54.38 188.66,54.4L188.63,52.58C189.69,52.56 190.75,52.55 191.82,52.55C192.89,52.55 193.95,52.56 195.02,52.58L194.98,54.4C193.93,54.38 192.87,54.37 191.82,54.37ZM182.37,54.64C180.27,54.76 178.17,54.92 176.09,55.12L175.91,53.3C178.02,53.1 180.13,52.94 182.26,52.81L182.36,54.63L182.37,54.64ZM207.57,55.13C205.49,54.93 203.39,54.77 201.28,54.64L201.38,52.82C203.51,52.94 205.63,53.11 207.74,53.31L207.56,55.13H207.57ZM169.83,55.84C167.74,56.12 165.67,56.44 163.61,56.8L163.3,55C165.38,54.64 167.48,54.31 169.59,54.03L169.83,55.84ZM220.07,56.83C218.01,56.47 215.93,56.14 213.84,55.86L214.09,54.05C216.2,54.34 218.3,54.67 220.39,55.03L220.07,56.83ZM157.43,58.01C155.37,58.45 153.33,58.93 151.3,59.45L150.85,57.68C152.9,57.15 154.97,56.67 157.05,56.22L157.43,58V58.01ZM232.4,59.5C230.37,58.97 228.32,58.49 226.26,58.04L226.65,56.26C228.74,56.71 230.8,57.2 232.86,57.74L232.4,59.51V59.5ZM145.23,61.13C143.21,61.73 141.21,62.37 139.23,63.05L138.64,61.32C140.65,60.64 142.67,59.99 144.71,59.38L145.23,61.13ZM244.49,63.14C242.5,62.46 240.5,61.81 238.48,61.2L239.01,59.45C241.05,60.06 243.08,60.72 245.08,61.41L244.49,63.13V63.14ZM133.31,65.2C131.35,65.96 129.4,66.75 127.48,67.58L126.76,65.9C128.71,65.06 130.67,64.26 132.66,63.5L133.32,65.2H133.31ZM256.25,67.71C254.32,66.87 252.38,66.07 250.41,65.31L251.07,63.61C253.06,64.38 255.02,65.19 256.97,66.04L256.24,67.71H256.25ZM121.75,70.18C119.85,71.09 117.98,72.03 116.12,73L115.27,71.39C117.15,70.4 119.04,69.45 120.96,68.53L121.75,70.18ZM267.62,73.18C265.76,72.2 263.89,71.25 261.99,70.33L262.78,68.69C264.7,69.61 266.6,70.57 268.48,71.57L267.62,73.18ZM110.61,76.04C108.79,77.09 106.99,78.17 105.22,79.29L104.25,77.75C106.05,76.62 107.86,75.52 109.7,74.46L110.61,76.04ZM278.53,79.52C276.76,78.39 274.96,77.3 273.14,76.24L274.06,74.66C275.9,75.73 277.72,76.83 279.51,77.97L278.53,79.51V79.52ZM99.95,82.75C98.22,83.94 96.51,85.16 94.82,86.41L93.73,84.95C95.43,83.68 97.16,82.45 98.91,81.25L99.94,82.76L99.95,82.75ZM288.92,86.68C287.24,85.42 285.53,84.19 283.8,83L284.84,81.5C286.59,82.71 288.32,83.95 290.02,85.22L288.93,86.68H288.92ZM89.84,90.26C88.2,91.58 86.59,92.92 85.01,94.3L83.81,92.92C85.41,91.53 87.04,90.16 88.69,88.83L89.83,90.25L89.84,90.26ZM298.72,94.63C297.14,93.24 295.53,91.89 293.89,90.56L295.04,89.14C296.69,90.48 298.32,91.85 299.92,93.25L298.72,94.62V94.63ZM80.34,98.53C78.81,99.97 77.31,101.44 75.84,102.93L74.54,101.65C76.03,100.14 77.55,98.65 79.09,97.2L80.34,98.53ZM307.89,103.3C306.42,101.8 304.92,100.32 303.39,98.87L304.64,97.55C306.18,99.01 307.7,100.5 309.19,102.02L307.89,103.3ZM71.51,107.5C70.1,109.05 68.71,110.63 67.36,112.24L65.97,111.07C67.34,109.45 68.74,107.85 70.17,106.28L71.52,107.51L71.51,107.5ZM316.36,112.65C315.01,111.04 313.63,109.45 312.21,107.89L313.56,106.67C314.99,108.25 316.39,109.85 317.75,111.48L316.35,112.65H316.36ZM63.39,117.13C62.1,118.78 60.84,120.47 59.62,122.17L58.14,121.11C59.38,119.39 60.65,117.68 61.96,116.01L63.4,117.13H63.39ZM324.09,122.63C322.87,120.92 321.61,119.23 320.32,117.57L321.76,116.45C323.06,118.13 324.33,119.84 325.57,121.57L324.09,122.63ZM56.04,127.36C54.88,129.11 53.76,130.88 52.67,132.68L51.11,131.73C52.21,129.91 53.35,128.12 54.52,126.35L56.04,127.36ZM331.02,133.17C329.93,131.37 328.81,129.59 327.65,127.83L329.17,126.83C330.34,128.61 331.47,130.41 332.57,132.23L331.01,133.17H331.02ZM49.51,138.12C48.49,139.95 47.51,141.81 46.56,143.68L44.93,142.86C45.89,140.96 46.88,139.09 47.91,137.23L49.5,138.11L49.51,138.12ZM337.12,144.21C336.17,142.33 335.19,140.47 334.18,138.63L335.78,137.75C336.81,139.61 337.8,141.49 338.76,143.39L337.13,144.21H337.12ZM43.83,149.36C42.96,151.27 42.12,153.19 41.32,155.14L39.63,154.45C40.44,152.48 41.28,150.54 42.16,148.61L43.82,149.37L43.83,149.36ZM342.35,155.7C341.55,153.75 340.72,151.82 339.85,149.91L341.51,149.15C342.39,151.08 343.23,153.04 344.04,155.01L342.35,155.7ZM39.05,161.01C38.33,162.98 37.65,164.96 37,166.97L35.26,166.41C35.91,164.39 36.6,162.38 37.33,160.39L39.04,161.02L39.05,161.01ZM346.66,167.56C346.02,165.55 345.34,163.56 344.62,161.59L346.33,160.97C347.06,162.96 347.74,164.98 348.39,167.01L346.65,167.57L346.66,167.56ZM35.19,172.99C34.91,174 34.64,175.02 34.37,176.03C34.11,177.04 33.84,178.21 33.56,179.55L31.77,179.18C32.05,177.81 32.33,176.61 32.6,175.57C32.87,174.54 33.14,173.51 33.43,172.49L35.19,172.98V172.99ZM349.28,176.65C349.02,175.63 348.75,174.61 348.46,173.6L350.22,173.11C350.5,174.14 350.78,175.16 351.04,176.2C351.29,177.16 351.55,178.36 351.82,179.77L350.03,180.11C349.77,178.73 349.51,177.56 349.28,176.65ZM32.37,186.71C32.08,188.84 31.81,191.25 31.57,193.94L29.75,193.78C29.99,191.06 30.27,188.63 30.56,186.46L32.37,186.7V186.71ZM352.02,194.33C351.76,191.76 351.47,189.36 351.18,187.19L352.99,186.94C353.29,189.13 353.58,191.55 353.84,194.14L352.02,194.32V194.33ZM31.06,201.21C30.93,203.47 30.83,205.9 30.75,208.5L28.93,208.45C29.01,205.84 29.11,203.4 29.24,201.11L31.06,201.21ZM353.05,208.67C352.94,206.2 352.8,203.8 352.63,201.49L354.45,201.36C354.62,203.68 354.76,206.1 354.87,208.59L353.05,208.67ZM30.61,215.79C30.6,216.98 30.59,218.2 30.59,219.45H28.77C28.77,218.19 28.77,216.97 28.79,215.77L30.61,215.79ZM353.29,219.45C353.29,218.24 353.28,217.04 353.26,215.85L355.08,215.82C355.1,217.02 355.11,218.22 355.11,219.44H353.29V219.45Z"
+ android:fillColor="#3C4043"
+ android:fillType="evenOdd"/>
+ <path
+ android:pathData="M298.47,120.96C315.85,120.96 329.94,106.87 329.94,89.48C329.94,72.09 315.85,58 298.47,58C281.09,58 267,72.09 267,89.48C267,106.87 281.09,120.96 298.47,120.96Z"
+ android:fillColor="#000000"/>
+ <group>
+ <clip-path
+ android:pathData="M322,64H274V112H322V64Z"/>
+ <group>
+ <clip-path
+ android:pathData="M317.2,68.8H278.8V107.2H317.2V68.8Z"/>
+ <path
+ android:pathData="M316.32,88H314.57C314.1,88 313.73,88.37 313.71,88.84C313.29,96.86 306.87,103.4 298.86,103.72C298.39,103.74 298.01,104.1 298.01,104.58V106.12C298.01,106.81 298.42,107.22 298.91,107.19C308.79,106.73 316.74,98.78 317.2,88.9C317.22,88.41 316.81,87.99 316.32,87.99V88Z"
+ android:fillColor="#669DF6"/>
+ <path
+ android:pathData="M309.14,88C309.83,88 310.25,88.42 310.21,88.92C309.76,94.95 304.94,99.77 298.91,100.22C298.41,100.26 297.99,99.84 297.99,99.34V97.59C297.99,97.12 298.36,96.76 298.82,96.72C303,96.33 306.5,93.03 306.74,88.88C306.77,88.4 307.13,88.01 307.61,88.01H309.14V88Z"
+ android:fillColor="#669DF6"/>
+ <path
+ android:pathData="M297.38,92.94L293.53,89.09L291.29,91.33L293.45,93.44C294.84,94.8 294.85,97.03 293.48,98.4L290.95,100.94C290.27,101.62 289.37,101.97 288.48,101.97C287.59,101.97 286.69,101.63 286.01,100.94L279.82,94.74C278.47,93.39 278.46,91.21 279.78,89.85L282.17,87.33C282.85,86.62 283.77,86.27 284.68,86.27C285.59,86.27 286.44,86.6 287.12,87.26L289.42,89.51L291.69,87.25L282.91,78.48C282.57,78.14 282.57,77.59 282.91,77.25L287.23,72.93C287.57,72.59 288.12,72.59 288.46,72.93L297.24,81.7L299.46,79.48L297.28,77.3C295.93,75.95 295.92,73.77 297.24,72.41L299.63,69.89C300.31,69.18 301.23,68.83 302.14,68.83C303.05,68.83 303.9,69.16 304.58,69.82L310.91,76.01C312.3,77.37 312.31,79.6 310.94,80.97L308.41,83.51C307.73,84.19 306.83,84.54 305.94,84.54C305.05,84.54 304.15,84.2 303.47,83.51L301.31,81.34L299.09,83.55L302.94,87.4C303.28,87.74 303.28,88.29 302.94,88.63L298.62,92.95C298.28,93.29 297.73,93.29 297.39,92.95L297.38,92.94ZM303.79,78.84L305.33,80.4C305.67,80.74 306.23,80.75 306.57,80.4L307.85,79.11C308.19,78.77 308.19,78.21 307.85,77.87L306.29,76.35L303.8,78.84H303.79ZM300.38,75.39L301.95,76.98L304.41,74.52L302.77,72.92C302.42,72.58 301.86,72.59 301.53,72.95L300.36,74.19C300.04,74.53 300.04,75.07 300.37,75.4L300.38,75.39ZM286.95,91.97L285.31,90.37C284.96,90.03 284.4,90.04 284.07,90.4L282.9,91.64C282.58,91.98 282.58,92.52 282.91,92.85L284.48,94.44L286.95,91.98V91.97ZM290.38,95.32L288.82,93.8L286.33,96.29L287.87,97.85C288.21,98.19 288.77,98.2 289.11,97.85L290.39,96.56C290.73,96.22 290.73,95.66 290.39,95.32H290.38Z"
+ android:fillColor="#669DF6"/>
+ </group>
+ </group>
+ <path
+ android:pathData="M91.98,229.49H124.82L114.81,215.42H122.02L108.01,195.73L93.59,215.42H100.8L91.99,229.49H91.98Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#3C4043"/>
+ <path
+ android:pathData="M308.14,193.9H340.98L330.97,179.83H338.18L324.16,160.14L309.74,179.83H316.95L308.14,193.9Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#3C4043"/>
+ <path
+ android:pathData="M63.7,207.59H75.56V229.49H63.7V207.59Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#3C4043"/>
+ <path
+ android:pathData="M318.48,194H330.48V229H318.48V194Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#3C4043"/>
+ <path
+ android:pathData="M240.65,213.97H252.51V229.48H240.65V213.97Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#3C4043"/>
+ <path
+ android:pathData="M274.39,229.49H311.79L300.39,214.43H308.6L292.64,193.44L276.22,214.43H284.43L274.4,229.49H274.39Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#3C4043"/>
+ <path
+ android:pathData="M50.93,207.59H88.33L76.93,188.88H85.14L69.18,162.87L52.76,188.88H60.97L50.94,207.59H50.93Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#3C4043"/>
+ <path
+ android:pathData="M229.7,213.97H262.53L251.13,198H259.34L246.11,177.47L231.52,198H239.73L229.7,213.97Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#3C4043"/>
+ <path
+ android:pathData="M216.01,229.18L196.69,229.28C195.34,229.28 194.29,228.22 194.29,226.97V217.35H203.04L217.17,224.18C218.04,224.66 218.61,225.53 218.61,226.58C218.71,227.93 217.55,229.18 216.01,229.18Z"
+ android:fillColor="#34373A"/>
+ <path
+ android:pathData="M197.14,229.18L177.82,229.28C176.47,229.28 175.42,228.22 175.42,226.97L177.65,214.62L186.51,216.34L198.3,224.18C199.17,224.66 199.74,225.53 199.74,226.58C199.84,227.93 198.68,229.18 197.14,229.18Z"
+ android:fillColor="#3C4043"/>
+ <path
+ android:pathData="M194.66,149.74C187.64,149.74 182.06,155.32 181.87,162.24L181.49,173.83L175.4,215.77L190.81,218.01L193.58,201.47V217.74H206.44V162.53C206.44,155.51 201.67,149.74 194.65,149.74H194.66Z"
+ android:fillColor="#669DF6"/>
+ <path
+ android:strokeWidth="1"
+ android:pathData="M190.82,218.01L197,176.75V171.64"
+ android:fillColor="#00000000"
+ android:strokeColor="#000000"/>
+ <path
+ android:pathData="M226.47,149.78C226.83,149.39 226.54,148.77 225.61,148.88C225.79,148.81 227.45,149.03 227.38,147.96C227.33,147.48 226.38,147.51 226.17,147.51C226.3,147.51 227.75,147.45 227.55,146.6C227.43,146.05 226.11,146.08 226.24,146.08C226.8,146.08 227.41,145.18 226.92,144.85C226.32,144.45 222.13,144.61 220.98,144.61C221.31,144.54 221.63,144.48 221.95,144.39C222.45,144.23 222.92,144.13 223.33,143.77C223.65,143.47 223.79,142.95 223.37,142.65C223,142.39 222.56,142.63 222.15,142.67C221.89,142.7 221.63,142.71 221.37,142.72C220.77,142.74 220.16,142.76 219.57,142.84C218.33,142.99 217.04,143.38 216.22,144.35C214.29,146.59 214.93,148.88 217.31,149.77C219.16,150.6 224.87,150.87 226.48,149.77V149.79L226.47,149.78Z"
+ android:fillColor="#915A49"/>
+ <path
+ android:pathData="M193.54,124.87L200.85,127.61L198.74,133.23L189.72,131.47L193.54,124.87Z"
+ android:fillColor="#FCC934"/>
+ <path
+ android:pathData="M205.51,124.13C204.96,123.42 205.17,122.88 205.57,121.43C205.61,121.15 205.7,120.95 205.74,120.67C205.51,118.57 202.45,115.76 199.53,114.11C196.55,112.38 193.29,115.02 191.61,117.59C190.01,120.09 190.48,123.64 190.58,123.94C190.89,124.83 191.35,125.75 191.84,126.38C194.21,129.6 198.31,131.48 201.65,130.41C204.99,129.34 205.48,126.05 205.48,126.05C205.54,126.13 205.68,126.15 205.68,126.15C205.77,126.17 205.87,126.18 205.96,126.19C206.04,126.13 206.18,126.15 206.18,126.15C206.26,126.09 206.34,126.03 206.42,125.97C206.71,125.37 206.13,124.94 205.51,124.14V124.13Z"
+ android:fillColor="#A56A53"/>
+ <path
+ android:pathData="M200.59,120.22C202.26,121.07 204.1,121.17 205.8,120.74C205.98,119.34 205.77,117.6 204.71,115.9C203.99,114.81 202.11,113.36 199.77,112.78L199.63,112.76C199.43,112.66 199.21,112.71 199.01,112.61C198.92,112.6 198.82,112.58 198.73,112.57C198.45,112.53 198.31,112.52 198.09,112.56C197.95,112.54 197.81,112.52 197.73,112.59C197.59,112.57 197.37,112.62 197.23,112.59C197.09,112.57 197.01,112.63 196.87,112.62L196.73,112.6C196.29,112.69 195.85,112.77 195.4,113C195.1,113.1 191.69,115.23 188.59,117.26C186.19,118.73 186.37,122.39 188.98,123.65C190.25,124.31 191.77,124.15 192.87,123.29L194.13,122.31C193.67,122.04 193.34,121.78 193.04,121.39C192.73,121 192.59,120.48 192.44,119.96C192.44,119.46 192.43,118.96 192.64,118.42C192.77,117.94 193.11,117.55 193.52,117.11C193.92,116.8 194.37,116.58 194.89,116.43C195.41,116.28 195.91,116.28 196.45,116.49C196.93,116.62 197.4,116.89 197.78,117.23C198.16,117.56 198.39,118.02 198.62,118.48L198.74,118.64C199.03,119.18 199.74,119.76 200.6,120.23L200.59,120.22Z"
+ android:fillColor="#5B3A1C"/>
+ <path
+ android:pathData="M194.25,144.36L199.92,135.27L200.91,137.19C202.76,139.15 202.96,140.84 211.16,141.24L222.49,141.28L222.47,153.25L211.14,153.21C205.12,153.17 199.34,150.66 195.25,146.14L194.25,144.36Z"
+ android:fillColor="#E5B130"/>
+ <path
+ android:pathData="M234.97,144.16L234.88,143.85C234.7,143.22 234.42,142.96 234.24,143.01L223.19,145.56C223.01,145.61 222.92,145.98 223.1,146.61L223.19,146.92C223.37,147.55 223.65,147.81 223.83,147.75L234.88,145.2C235.06,145.15 235.15,144.78 234.97,144.15V144.16Z"
+ android:fillColor="#BDC1C6"/>
+ <path
+ android:pathData="M229.02,151.7C229.3,151.25 228.9,150.69 228.01,150.98C228.17,150.88 229.85,150.79 229.58,149.74C229.45,149.28 228.51,149.48 228.31,149.52C228.44,149.5 229.86,149.17 229.49,148.36C229.26,147.84 227.98,148.12 228.11,148.1C228.66,147.99 229.09,147 228.55,146.77C227.89,146.49 223.8,147.43 222.67,147.64C222.98,147.51 223.29,147.39 223.58,147.24C224.04,146.99 224.48,146.81 224.81,146.37C225.07,146.02 225.11,145.48 224.64,145.27C224.23,145.09 223.84,145.41 223.45,145.52C223.21,145.6 222.95,145.66 222.69,145.71C222.1,145.84 221.51,145.98 220.94,146.17C219.75,146.55 218.56,147.18 217.93,148.28C216.45,150.84 217.5,152.97 220.01,153.4C221.99,153.87 227.65,153.07 229.02,151.68V151.7Z"
+ android:fillColor="#A56A53"/>
+ <path
+ android:pathData="M195.63,130.71C189.53,128.78 182.34,132.99 180.41,139.09C178.57,144.9 181.64,151.11 187.21,153.4L197.79,156.75C201.03,157.78 204.32,157.98 207.51,157.52L221.95,155.28L220.15,143.39L205.61,145.6C205.61,145.6 205.24,145.67 205.03,145.7C204.1,145.85 203.96,145.93 203.27,145.74C205.89,139.16 201.54,132.58 195.63,130.72V130.71Z"
+ android:fillColor="#FCC934"/>
+ <path
+ android:pathData="M281.74,99.83C282.11,100.24 282.08,100.87 281.67,101.24L281.31,101.57C280.9,101.94 280.27,101.91 279.89,101.5C279.52,101.1 279.55,100.46 279.96,100.09L280.33,99.76C280.74,99.39 281.37,99.42 281.74,99.83ZM277.71,103.49C278.08,103.9 278.05,104.53 277.64,104.91L276.91,105.57C276.5,105.94 275.86,105.91 275.49,105.5C275.12,105.1 275.15,104.46 275.56,104.09L276.29,103.43C276.7,103.05 277.33,103.08 277.71,103.49ZM273.31,107.49C273.68,107.9 273.65,108.53 273.24,108.91L272.51,109.57C272.1,109.94 271.46,109.91 271.09,109.5C270.72,109.1 270.75,108.46 271.16,108.09L271.89,107.43C272.3,107.05 272.93,107.08 273.31,107.49ZM268.91,111.49C269.28,111.9 269.25,112.53 268.84,112.91L268.11,113.57C267.7,113.94 267.07,113.91 266.69,113.5C266.32,113.1 266.35,112.46 266.76,112.09L267.49,111.43C267.9,111.05 268.54,111.08 268.91,111.49ZM264.51,115.49C264.88,115.9 264.85,116.53 264.44,116.91L263.71,117.57C263.3,117.94 262.67,117.91 262.29,117.5C261.92,117.1 261.95,116.46 262.36,116.09L263.09,115.43C263.5,115.05 264.14,115.08 264.51,115.49ZM260.11,119.49C260.48,119.9 260.45,120.53 260.04,120.91L259.31,121.57C258.9,121.94 258.27,121.91 257.89,121.5C257.52,121.1 257.55,120.46 257.96,120.09L258.69,119.43C259.1,119.05 259.73,119.08 260.11,119.49ZM255.71,123.49C256.08,123.9 256.05,124.53 255.64,124.91L254.91,125.57C254.5,125.94 253.87,125.91 253.49,125.5C253.12,125.1 253.15,124.46 253.56,124.09L254.29,123.43C254.7,123.05 255.34,123.08 255.71,123.49ZM251.31,127.49C251.68,127.9 251.65,128.53 251.24,128.91L250.51,129.57C250.1,129.94 249.46,129.91 249.09,129.51C248.72,129.1 248.75,128.46 249.16,128.09L249.89,127.43C250.3,127.05 250.93,127.08 251.31,127.49ZM246.91,131.49C247.28,131.9 247.25,132.53 246.84,132.91L246.11,133.57C245.7,133.94 245.07,133.91 244.69,133.51C244.32,133.1 244.35,132.46 244.76,132.09L245.49,131.43C245.9,131.05 246.54,131.09 246.91,131.49ZM242.51,135.49C242.88,135.9 242.85,136.53 242.44,136.91L241.71,137.57C241.3,137.94 240.66,137.91 240.29,137.51C239.92,137.1 239.95,136.46 240.36,136.09L241.09,135.43C241.5,135.05 242.13,135.09 242.51,135.49ZM238.11,139.49C238.48,139.9 238.45,140.53 238.04,140.91L237.67,141.24C237.26,141.61 236.63,141.58 236.26,141.17C235.89,140.76 235.92,140.13 236.33,139.76L236.69,139.43C237.1,139.05 237.74,139.09 238.11,139.49Z"
+ android:fillColor="#EE675C"
+ android:fillType="evenOdd"/>
+</vector>
\ No newline at end of file
diff --git a/res/drawable/account_circle_24dp.xml b/res/drawable/account_circle_24dp.xml
new file mode 100644
index 0000000..50004d9
--- /dev/null
+++ b/res/drawable/account_circle_24dp.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="960"
+ android:viewportHeight="960">
+ <path
+ android:pathData="M234,684q51,-39 114,-61.5T480,600q69,0 132,22.5T726,684q35,-41 54.5,-93T800,480q0,-133 -93.5,-226.5T480,160q-133,0 -226.5,93.5T160,480q0,59 19.5,111t54.5,93ZM480,520q-59,0 -99.5,-40.5T340,380q0,-59 40.5,-99.5T480,240q59,0 99.5,40.5T620,380q0,59 -40.5,99.5T480,520ZM480,880q-83,0 -156,-31.5T197,763q-54,-54 -85.5,-127T80,480q0,-83 31.5,-156T197,197q54,-54 127,-85.5T480,80q83,0 156,31.5T763,197q54,54 85.5,127T880,480q0,83 -31.5,156T763,763q-54,54 -127,85.5T480,880ZM480,800q53,0 100,-15.5t86,-44.5q-39,-29 -86,-44.5T480,680q-53,0 -100,15.5T294,740q39,29 86,44.5T480,800ZM480,440q26,0 43,-17t17,-43q0,-26 -17,-43t-43,-17q-26,0 -43,17t-17,43q0,26 17,43t43,17ZM480,380ZM480,740Z"
+ android:fillColor="#e8eaed"/>
+</vector>
diff --git a/res/drawable/contact_emergency_24dp.xml b/res/drawable/contact_emergency_24dp.xml
new file mode 100644
index 0000000..0f3badc
--- /dev/null
+++ b/res/drawable/contact_emergency_24dp.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="960"
+ android:viewportHeight="960">
+ <path
+ android:pathData="M690,480h60v-68l59,34 30,-52 -59,-34 59,-34 -30,-52 -59,34v-68h-60v68l-59,-34 -30,52 59,34 -59,34 30,52 59,-34v68ZM80,840q-33,0 -56.5,-23.5T0,760v-560q0,-33 23.5,-56.5T80,120h800q33,0 56.5,23.5T960,200v560q0,33 -23.5,56.5T880,840L80,840ZM636,760h244v-560L80,200v560h4q42,-75 116,-117.5T360,600q86,0 160,42.5T636,760ZM360,560q50,0 85,-35t35,-85q0,-50 -35,-85t-85,-35q-50,0 -85,35t-35,85q0,50 35,85t85,35ZM182,760h356q-34,-38 -80.5,-59T360,680q-51,0 -97,21t-81,59ZM360,480q-17,0 -28.5,-11.5T320,440q0,-17 11.5,-28.5T360,400q17,0 28.5,11.5T400,440q0,17 -11.5,28.5T360,480ZM480,480Z"
+ android:fillColor="#e8eaed"/>
+</vector>
diff --git a/res/drawable/satellite_sos_counter_1.xml b/res/drawable/satellite_sos_counter_1.xml
new file mode 100644
index 0000000..14cce3c
--- /dev/null
+++ b/res/drawable/satellite_sos_counter_1.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="960"
+ android:viewportHeight="960">
+ <path
+ android:pathData="M480,880q-83,0 -156,-31.5T197,763q-54,-54 -85.5,-127T80,480q0,-83 31.5,-156T197,197q54,-54 127,-85.5T480,80q83,0 156,31.5T763,197q54,54 85.5,127T880,480q0,83 -31.5,156T763,763q-54,54 -127,85.5T480,880ZM480,800q134,0 227,-93t93,-227q0,-134 -93,-227t-227,-93q-134,0 -227,93t-93,227q0,134 93,227t227,93ZM480,480ZM460,680h80v-400L380,280v80h80v320Z"
+ android:fillColor="#e8eaed"/>
+</vector>
diff --git a/res/drawable/satellite_sos_counter_2.xml b/res/drawable/satellite_sos_counter_2.xml
new file mode 100644
index 0000000..3f59d0b
--- /dev/null
+++ b/res/drawable/satellite_sos_counter_2.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="960"
+ android:viewportHeight="960">
+ <path
+ android:pathData="M480,880q-83,0 -156,-31.5T197,763q-54,-54 -85.5,-127T80,480q0,-83 31.5,-156T197,197q54,-54 127,-85.5T480,80q83,0 156,31.5T763,197q54,54 85.5,127T880,480q0,83 -31.5,156T763,763q-54,54 -127,85.5T480,880ZM480,800q134,0 227,-93t93,-227q0,-134 -93,-227t-227,-93q-134,0 -227,93t-93,227q0,134 93,227t227,93ZM480,480ZM360,680h240v-80L440,600v-80h80q33,0 56.5,-23.5T600,440v-80q0,-33 -23.5,-56.5T520,280L360,280v80h160v80h-80q-33,0 -56.5,23.5T360,520v160Z"
+ android:fillColor="#e8eaed"/>
+</vector>
diff --git a/res/drawable/satellite_sos_counter_3.xml b/res/drawable/satellite_sos_counter_3.xml
new file mode 100644
index 0000000..0b92388
--- /dev/null
+++ b/res/drawable/satellite_sos_counter_3.xml
@@ -0,0 +1,9 @@
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="24dp"
+ android:height="24dp"
+ android:viewportWidth="960"
+ android:viewportHeight="960">
+ <path
+ android:pathData="M480,880q-83,0 -156,-31.5T197,763q-54,-54 -85.5,-127T80,480q0,-83 31.5,-156T197,197q54,-54 127,-85.5T480,80q83,0 156,31.5T763,197q54,54 85.5,127T880,480q0,83 -31.5,156T763,763q-54,54 -127,85.5T480,880ZM480,800q134,0 227,-93t93,-227q0,-134 -93,-227t-227,-93q-134,0 -227,93t-93,227q0,134 93,227t227,93ZM480,480ZM360,680h160q33,0 56.5,-23.5T600,600v-60q0,-26 -17,-43t-43,-17q26,0 43,-17t17,-43v-60q0,-33 -23.5,-56.5T520,280L360,280v80h160v80h-80v80h80v80L360,600v80Z"
+ android:fillColor="#e8eaed"/>
+</vector>
diff --git a/res/drawable/satellite_sos_illustration.xml b/res/drawable/satellite_sos_illustration.xml
new file mode 100644
index 0000000..332b478
--- /dev/null
+++ b/res/drawable/satellite_sos_illustration.xml
@@ -0,0 +1,136 @@
+<?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.
+ -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:tools="http://schemas.android.com/tools"
+ android:width="380dp"
+ android:height="276dp"
+ android:viewportWidth="380"
+ android:viewportHeight="276"
+ tools:ignore="all">
+ <path
+ android:pathData="M28,0L351,0A28,28 0,0 1,379 28L379,248A28,28 0,0 1,351 276L28,276A28,28 0,0 1,0 248L0,28A28,28 0,0 1,28 0z"
+ android:fillColor="#ffffff"/>
+ <path
+ android:pathData="M354.75,228.66H27.08V230.39H354.75V228.66Z"
+ android:fillColor="#E8EAED"/>
+ <path
+ android:pathData="M191.82,54.37C190.76,54.37 189.71,54.38 188.66,54.4L188.63,52.58C189.69,52.56 190.75,52.55 191.82,52.55C192.89,52.55 193.95,52.56 195.02,52.58L194.98,54.4C193.93,54.38 192.87,54.37 191.82,54.37ZM182.37,54.64C180.27,54.76 178.17,54.92 176.09,55.12L175.91,53.3C178.02,53.1 180.13,52.94 182.26,52.81L182.36,54.63L182.37,54.64ZM207.57,55.13C205.49,54.93 203.39,54.77 201.28,54.64L201.38,52.82C203.51,52.94 205.63,53.11 207.74,53.31L207.56,55.13H207.57ZM169.83,55.84C167.74,56.12 165.67,56.44 163.61,56.8L163.3,55C165.38,54.64 167.48,54.31 169.59,54.03L169.83,55.84ZM220.07,56.83C218.01,56.47 215.93,56.14 213.84,55.86L214.09,54.05C216.2,54.34 218.3,54.67 220.39,55.03L220.07,56.83ZM157.43,58.01C155.37,58.45 153.33,58.93 151.3,59.45L150.85,57.68C152.9,57.15 154.97,56.67 157.05,56.22L157.43,58V58.01ZM232.4,59.5C230.37,58.97 228.32,58.49 226.26,58.04L226.65,56.26C228.74,56.71 230.8,57.2 232.86,57.74L232.4,59.51V59.5ZM145.23,61.13C143.21,61.73 141.21,62.37 139.23,63.05L138.64,61.32C140.65,60.64 142.67,59.99 144.71,59.38L145.23,61.13ZM244.49,63.14C242.5,62.46 240.5,61.81 238.48,61.2L239.01,59.45C241.05,60.06 243.08,60.72 245.08,61.41L244.49,63.13V63.14ZM133.31,65.2C131.35,65.96 129.4,66.75 127.48,67.58L126.76,65.9C128.71,65.06 130.67,64.26 132.66,63.5L133.32,65.2H133.31ZM256.25,67.71C254.32,66.87 252.38,66.07 250.41,65.31L251.07,63.61C253.06,64.38 255.02,65.19 256.97,66.04L256.24,67.71H256.25ZM121.75,70.18C119.85,71.09 117.98,72.03 116.12,73L115.27,71.39C117.15,70.4 119.04,69.45 120.96,68.53L121.75,70.18ZM267.62,73.18C265.76,72.2 263.89,71.25 261.99,70.33L262.78,68.69C264.7,69.61 266.6,70.57 268.48,71.57L267.62,73.18ZM110.61,76.04C108.79,77.09 106.99,78.17 105.22,79.29L104.25,77.75C106.05,76.62 107.86,75.52 109.7,74.46L110.61,76.04ZM278.53,79.52C276.76,78.39 274.96,77.3 273.14,76.24L274.06,74.66C275.9,75.73 277.72,76.83 279.51,77.97L278.53,79.51V79.52ZM99.95,82.75C98.22,83.94 96.51,85.16 94.82,86.41L93.73,84.95C95.43,83.68 97.16,82.45 98.91,81.25L99.94,82.76L99.95,82.75ZM288.92,86.68C287.24,85.42 285.53,84.19 283.8,83L284.84,81.5C286.59,82.71 288.32,83.95 290.02,85.22L288.93,86.68H288.92ZM89.84,90.26C88.2,91.58 86.59,92.92 85.01,94.3L83.81,92.92C85.41,91.53 87.04,90.16 88.69,88.83L89.83,90.25L89.84,90.26ZM298.72,94.63C297.14,93.24 295.53,91.89 293.89,90.56L295.04,89.14C296.69,90.48 298.32,91.85 299.92,93.25L298.72,94.62V94.63ZM80.34,98.53C78.81,99.97 77.31,101.44 75.84,102.93L74.54,101.65C76.03,100.14 77.55,98.65 79.09,97.2L80.34,98.53ZM307.89,103.3C306.42,101.8 304.92,100.32 303.39,98.87L304.64,97.55C306.18,99.01 307.7,100.5 309.19,102.02L307.89,103.3ZM71.51,107.5C70.1,109.05 68.71,110.63 67.36,112.24L65.97,111.07C67.34,109.45 68.74,107.85 70.17,106.28L71.52,107.51L71.51,107.5ZM316.36,112.65C315.01,111.04 313.63,109.45 312.21,107.89L313.56,106.67C314.99,108.25 316.39,109.85 317.75,111.48L316.35,112.65H316.36ZM63.39,117.13C62.1,118.78 60.84,120.47 59.62,122.17L58.14,121.11C59.38,119.39 60.65,117.68 61.96,116.01L63.4,117.13H63.39ZM324.09,122.63C322.87,120.92 321.61,119.23 320.32,117.57L321.76,116.45C323.06,118.13 324.33,119.84 325.57,121.57L324.09,122.63ZM56.04,127.36C54.88,129.11 53.76,130.88 52.67,132.68L51.11,131.73C52.21,129.91 53.35,128.12 54.52,126.35L56.04,127.36ZM331.02,133.17C329.93,131.37 328.81,129.59 327.65,127.83L329.17,126.83C330.34,128.61 331.47,130.41 332.57,132.23L331.01,133.17H331.02ZM49.51,138.12C48.49,139.95 47.51,141.81 46.56,143.68L44.93,142.86C45.89,140.96 46.88,139.09 47.91,137.23L49.5,138.11L49.51,138.12ZM337.12,144.21C336.17,142.33 335.19,140.47 334.18,138.63L335.78,137.75C336.81,139.61 337.8,141.49 338.76,143.39L337.13,144.21H337.12ZM43.83,149.36C42.96,151.27 42.12,153.19 41.32,155.14L39.63,154.45C40.44,152.48 41.28,150.54 42.16,148.61L43.82,149.37L43.83,149.36ZM342.35,155.7C341.55,153.75 340.72,151.82 339.85,149.91L341.51,149.15C342.39,151.08 343.23,153.04 344.04,155.01L342.35,155.7ZM39.05,161.01C38.33,162.98 37.65,164.96 37,166.97L35.26,166.41C35.91,164.39 36.6,162.38 37.33,160.39L39.04,161.02L39.05,161.01ZM346.66,167.56C346.02,165.55 345.34,163.56 344.62,161.59L346.33,160.97C347.06,162.96 347.74,164.98 348.39,167.01L346.65,167.57L346.66,167.56ZM35.19,172.99C34.91,174 34.64,175.02 34.37,176.03C34.11,177.04 33.84,178.21 33.56,179.55L31.77,179.18C32.05,177.81 32.33,176.61 32.6,175.57C32.87,174.54 33.14,173.51 33.43,172.49L35.19,172.98V172.99ZM349.28,176.65C349.02,175.63 348.75,174.61 348.46,173.6L350.22,173.11C350.5,174.14 350.78,175.16 351.04,176.2C351.29,177.16 351.55,178.36 351.82,179.77L350.03,180.11C349.77,178.73 349.51,177.56 349.28,176.65ZM32.37,186.71C32.08,188.84 31.81,191.25 31.57,193.94L29.75,193.78C29.99,191.06 30.27,188.63 30.56,186.46L32.37,186.7V186.71ZM352.02,194.33C351.76,191.76 351.47,189.36 351.18,187.19L352.99,186.94C353.29,189.13 353.58,191.55 353.84,194.14L352.02,194.32V194.33ZM31.06,201.21C30.93,203.47 30.83,205.9 30.75,208.5L28.93,208.45C29.01,205.84 29.11,203.4 29.24,201.11L31.06,201.21ZM353.05,208.67C352.94,206.2 352.8,203.8 352.63,201.49L354.45,201.36C354.62,203.68 354.76,206.1 354.87,208.59L353.05,208.67ZM30.61,215.79C30.6,216.98 30.59,218.2 30.59,219.45H28.77C28.77,218.19 28.77,216.97 28.79,215.77L30.61,215.79ZM353.29,219.45C353.29,218.24 353.28,217.04 353.26,215.85L355.08,215.82C355.1,217.02 355.11,218.22 355.11,219.44H353.29V219.45Z"
+ android:fillColor="#E8EAED"
+ android:fillType="evenOdd"/>
+ <path
+ android:pathData="M298.47,120.96C315.85,120.96 329.94,106.87 329.94,89.48C329.94,72.09 315.85,58 298.47,58C281.09,58 267,72.09 267,89.48C267,106.87 281.09,120.96 298.47,120.96Z"
+ android:fillColor="#ffffff"/>
+ <group>
+ <clip-path
+ android:pathData="M322,64H274V112H322V64Z"/>
+ <group>
+ <clip-path
+ android:pathData="M317.2,68.8H278.8V107.2H317.2V68.8Z"/>
+ <path
+ android:pathData="M316.32,88H314.57C314.1,88 313.73,88.37 313.71,88.84C313.29,96.86 306.87,103.4 298.86,103.72C298.39,103.74 298.01,104.1 298.01,104.58V106.12C298.01,106.81 298.42,107.22 298.91,107.19C308.79,106.73 316.74,98.78 317.2,88.9C317.22,88.41 316.81,87.99 316.32,87.99V88Z"
+ android:fillColor="#1A73E8"/>
+ <path
+ android:pathData="M309.14,88C309.83,88 310.25,88.42 310.21,88.92C309.76,94.95 304.94,99.77 298.91,100.22C298.41,100.26 297.99,99.84 297.99,99.34V97.59C297.99,97.12 298.36,96.76 298.82,96.72C303,96.33 306.5,93.03 306.74,88.88C306.77,88.4 307.13,88.01 307.61,88.01H309.14V88Z"
+ android:fillColor="#1A73E8"/>
+ <path
+ android:pathData="M297.38,92.94L293.53,89.09L291.29,91.33L293.45,93.44C294.84,94.8 294.85,97.03 293.48,98.4L290.95,100.94C290.27,101.62 289.37,101.97 288.48,101.97C287.59,101.97 286.69,101.63 286.01,100.94L279.82,94.74C278.47,93.39 278.46,91.21 279.78,89.85L282.17,87.33C282.85,86.62 283.77,86.27 284.68,86.27C285.59,86.27 286.44,86.6 287.12,87.26L289.42,89.51L291.69,87.25L282.91,78.48C282.57,78.14 282.57,77.59 282.91,77.25L287.23,72.93C287.57,72.59 288.12,72.59 288.46,72.93L297.24,81.7L299.46,79.48L297.28,77.3C295.93,75.95 295.92,73.77 297.24,72.41L299.63,69.89C300.31,69.18 301.23,68.83 302.14,68.83C303.05,68.83 303.9,69.16 304.58,69.82L310.91,76.01C312.3,77.37 312.31,79.6 310.94,80.97L308.41,83.51C307.73,84.19 306.83,84.54 305.94,84.54C305.05,84.54 304.15,84.2 303.47,83.51L301.31,81.34L299.09,83.55L302.94,87.4C303.28,87.74 303.28,88.29 302.94,88.63L298.62,92.95C298.28,93.29 297.73,93.29 297.39,92.95L297.38,92.94ZM303.79,78.84L305.33,80.4C305.67,80.74 306.23,80.75 306.57,80.4L307.85,79.11C308.19,78.77 308.19,78.21 307.85,77.87L306.29,76.35L303.8,78.84H303.79ZM300.38,75.39L301.95,76.98L304.41,74.52L302.77,72.92C302.42,72.58 301.86,72.59 301.53,72.95L300.36,74.19C300.04,74.53 300.04,75.07 300.37,75.4L300.38,75.39ZM286.95,91.97L285.31,90.37C284.96,90.03 284.4,90.04 284.07,90.4L282.9,91.64C282.58,91.98 282.58,92.52 282.91,92.85L284.48,94.44L286.95,91.98V91.97ZM290.38,95.32L288.82,93.8L286.33,96.29L287.87,97.85C288.21,98.19 288.77,98.2 289.11,97.85L290.39,96.56C290.73,96.22 290.73,95.66 290.39,95.32H290.38Z"
+ android:fillColor="#1A73E8"/>
+ </group>
+ </group>
+ <path
+ android:pathData="M91.98,229.49H124.82L114.81,215.42H122.02L108.01,195.73L93.59,215.42H100.8L91.99,229.49H91.98Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#E8EAED"/>
+ <path
+ android:pathData="M308.14,193.9H340.98L330.97,179.83H338.18L324.16,160.14L309.74,179.83H316.95L308.14,193.9Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#E8EAED"/>
+ <path
+ android:pathData="M63.7,207.59H75.56V229.49H63.7V207.59Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#E8EAED"/>
+ <path
+ android:pathData="M318.48,194H330.48V229H318.48V194Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#E8EAED"/>
+ <path
+ android:pathData="M240.65,213.97H252.51V229.48H240.65V213.97Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#E8EAED"/>
+ <path
+ android:pathData="M274.39,229.49H311.79L300.39,214.43H308.6L292.64,193.44L276.22,214.43H284.43L274.4,229.49H274.39Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#E8EAED"/>
+ <path
+ android:pathData="M50.93,207.59H88.33L76.93,188.88H85.14L69.18,162.87L52.76,188.88H60.97L50.94,207.59H50.93Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#E8EAED"/>
+ <path
+ android:pathData="M229.7,213.97H262.53L251.13,198H259.34L246.11,177.47L231.52,198H239.73L229.7,213.97Z"
+ android:strokeWidth="1.82"
+ android:fillColor="#00000000"
+ android:strokeColor="#E8EAED"/>
+ <path
+ android:pathData="M216.01,229.18L196.69,229.28C195.34,229.28 194.29,228.22 194.29,226.97V217.35H203.04L217.17,224.18C218.04,224.66 218.61,225.53 218.61,226.58C218.71,227.93 217.55,229.18 216.01,229.18Z"
+ android:fillColor="#34373A"/>
+ <path
+ android:pathData="M197.14,229.18L177.82,229.28C176.47,229.28 175.42,228.22 175.42,226.97L177.65,214.62L186.51,216.34L198.3,224.18C199.17,224.66 199.74,225.53 199.74,226.58C199.84,227.93 198.68,229.18 197.14,229.18Z"
+ android:fillColor="#3C4043"/>
+ <path
+ android:pathData="M194.66,149.74C187.64,149.74 182.06,155.32 181.87,162.24L181.49,173.83L175.4,215.77L190.81,218.01L193.58,201.47V217.74H206.44V162.53C206.44,155.51 201.67,149.74 194.65,149.74H194.66Z"
+ android:fillColor="#1A73E8"/>
+ <path
+ android:strokeWidth="1"
+ android:pathData="M190.82,218.01L197,176.75V171.64"
+ android:fillColor="#00000000"
+ android:strokeColor="#ffffff"/>
+ <path
+ android:pathData="M226.47,149.78C226.83,149.39 226.54,148.77 225.61,148.88C225.79,148.81 227.45,149.03 227.38,147.96C227.33,147.48 226.38,147.51 226.17,147.51C226.3,147.51 227.75,147.45 227.55,146.6C227.43,146.05 226.11,146.08 226.24,146.08C226.8,146.08 227.41,145.18 226.92,144.85C226.32,144.45 222.13,144.61 220.98,144.61C221.31,144.54 221.63,144.48 221.95,144.39C222.45,144.23 222.92,144.13 223.33,143.77C223.65,143.47 223.79,142.95 223.37,142.65C223,142.39 222.56,142.63 222.15,142.67C221.89,142.7 221.63,142.71 221.37,142.72C220.77,142.74 220.16,142.76 219.57,142.84C218.33,142.99 217.04,143.38 216.22,144.35C214.29,146.59 214.93,148.88 217.31,149.77C219.16,150.6 224.87,150.87 226.48,149.77V149.79L226.47,149.78Z"
+ android:fillColor="#915A49"/>
+ <path
+ android:pathData="M193.54,124.87L200.85,127.61L198.74,133.23L189.72,131.47L193.54,124.87Z"
+ android:fillColor="#F9AB00"/>
+ <path
+ android:pathData="M205.51,124.13C204.96,123.42 205.17,122.88 205.57,121.43C205.61,121.15 205.7,120.95 205.74,120.67C205.51,118.57 202.45,115.76 199.53,114.11C196.55,112.38 193.29,115.02 191.61,117.59C190.01,120.09 190.48,123.64 190.58,123.94C190.89,124.83 191.35,125.75 191.84,126.38C194.21,129.6 198.31,131.48 201.65,130.41C204.99,129.34 205.48,126.05 205.48,126.05C205.54,126.13 205.68,126.15 205.68,126.15C205.77,126.17 205.87,126.18 205.96,126.19C206.04,126.13 206.18,126.15 206.18,126.15C206.26,126.09 206.34,126.03 206.42,125.97C206.71,125.37 206.13,124.94 205.51,124.14V124.13Z"
+ android:fillColor="#A56A53"/>
+ <path
+ android:pathData="M200.59,120.22C202.26,121.07 204.1,121.17 205.8,120.74C205.98,119.34 205.77,117.6 204.71,115.9C203.99,114.81 202.11,113.36 199.77,112.78L199.63,112.76C199.43,112.66 199.21,112.71 199.01,112.61C198.92,112.6 198.82,112.58 198.73,112.57C198.45,112.53 198.31,112.52 198.09,112.56C197.95,112.54 197.81,112.52 197.73,112.59C197.59,112.57 197.37,112.62 197.23,112.59C197.09,112.57 197.01,112.63 196.87,112.62L196.73,112.6C196.29,112.69 195.85,112.77 195.4,113C195.1,113.1 191.69,115.23 188.59,117.26C186.19,118.73 186.37,122.39 188.98,123.65C190.25,124.31 191.77,124.15 192.87,123.29L194.13,122.31C193.67,122.04 193.34,121.78 193.04,121.39C192.73,121 192.59,120.48 192.44,119.96C192.44,119.46 192.43,118.96 192.64,118.42C192.77,117.94 193.11,117.55 193.52,117.11C193.92,116.8 194.37,116.58 194.89,116.43C195.41,116.28 195.91,116.28 196.45,116.49C196.93,116.62 197.4,116.89 197.78,117.23C198.16,117.56 198.39,118.02 198.62,118.48L198.74,118.64C199.03,119.18 199.74,119.76 200.6,120.23L200.59,120.22Z"
+ android:fillColor="#5B3A1C"/>
+ <path
+ android:pathData="M194.25,144.36L199.92,135.27L200.91,137.19C202.76,139.15 202.96,140.84 211.16,141.24L222.49,141.28L222.47,153.25L211.14,153.21C205.12,153.17 199.34,150.66 195.25,146.14L194.25,144.36Z"
+ android:fillColor="#E19A00"/>
+ <path
+ android:pathData="M234.97,144.16L234.88,143.85C234.7,143.22 234.42,142.96 234.24,143.01L223.19,145.56C223.01,145.61 222.92,145.98 223.1,146.61L223.19,146.92C223.37,147.55 223.65,147.81 223.83,147.75L234.88,145.2C235.06,145.15 235.15,144.78 234.97,144.15V144.16Z"
+ android:fillColor="#BDC1C6"/>
+ <path
+ android:pathData="M229.02,151.7C229.3,151.25 228.9,150.69 228.01,150.98C228.17,150.88 229.85,150.79 229.58,149.74C229.45,149.28 228.51,149.48 228.31,149.52C228.44,149.5 229.86,149.17 229.49,148.36C229.26,147.84 227.98,148.12 228.11,148.1C228.66,147.99 229.09,147 228.55,146.77C227.89,146.49 223.8,147.43 222.67,147.64C222.98,147.51 223.29,147.39 223.58,147.24C224.04,146.99 224.48,146.81 224.81,146.37C225.07,146.02 225.11,145.48 224.64,145.27C224.23,145.09 223.84,145.41 223.45,145.52C223.21,145.6 222.95,145.66 222.69,145.71C222.1,145.84 221.51,145.98 220.94,146.17C219.75,146.55 218.56,147.18 217.93,148.28C216.45,150.84 217.5,152.97 220.01,153.4C221.99,153.87 227.65,153.07 229.02,151.68V151.7Z"
+ android:fillColor="#A56A53"/>
+ <path
+ android:pathData="M195.63,130.71C189.53,128.78 182.34,132.99 180.41,139.09C178.57,144.9 181.64,151.11 187.21,153.4L197.79,156.75C201.03,157.78 204.32,157.98 207.51,157.52L221.95,155.28L220.15,143.39L205.61,145.6C205.61,145.6 205.24,145.67 205.03,145.7C204.1,145.85 203.96,145.93 203.27,145.74C205.89,139.16 201.54,132.58 195.63,130.72V130.71Z"
+ android:fillColor="#F9AB00"/>
+ <path
+ android:pathData="M281.74,99.83C282.11,100.24 282.08,100.87 281.67,101.24L281.31,101.57C280.9,101.94 280.27,101.91 279.89,101.5C279.52,101.1 279.55,100.46 279.96,100.09L280.33,99.76C280.74,99.39 281.37,99.42 281.74,99.83ZM277.71,103.49C278.08,103.9 278.05,104.53 277.64,104.91L276.91,105.57C276.5,105.94 275.86,105.91 275.49,105.5C275.12,105.1 275.15,104.46 275.56,104.09L276.29,103.43C276.7,103.05 277.33,103.08 277.71,103.49ZM273.31,107.49C273.68,107.9 273.65,108.53 273.24,108.91L272.51,109.57C272.1,109.94 271.46,109.91 271.09,109.5C270.72,109.1 270.75,108.46 271.16,108.09L271.89,107.43C272.3,107.05 272.93,107.08 273.31,107.49ZM268.91,111.49C269.28,111.9 269.25,112.53 268.84,112.91L268.11,113.57C267.7,113.94 267.07,113.91 266.69,113.5C266.32,113.1 266.35,112.46 266.76,112.09L267.49,111.43C267.9,111.05 268.54,111.08 268.91,111.49ZM264.51,115.49C264.88,115.9 264.85,116.53 264.44,116.91L263.71,117.57C263.3,117.94 262.67,117.91 262.29,117.5C261.92,117.1 261.95,116.46 262.36,116.09L263.09,115.43C263.5,115.05 264.14,115.08 264.51,115.49ZM260.11,119.49C260.48,119.9 260.45,120.53 260.04,120.91L259.31,121.57C258.9,121.94 258.27,121.91 257.89,121.5C257.52,121.1 257.55,120.46 257.96,120.09L258.69,119.43C259.1,119.05 259.73,119.08 260.11,119.49ZM255.71,123.49C256.08,123.9 256.05,124.53 255.64,124.91L254.91,125.57C254.5,125.94 253.87,125.91 253.49,125.5C253.12,125.1 253.15,124.46 253.56,124.09L254.29,123.43C254.7,123.05 255.34,123.08 255.71,123.49ZM251.31,127.49C251.68,127.9 251.65,128.53 251.24,128.91L250.51,129.57C250.1,129.94 249.46,129.91 249.09,129.51C248.72,129.1 248.75,128.46 249.16,128.09L249.89,127.43C250.3,127.05 250.93,127.08 251.31,127.49ZM246.91,131.49C247.28,131.9 247.25,132.53 246.84,132.91L246.11,133.57C245.7,133.94 245.07,133.91 244.69,133.51C244.32,133.1 244.35,132.46 244.76,132.09L245.49,131.43C245.9,131.05 246.54,131.09 246.91,131.49ZM242.51,135.49C242.88,135.9 242.85,136.53 242.44,136.91L241.71,137.57C241.3,137.94 240.66,137.91 240.29,137.51C239.92,137.1 239.95,136.46 240.36,136.09L241.09,135.43C241.5,135.05 242.13,135.09 242.51,135.49ZM238.11,139.49C238.48,139.9 238.45,140.53 238.04,140.91L237.67,141.24C237.26,141.61 236.63,141.58 236.26,141.17C235.89,140.76 235.92,140.13 236.33,139.76L236.69,139.43C237.1,139.05 237.74,139.09 238.11,139.49Z"
+ android:fillColor="#D93025"
+ android:fillType="evenOdd"/>
+</vector>
\ No newline at end of file
diff --git a/res/drawable/satellite_sos_quantum_gm_ic_hand_gesture_vd_20.xml b/res/drawable/satellite_sos_quantum_gm_ic_hand_gesture_vd_20.xml
new file mode 100644
index 0000000..2aff18f
--- /dev/null
+++ b/res/drawable/satellite_sos_quantum_gm_ic_hand_gesture_vd_20.xml
@@ -0,0 +1,32 @@
+<?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.
+ -->
+
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:width="20dp"
+ android:height="20dp"
+ android:viewportWidth="20"
+ android:viewportHeight="20"
+ android:tint="?attr/colorControlNormal">
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M4.81,6.31l1.69,-0.81l-1.69,-0.81l-0.81,-1.69l-0.81,1.69l-1.69,0.81l1.69,0.81l0.81,1.69z"/>
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M16,12.05l-0.97,-2.03l-0.98,2.03l-2.02,0.97l2.02,0.98l0.98,2.02l0.97,-2.02l2.03,-0.98z"/>
+ <path
+ android:fillColor="@android:color/white"
+ android:pathData="M8.89,16c-0.28,0 -0.55,-0.12 -0.74,-0.33l-3.17,-3.53l0.56,-0.42L8,13.37c0,0 0,-1.18 0,-7.87C8,5.22 8.22,5 8.5,5S9,5.22 9,5.5C9,5.98 9,10 9,10h1c0,0 0,-0.24 0,-4.5v-1C10,4.22 10.22,4 10.5,4S11,4.22 11,4.5v1c0,0.48 0,-0.29 0,4.5h1c0,-1.14 0,-0.24 0,-4.5C12,5.22 12.22,5 12.5,5S13,5.22 13,5.5v1c0,0.35 0,3.5 0,3.5h1c0,0 0,-0.45 0,-3.5C14,6.22 14.22,6 14.5,6S15,6.22 15,6.5V9h1V6.5C16,5.67 15.33,5 14.5,5c-0.2,0 -0.39,0.04 -0.56,0.11C13.77,4.47 13.19,4 12.5,4c-0.2,0 -0.39,0.04 -0.56,0.11C11.77,3.47 11.19,3 10.5,3S9.23,3.47 9.06,4.11C8.89,4.04 8.7,4 8.5,4C7.67,4 7,4.67 7,5.5V9v2.5l-0.91,-0.61c-0.01,-0.01 -0.58,-0.4 -1.15,0.03L3.5,12l3.9,4.34C7.78,16.76 8.32,17 8.89,17H13l-1,-1H8.89z"/>
+</vector>
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index ea505da..2062f3f 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -12329,12 +12329,41 @@
<!-- Title for notifying user's account be able to use data transmission of Satellite" [CHAR_LIMIT=NONE] -->
<string name="title_have_satellite_data_plan">Use of data is included with your account</string>
<!-- Title for the entry of Satellite SOS [CHAR_LIMIT=NONE] -->
- <string name="title_for_satellite_sos_entry">Satellite SOS</string>
+ <string name="title_for_satellite_sos">Satellite SOS</string>
<!-- Summary for the entry of Satellite SOS [CHAR_LIMIT=NONE] -->
<string name="summary_for_satellite_sos_entry">Message with emergency services when you can\u2019t connect to a mobile or Wi\u2011Fi network</string>
<!-- Keywords for the entry of Satellite SOS [CHAR_LIMIT=NONE] -->
<string name="keywords_satellite_sos">satellite sos, sos</string>
-
+ <!-- Category title of Satellite SOS [CHAR_LIMIT=60] -->
+ <string name="category_title_about_satellite_sos">About Satellite SOS</string>
+ <!-- Desrciption of introduction for Satellite SOS [CHAR_LIMIT=60] -->
+ <string name="satellite_sos_introduction">You can message with emergency services and share your location when you can’t connect to a mobile or Wi-Fi network. This service may not be available at all times in all locations or circumstances.</string>
+ <!-- Description of how it works step 1 for Satellite SOS. [CHAR_LIMIT=200] -->
+ <string name="satellite_sos_how_it_works_step_1">Call or text emergency services</string>
+ <!-- Description of how it works step 2 for Satellite SOS. [CHAR_LIMIT=200] -->
+ <string name="satellite_sos_how_it_works_step_2">Answer questions about the emergency</string>
+ <!-- Description of how it works step 3 for Satellite SOS. [CHAR_LIMIT=200] -->
+ <string name="satellite_sos_how_it_works_step_3">Follow steps to connect to the satellite</string>
+ <!-- Summary of how it works step 1 for Satellite SOS. [CHAR_LIMIT=NONE] -->
+ <string name="satellite_sos_how_it_works_summary_1">If you don’t have a mobile network, you’ll see an option to use Satellite SOS</string>
+ <!-- Summary of how it works step 2 for Satellite SOS. [CHAR_LIMIT=NONE] -->
+ <string name="satellite_sos_how_it_works_summary_2">Send answers to emergency services to get you the right kind of help</string>
+ <!-- Summary of how it works step 3 for Satellite SOS. [CHAR_LIMIT=NONE] -->
+ <string name="satellite_sos_how_it_works_summary_3">Once you’re connected, you can message with emergency services</string>
+ <!-- Title of button to request Satellite SOS demo-->
+ <string name="satellite_sos_try_demo">Try a demo</string>
+ <!-- Description of Footer text for Satellite SOS settings. [CHAR_LIMIT=NONE] -->
+ <string name="satellite_sos_footer_text">When you connect with emergency services by satellite, your name, email, phone number, location, device information (IMEI, language, model, battery level), and emergency contact information are shared with emergency services and satellite service providers.
+ \n\nTo use Satellite SOS, Google Messages must be your default SMS app.
+ \n\nIf automatic network selection is off, it will be turned on, and your device will automatically connect to any network.</string>
+ <!-- Category title of Sharing preferences for Satellite SOS. [CHAR_LIMIT=40] -->
+ <string name="satellite_sos_sharing_preferences_subheader_title">Sharing preferences</string>
+ <!-- Title of emergency contacts for Satellite SOS. [CHAR_LIMIT=200] -->
+ <string name="satellite_sos_sharing_preferences_step_1">Emergency contacts</string>
+ <!-- Title of viewing google contacts for Satellite SOS. [CHAR_LIMIT=200] -->
+ <string name="satellite_sos_sharing_preferences_step_2">Your Google Account</string>
+ <!-- Description of sharing preference for Satellite SOS. [CHAR_LIMIT=200] -->
+ <string name="satellite_sos_sharing_preferences_description">Review or update info that will be shared with emergency services</string>
<!-- Title for Apn settings in mobile network settings [CHAR LIMIT=60] -->
diff --git a/res/xml/mobile_network_settings.xml b/res/xml/mobile_network_settings.xml
index 72acbe0..c5e6d2f 100644
--- a/res/xml/mobile_network_settings.xml
+++ b/res/xml/mobile_network_settings.xml
@@ -220,7 +220,7 @@
<com.android.settingslib.RestrictedPreference
android:key="telephony_satellite_setting_sos_key"
android:persistent="false"
- android:title="@string/title_for_satellite_sos_entry"
+ android:title="@string/title_for_satellite_sos"
android:summary="@string/summary_for_satellite_sos_entry"
settings:keywords="@string/keywords_satellite_setting"
settings:fragment="com.android.settings.network.telephony.SatelliteSettingsSosFragment"
diff --git a/res/xml/satellite_setting_sos.xml b/res/xml/satellite_setting_sos.xml
new file mode 100644
index 0000000..a99ba86
--- /dev/null
+++ b/res/xml/satellite_setting_sos.xml
@@ -0,0 +1,82 @@
+<?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.preference.PreferenceScreen
+ xmlns:android="http://schemas.android.com/apk/res/android"
+ xmlns:settings="http://schemas.android.com/apk/res-auto"
+ android:key="satellite_sos"
+ android:title="@string/title_for_satellite_sos">
+
+ <com.android.settingslib.widget.IllustrationPreference
+ android:key="key_satellite_sos_illustration"
+ android:selectable="false"
+ settings:lottie_rawRes="@drawable/satellite_sos_illustration"
+ settings:searchable="false" />
+
+ <androidx.preference.PreferenceCategory
+ android:title="@string/category_title_about_satellite_sos">
+ <com.android.settingslib.widget.TopIntroPreference
+ android:key="key_satellite_sos_top_intro"
+ android:title="@string/satellite_sos_introduction" />
+ </androidx.preference.PreferenceCategory>
+
+ <androidx.preference.PreferenceCategory
+ android:title="@string/category_title_about_satellite_sos">
+
+ <androidx.preference.Preference
+ android:title="@string/satellite_sos_how_it_works_step_1"
+ android:summary="@string/satellite_sos_how_it_works_summary_1"
+ android:icon="@drawable/satellite_sos_counter_1"/>
+
+ <androidx.preference.Preference
+ android:title="@string/satellite_sos_how_it_works_step_2"
+ android:summary="@string/satellite_sos_how_it_works_summary_2"
+ android:icon="@drawable/satellite_sos_counter_2"/>
+
+ <androidx.preference.Preference
+ android:title="@string/satellite_sos_how_it_works_step_3"
+ android:summary="@string/satellite_sos_how_it_works_summary_3"
+ android:icon="@drawable/satellite_sos_counter_3"/>
+
+ </androidx.preference.PreferenceCategory>
+
+ <com.android.settingslib.widget.ButtonPreference
+ android:title="try a demo"
+ android:icon="@drawable/satellite_sos_quantum_gm_ic_hand_gesture_vd_20"/>
+
+ <androidx.preference.PreferenceCategory
+ android:title="@string/satellite_sos_sharing_preferences_subheader_title">
+ <com.android.settingslib.widget.TopIntroPreference
+ android:title="@string/satellite_sos_sharing_preferences_description"/>
+
+ <androidx.preference.Preference
+ android:title="@string/satellite_sos_sharing_preferences_step_1"
+ android:icon="@drawable/contact_emergency_24dp"/>
+
+ <androidx.preference.Preference
+ android:title="@string/satellite_sos_sharing_preferences_step_2"
+ android:icon="@drawable/account_circle_24dp"/>
+
+ </androidx.preference.PreferenceCategory>
+
+ <com.android.settingslib.widget.FooterPreference
+ android:key="key_satellite_sos_footer"
+ android:title="@string/satellite_sos_footer_text"
+ android:selectable="false"
+ settings:searchable="false"/>
+ />
+</androidx.preference.PreferenceScreen>
\ No newline at end of file
diff --git a/src/com/android/settings/bluetooth/ui/view/DeviceDetailsFragmentFormatter.kt b/src/com/android/settings/bluetooth/ui/view/DeviceDetailsFragmentFormatter.kt
index b093d9c..5ce51de 100644
--- a/src/com/android/settings/bluetooth/ui/view/DeviceDetailsFragmentFormatter.kt
+++ b/src/com/android/settings/bluetooth/ui/view/DeviceDetailsFragmentFormatter.kt
@@ -138,8 +138,14 @@
}
private suspend fun updateLayoutInternal(fragmentType: FragmentTypeModel) {
- val items = viewModel.getItems(fragmentType) ?: return
- val layout = viewModel.getLayout(fragmentType) ?: return
+ val items = viewModel.getItems(fragmentType) ?: run {
+ fragment.setLoading(false, false)
+ return
+ }
+ val layout = viewModel.getLayout(fragmentType) ?: run {
+ fragment.setLoading(false, false)
+ return
+ }
val prefKeyToSettingId =
items
diff --git a/src/com/android/settings/network/SimOnboardingActivity.kt b/src/com/android/settings/network/SimOnboardingActivity.kt
index 8f9cc8f..8d8fcba 100644
--- a/src/com/android/settings/network/SimOnboardingActivity.kt
+++ b/src/com/android/settings/network/SimOnboardingActivity.kt
@@ -56,6 +56,7 @@
import com.android.settings.SidecarFragment
import com.android.settings.network.telephony.SimRepository
import com.android.settings.network.telephony.SubscriptionActionDialogActivity
+import com.android.settings.network.telephony.SubscriptionRepository
import com.android.settings.network.telephony.ToggleSubscriptionDialogActivity
import com.android.settings.network.telephony.requireSubscriptionManager
import com.android.settings.spa.SpaActivity.Companion.startSpaActivity
@@ -79,8 +80,10 @@
import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.catch
import kotlinx.coroutines.flow.conflate
+import kotlinx.coroutines.flow.firstOrNull
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
+import kotlinx.coroutines.withTimeoutOrNull
class SimOnboardingActivity : SpaBaseDialogActivity() {
lateinit var scope: CoroutineScope
@@ -490,31 +493,25 @@
}
}
- suspend fun checkSimIsReadyAndGoNext() {
+ private suspend fun checkSimIsReadyAndGoNext() {
withContext(Dispatchers.Default) {
- val isEnabled = context.requireSubscriptionManager()
- .isSubscriptionEnabled(onboardingService.targetSubId)
- if (!isEnabled) {
- val latch = CountDownLatch(1)
- val receiver = CarrierConfigChangedReceiver(latch)
- try {
- val waitingTimeMillis =
- Settings.Global.getLong(
- context.contentResolver,
- Settings.Global.EUICC_SWITCH_SLOT_TIMEOUT_MILLIS,
- UiccSlotUtil.DEFAULT_WAIT_AFTER_SWITCH_TIMEOUT_MILLIS
- )
- receiver.registerOn(context)
- Log.d(TAG, "Start waiting, waitingTime is $waitingTimeMillis")
- latch.await(waitingTimeMillis, TimeUnit.MILLISECONDS)
- } catch (e: InterruptedException) {
- Thread.currentThread().interrupt()
- Log.e(TAG, "Failed switching to physical slot.", e)
- } finally {
- context.unregisterReceiver(receiver)
- }
- }
- Log.d(TAG, "Sim is ready then go to next")
+ val waitingTimeMillis =
+ Settings.Global.getLong(
+ context.contentResolver,
+ Settings.Global.EUICC_SWITCH_SLOT_TIMEOUT_MILLIS,
+ UiccSlotUtil.DEFAULT_WAIT_AFTER_SWITCH_TIMEOUT_MILLIS,
+ )
+ Log.d(TAG, "Start waiting, waitingTime is $waitingTimeMillis")
+ val isTimeout =
+ withTimeoutOrNull(waitingTimeMillis) {
+ SubscriptionRepository(context)
+ .isSubscriptionEnabledFlow(onboardingService.targetSubId)
+ .firstOrNull { it }
+ } == null
+ Log.d(
+ TAG,
+ if (isTimeout) "Sim is not ready after timeout" else "Sim is ready then go to next",
+ )
callbackListener(CallbackType.CALLBACK_SETUP_NAME)
}
}
diff --git a/src/com/android/settings/network/TetherPreferenceController.kt b/src/com/android/settings/network/TetherPreferenceController.kt
index c36a2382..524eb78 100644
--- a/src/com/android/settings/network/TetherPreferenceController.kt
+++ b/src/com/android/settings/network/TetherPreferenceController.kt
@@ -35,19 +35,35 @@
import com.android.settingslib.Utils
import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle
import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.conflate
+import kotlinx.coroutines.flow.distinctUntilChanged
+import kotlinx.coroutines.flow.flow
+import kotlinx.coroutines.flow.flowOn
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-class TetherPreferenceController(context: Context, key: String) :
- BasePreferenceController(context, key) {
+class TetherPreferenceController(
+ context: Context,
+ key: String,
+ private val tetheredRepository: TetheredRepository = TetheredRepository(context),
+) : BasePreferenceController(context, key) {
- private val tetheredRepository = TetheredRepository(context)
private val tetheringManager = mContext.getSystemService(TetheringManager::class.java)!!
private var preference: Preference? = null
- override fun getAvailabilityStatus() =
- if (TetherUtil.isTetherAvailable(mContext)) AVAILABLE else CONDITIONALLY_UNAVAILABLE
+ private val isTetherAvailableFlow =
+ flow { emit(TetherUtil.isTetherAvailable(mContext)) }
+ .distinctUntilChanged()
+ .conflate()
+ .flowOn(Dispatchers.Default)
+
+ /**
+ * Always returns available here to avoid ANR.
+ * - Actual UI visibility is handled in [onViewCreated].
+ * - Search visibility is handled in [updateNonIndexableKeys].
+ */
+ override fun getAvailabilityStatus() = AVAILABLE
override fun displayPreference(screen: PreferenceScreen) {
super.displayPreference(screen)
@@ -55,6 +71,9 @@
}
override fun onViewCreated(viewLifecycleOwner: LifecycleOwner) {
+ isTetherAvailableFlow.collectLatestWithLifecycle(viewLifecycleOwner) {
+ preference?.isVisible = it
+ }
viewLifecycleOwner.lifecycleScope.launch {
viewLifecycleOwner.repeatOnLifecycle(Lifecycle.State.STARTED) {
getTitleResId()?.let { preference?.setTitle(it) }
@@ -84,6 +103,12 @@
}
}
+ override fun updateNonIndexableKeys(keys: MutableList<String>) {
+ if (!TetherUtil.isTetherAvailable(mContext)) {
+ keys += preferenceKey
+ }
+ }
+
companion object {
@JvmStatic
fun isTetherConfigDisallowed(context: Context?): Boolean =
diff --git a/src/com/android/settings/network/telephony/SatelliteSettingsSosController.java b/src/com/android/settings/network/telephony/SatelliteSettingsSosController.java
new file mode 100644
index 0000000..37866bf
--- /dev/null
+++ b/src/com/android/settings/network/telephony/SatelliteSettingsSosController.java
@@ -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.
+ */
+
+package com.android.settings.network.telephony;
+
+import android.app.Fragment;
+
+public class SatelliteSettingsSosController {
+
+ public SatelliteSettingsSosController(Fragment fragment) {
+ }
+}
diff --git a/src/com/android/settings/network/telephony/SatelliteSettingsSosFragment.java b/src/com/android/settings/network/telephony/SatelliteSettingsSosFragment.java
index 911939a..c0141ac 100644
--- a/src/com/android/settings/network/telephony/SatelliteSettingsSosFragment.java
+++ b/src/com/android/settings/network/telephony/SatelliteSettingsSosFragment.java
@@ -16,11 +16,30 @@
package com.android.settings.network.telephony;
-import com.android.settings.SettingsPreferenceFragment;
+import android.os.UserManager;
-public class SatelliteSettingsSosFragment extends SettingsPreferenceFragment {
+import com.android.settings.R;
+import com.android.settings.dashboard.RestrictedDashboardFragment;
+
+public class SatelliteSettingsSosFragment extends RestrictedDashboardFragment {
+
+
+ public SatelliteSettingsSosFragment() {
+ super(UserManager.DISALLOW_CONFIG_MOBILE_NETWORKS);
+ }
+
@Override
public int getMetricsCategory() {
return 0;
}
+
+ @Override
+ protected int getPreferenceScreenResId() {
+ return R.xml.satellite_setting_sos;
+ }
+
+ @Override
+ protected String getLogTag() {
+ return "";
+ }
}
diff --git a/tests/spa_unit/src/com/android/settings/network/TetherPreferenceControllerTest.kt b/tests/spa_unit/src/com/android/settings/network/TetherPreferenceControllerTest.kt
index 51d2c87..205cfa0 100644
--- a/tests/spa_unit/src/com/android/settings/network/TetherPreferenceControllerTest.kt
+++ b/tests/spa_unit/src/com/android/settings/network/TetherPreferenceControllerTest.kt
@@ -18,6 +18,9 @@
import android.content.Context
import android.net.TetheringManager
+import androidx.lifecycle.testing.TestLifecycleOwner
+import androidx.preference.PreferenceCategory
+import androidx.preference.PreferenceManager
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.dx.mockito.inline.extended.ExtendedMockito
@@ -25,11 +28,15 @@
import com.android.settings.core.BasePreferenceController
import com.android.settingslib.TetherUtil
import com.google.common.truth.Truth.assertThat
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.flow.flowOf
+import kotlinx.coroutines.runBlocking
import org.junit.After
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.MockitoSession
+import org.mockito.kotlin.mock
import org.mockito.quality.Strictness
@RunWith(AndroidJUnit4::class)
@@ -38,7 +45,14 @@
private val context: Context = ApplicationProvider.getApplicationContext()
- private val controller = TetherPreferenceController(context, TEST_KEY)
+ private val mockTetheredRepository =
+ mock<TetheredRepository> { on { tetheredTypesFlow() }.thenReturn(flowOf(emptySet())) }
+
+ private val controller = TetherPreferenceController(context, TEST_KEY, mockTetheredRepository)
+
+ private val preference = PreferenceCategory(context).apply { key = TEST_KEY }
+
+ private val preferenceScreen = PreferenceManager(context).createPreferenceScreen(context)
@Before
fun setUp() {
@@ -49,6 +63,9 @@
.startMocking()
ExtendedMockito.doReturn(true).`when` { TetherUtil.isTetherAvailable(context) }
+
+ preferenceScreen.addPreference(preference)
+ controller.displayPreference(preferenceScreen)
}
@After
@@ -57,21 +74,30 @@
}
@Test
- fun getAvailabilityStatus_whenTetherAvailable() {
- ExtendedMockito.doReturn(true).`when` { TetherUtil.isTetherAvailable(context) }
-
+ fun getAvailabilityStatus_alwaysReturnAvailable() {
val availabilityStatus = controller.availabilityStatus
assertThat(availabilityStatus).isEqualTo(BasePreferenceController.AVAILABLE)
}
@Test
- fun getAvailabilityStatus_whenTetherNotAvailable() {
+ fun onViewCreated_whenTetherAvailable() = runBlocking {
+ ExtendedMockito.doReturn(true).`when` { TetherUtil.isTetherAvailable(context) }
+
+ controller.onViewCreated(TestLifecycleOwner())
+ delay(100)
+
+ assertThat(preference.isVisible).isTrue()
+ }
+
+ @Test
+ fun onViewCreated_whenTetherNotAvailable() = runBlocking {
ExtendedMockito.doReturn(false).`when` { TetherUtil.isTetherAvailable(context) }
- val availabilityStatus = controller.availabilityStatus
+ controller.onViewCreated(TestLifecycleOwner())
+ delay(100)
- assertThat(availabilityStatus).isEqualTo(BasePreferenceController.CONDITIONALLY_UNAVAILABLE)
+ assertThat(preference.isVisible).isFalse()
}
@Test