diff options
337 files changed, 3950 insertions, 1631 deletions
diff --git a/PermissionController/AndroidManifest.xml b/PermissionController/AndroidManifest.xml index 326a7f5d2..50b277eda 100644 --- a/PermissionController/AndroidManifest.xml +++ b/PermissionController/AndroidManifest.xml @@ -262,6 +262,7 @@ android:excludeFromRecents="true" android:exported="true" android:theme="@style/GrantPermissions.FilterTouches" + android:windowSoftInputMode="stateAlwaysHidden|adjustNothing" android:visibleToInstantApps="true" android:inheritShowWhenLocked="true" android:hardwareAccelerated="false" @@ -278,6 +279,7 @@ <activity android:name="com.android.permissioncontroller.permission.ui.v34.PermissionRationaleActivity" android:configChanges="keyboardHidden|screenSize" + android:windowSoftInputMode="stateAlwaysHidden|adjustNothing" android:excludeFromRecents="true" android:exported="false" android:theme="@style/GrantPermissions.FilterTouches" diff --git a/PermissionController/res/drawable-v33/ic_collapse_issues.xml b/PermissionController/res/drawable-v33/ic_collapse_issues.xml new file mode 100644 index 000000000..182371d86 --- /dev/null +++ b/PermissionController/res/drawable-v33/ic_collapse_issues.xml @@ -0,0 +1,25 @@ +<!-- + ~ 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="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:pathData="M16.3934,14.9393L17.3334,13.9993L12.0001,8.666L6.6667,13.9993L7.6068,14.9393L12.0001,10.5527" + android:fillColor="?android:attr/textColorPrimary"/> +</vector>
\ No newline at end of file diff --git a/PermissionController/res/drawable-v33/ic_expand_issues.xml b/PermissionController/res/drawable-v33/ic_expand_issues.xml new file mode 100644 index 000000000..6e64ec38f --- /dev/null +++ b/PermissionController/res/drawable-v33/ic_expand_issues.xml @@ -0,0 +1,25 @@ +<!-- + ~ 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="24dp" + android:height="24dp" + android:viewportWidth="24" + android:viewportHeight="24"> + <path + android:pathData="M7.607,9.059L6.667,9.999L12,15.332L17.333,9.999L16.393,9.059L12,13.445" + android:fillColor="?android:attr/textColorPrimary"/> +</vector>
\ No newline at end of file diff --git a/PermissionController/res/drawable-v33/more_issues_collapse_anim.xml b/PermissionController/res/drawable-v33/more_issues_collapse_anim.xml new file mode 100644 index 000000000..8bac610bf --- /dev/null +++ b/PermissionController/res/drawable-v33/more_issues_collapse_anim.xml @@ -0,0 +1,311 @@ +<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:aapt="http://schemas.android.com/aapt"> + <aapt:attr name="android:drawable"> + <vector + android:width="240dp" + android:height="240dp" + android:viewportWidth="240" + android:viewportHeight="240"> + <group android:name="_R_G"> + <group + android:name="_R_G_L_0_G" + android:translateX="135.511" + android:translateY="123.157"> + <group + android:name="_R_G_L_0_G_D_0_P_0_G_0_T_0" + android:rotation="-45" + android:translateX="-35" + android:translateY="-3.157"> + <path + android:name="_R_G_L_0_G_D_0_P_0" + android:fillAlpha="1" + android:fillColor="?android:attr/textColorPrimary" + android:fillType="nonZero" + android:pathData=" M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 30.36,-6 30.36,-6 C30.36,-6 32.5,-6 32.5,-6c " /> + </group> + <group + android:name="_R_G_L_0_G_D_1_P_0_G_0_T_0" + android:rotation="45" + android:translateX="2.5" + android:translateY="-3.157"> + <path + android:name="_R_G_L_0_G_D_1_P_0" + android:fillAlpha="1" + android:fillColor="?android:attr/textColorPrimary" + android:fillType="nonZero" + android:pathData=" M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -27.84,6 -27.84,6 C-27.84,6 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 -30.39,-6 -30.39,-6 C-30.39,-6 32.5,-6 32.5,-6c " /> + </group> + </group> + </group> + <group android:name="time_group" /> + </vector> + </aapt:attr> + <target android:name="_R_G_L_0_G_D_0_P_0_G_0_T_0"> + <aapt:attr name="android:animation"> + <set android:ordering="together"> + <objectAnimator + android:duration="167" + android:propertyName="rotation" + android:startOffset="0" + android:valueFrom="-45" + android:valueTo="45" + android:valueType="floatType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.2,0 0,1 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + </set> + </aapt:attr> + </target> + <target android:name="_R_G_L_0_G_D_0_P_0"> + <aapt:attr name="android:animation"> + <set android:ordering="together"> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="0" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 30.36,-6 30.36,-6 C30.36,-6 32.5,-6 32.5,-6c " + android:valueTo="M26.11 -4.58 C26.11,-4.58 31.89,5.93 31.89,5.93 C31.89,5.93 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 25.42,-6 25.42,-6 C25.42,-6 26.11,-4.58 26.11,-4.58c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="17" + android:valueFrom="M26.11 -4.58 C26.11,-4.58 31.89,5.93 31.89,5.93 C31.89,5.93 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 25.42,-6 25.42,-6 C25.42,-6 26.11,-4.58 26.11,-4.58c " + android:valueTo="M26.82 -4.74 C26.82,-4.74 31.96,5.93 31.96,5.93 C31.96,5.93 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 25.97,-6 25.97,-6 C25.97,-6 26.82,-4.74 26.82,-4.74c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="33" + android:valueFrom="M26.82 -4.74 C26.82,-4.74 31.96,5.93 31.96,5.93 C31.96,5.93 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 25.97,-6 25.97,-6 C25.97,-6 26.82,-4.74 26.82,-4.74c " + android:valueTo="M27.53 -4.9 C27.53,-4.9 21.59,5.98 21.59,5.98 C21.59,5.98 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 26.52,-6 26.52,-6 C26.52,-6 27.53,-4.9 27.53,-4.9c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="33" + android:propertyName="pathData" + android:startOffset="50" + android:valueFrom="M27.53 -4.9 C27.53,-4.9 21.59,5.98 21.59,5.98 C21.59,5.98 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 26.52,-6 26.52,-6 C26.52,-6 27.53,-4.9 27.53,-4.9c " + android:valueTo="M28.95 -5.21 C28.95,-5.21 26.96,5.75 26.96,5.75 C26.96,5.75 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 27.62,-6 27.62,-6 C27.62,-6 28.95,-5.21 28.95,-5.21c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="83" + android:valueFrom="M28.95 -5.21 C28.95,-5.21 26.96,5.75 26.96,5.75 C26.96,5.75 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 27.62,-6 27.62,-6 C27.62,-6 28.95,-5.21 28.95,-5.21c " + android:valueTo="M29.66 -5.37 C29.66,-5.37 29.2,5.22 29.2,5.22 C29.2,5.22 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 28.16,-6 28.16,-6 C28.16,-6 29.66,-5.37 29.66,-5.37c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="100" + android:valueFrom="M29.66 -5.37 C29.66,-5.37 29.2,5.22 29.2,5.22 C29.2,5.22 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 28.16,-6 28.16,-6 C28.16,-6 29.66,-5.37 29.66,-5.37c " + android:valueTo="M30.37 -5.53 C30.37,-5.53 30.63,4.87 30.63,4.87 C30.63,4.87 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 28.71,-6 28.71,-6 C28.71,-6 30.37,-5.53 30.37,-5.53c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="117" + android:valueFrom="M30.37 -5.53 C30.37,-5.53 30.63,4.87 30.63,4.87 C30.63,4.87 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 28.71,-6 28.71,-6 C28.71,-6 30.37,-5.53 30.37,-5.53c " + android:valueTo="M31.08 -5.68 C31.08,-5.68 31.7,4.9 31.7,4.9 C31.7,4.9 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 29.26,-6 29.26,-6 C29.26,-6 31.08,-5.68 31.08,-5.68c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="133" + android:valueFrom="M31.08 -5.68 C31.08,-5.68 31.7,4.9 31.7,4.9 C31.7,4.9 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 29.26,-6 29.26,-6 C29.26,-6 31.08,-5.68 31.08,-5.68c " + android:valueTo="M31.79 -5.84 C31.79,-5.84 31.71,5.05 31.71,5.05 C31.71,5.05 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 29.81,-6 29.81,-6 C29.81,-6 31.79,-5.84 31.79,-5.84c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="150" + android:valueFrom="M31.79 -5.84 C31.79,-5.84 31.71,5.05 31.71,5.05 C31.71,5.05 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 29.81,-6 29.81,-6 C29.81,-6 31.79,-5.84 31.79,-5.84c " + android:valueTo="M32.5 -6 C32.5,-6 32.37,5.78 32.37,5.78 C32.37,5.78 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 30.36,-6 30.36,-6 C30.36,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + </set> + </aapt:attr> + </target> + <target android:name="_R_G_L_0_G_D_1_P_0_G_0_T_0"> + <aapt:attr name="android:animation"> + <set android:ordering="together"> + <objectAnimator + android:duration="167" + android:propertyName="rotation" + android:startOffset="0" + android:valueFrom="45" + android:valueTo="-45" + android:valueType="floatType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.2,0 0,1 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + </set> + </aapt:attr> + </target> + <target android:name="_R_G_L_0_G_D_1_P_0"> + <aapt:attr name="android:animation"> + <set android:ordering="together"> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="0" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -27.84,6 -27.84,6 C-27.84,6 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 -30.39,-6 -30.39,-6 C-30.39,-6 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -27.29,6.01 -27.29,6.01 C-27.29,6.01 -31.91,6.01 -31.91,6.01 C-31.91,6.01 -25.64,-5.37 -25.64,-5.37 C-25.64,-5.37 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="17" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -27.29,6.01 -27.29,6.01 C-27.29,6.01 -31.91,6.01 -31.91,6.01 C-31.91,6.01 -25.64,-5.37 -25.64,-5.37 C-25.64,-5.37 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -27.29,6.01 -27.29,6.01 C-27.29,6.01 -31.91,6.01 -31.91,6.01 C-31.91,6.01 -25.64,-5.37 -25.64,-5.37 C-25.64,-5.37 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="33" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -27.29,6.01 -27.29,6.01 C-27.29,6.01 -31.91,6.01 -31.91,6.01 C-31.91,6.01 -25.64,-5.37 -25.64,-5.37 C-25.64,-5.37 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -21.36,6.01 -21.36,6.01 C-21.36,6.01 -25.51,2.6 -25.51,2.6 C-25.51,2.6 -25.64,-5.37 -25.64,-5.37 C-25.64,-5.37 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="50" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -21.36,6.01 -21.36,6.01 C-21.36,6.01 -25.51,2.6 -25.51,2.6 C-25.51,2.6 -25.64,-5.37 -25.64,-5.37 C-25.64,-5.37 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -24.02,6.12 -24.02,6.12 C-24.02,6.12 -26.5,2.93 -26.5,2.93 C-26.5,2.93 -26.6,-5.46 -26.6,-5.46 C-26.6,-5.46 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="67" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -24.02,6.12 -24.02,6.12 C-24.02,6.12 -26.5,2.93 -26.5,2.93 C-26.5,2.93 -26.6,-5.46 -26.6,-5.46 C-26.6,-5.46 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -26.4,6.16 -26.4,6.16 C-26.4,6.16 -27.48,3.42 -27.48,3.42 C-27.48,3.42 -27.56,-5.55 -27.56,-5.55 C-27.56,-5.55 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="83" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -26.4,6.16 -26.4,6.16 C-26.4,6.16 -27.48,3.42 -27.48,3.42 C-27.48,3.42 -27.56,-5.55 -27.56,-5.55 C-27.56,-5.55 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -28.01,6.2 -28.01,6.2 C-28.01,6.2 -28.47,3.91 -28.47,3.91 C-28.47,3.91 -28.52,-5.64 -28.52,-5.64 C-28.52,-5.64 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="100" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -28.01,6.2 -28.01,6.2 C-28.01,6.2 -28.47,3.91 -28.47,3.91 C-28.47,3.91 -28.52,-5.64 -28.52,-5.64 C-28.52,-5.64 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -29.36,6.06 -29.36,6.06 C-29.36,6.06 -29.45,4.4 -29.45,4.4 C-29.45,4.4 -29.48,-5.73 -29.48,-5.73 C-29.48,-5.73 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="117" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -29.36,6.06 -29.36,6.06 C-29.36,6.06 -29.45,4.4 -29.45,4.4 C-29.45,4.4 -29.48,-5.73 -29.48,-5.73 C-29.48,-5.73 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -30.54,6 -30.54,6 C-30.54,6 -30.44,4.89 -30.44,4.89 C-30.44,4.89 -30.44,-5.82 -30.44,-5.82 C-30.44,-5.82 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="133" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -30.54,6 -30.54,6 C-30.54,6 -30.44,4.89 -30.44,4.89 C-30.44,4.89 -30.44,-5.82 -30.44,-5.82 C-30.44,-5.82 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -25.85,5.67 -25.85,5.67 C-25.85,5.67 -31.42,5.38 -31.42,5.38 C-31.42,5.38 -31.4,-5.91 -31.4,-5.91 C-31.4,-5.91 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="150" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -25.85,5.67 -25.85,5.67 C-25.85,5.67 -31.42,5.38 -31.42,5.38 C-31.42,5.38 -31.4,-5.91 -31.4,-5.91 C-31.4,-5.91 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -21.36,6.01 -21.36,6.01 C-21.36,6.01 -32.41,5.87 -32.41,5.87 C-32.41,5.87 -32.36,-5.99 -32.36,-5.99 C-32.36,-5.99 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + </set> + </aapt:attr> + </target> + <target android:name="time_group"> + <aapt:attr name="android:animation"> + <set android:ordering="together"> + <objectAnimator + android:duration="183" + android:propertyName="translateX" + android:startOffset="0" + android:valueFrom="0" + android:valueTo="1" + android:valueType="floatType" /> + </set> + </aapt:attr> + </target> +</animated-vector>
\ No newline at end of file diff --git a/PermissionController/res/drawable-v33/more_issues_expand_anim.xml b/PermissionController/res/drawable-v33/more_issues_expand_anim.xml new file mode 100644 index 000000000..048b74a30 --- /dev/null +++ b/PermissionController/res/drawable-v33/more_issues_expand_anim.xml @@ -0,0 +1,267 @@ +<animated-vector xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:aapt="http://schemas.android.com/aapt"> + <aapt:attr name="android:drawable"> + <vector + android:width="240dp" + android:height="240dp" + android:viewportWidth="240" + android:viewportHeight="240"> + <group android:name="_R_G"> + <group + android:name="_R_G_L_0_G" + android:translateX="135.511" + android:translateY="123.157"> + <group + android:name="_R_G_L_0_G_D_0_P_0_G_0_T_0" + android:rotation="45" + android:translateX="-35" + android:translateY="-3.157"> + <path + android:name="_R_G_L_0_G_D_0_P_0" + android:fillAlpha="1" + android:fillColor="?android:attr/textColorPrimary" + android:fillType="nonZero" + android:pathData=" M32.5 -6 C32.5,-6 32.37,5.78 32.37,5.78 C32.37,5.78 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 30.36,-6 30.36,-6 C30.36,-6 32.5,-6 32.5,-6c " /> + </group> + <group + android:name="_R_G_L_0_G_D_1_P_0_G_0_T_0" + android:rotation="-45" + android:translateX="2.5" + android:translateY="-3.157"> + <path + android:name="_R_G_L_0_G_D_1_P_0" + android:fillAlpha="1" + android:fillColor="?android:attr/textColorPrimary" + android:fillType="nonZero" + android:pathData=" M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -21.36,6.01 -21.36,6.01 C-21.36,6.01 -32.41,5.87 -32.41,5.87 C-32.41,5.87 -32.36,-5.99 -32.36,-5.99 C-32.36,-5.99 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " /> + </group> + </group> + </group> + <group android:name="time_group" /> + </vector> + </aapt:attr> + <target android:name="_R_G_L_0_G_D_0_P_0_G_0_T_0"> + <aapt:attr name="android:animation"> + <set android:ordering="together"> + <objectAnimator + android:duration="167" + android:propertyName="rotation" + android:startOffset="0" + android:valueFrom="45" + android:valueTo="-45" + android:valueType="floatType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.2,0 0,1 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + </set> + </aapt:attr> + </target> + <target android:name="_R_G_L_0_G_D_0_P_0"> + <aapt:attr name="android:animation"> + <set android:ordering="together"> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="0" + android:valueFrom="M32.5 -6 C32.5,-6 32.37,5.78 32.37,5.78 C32.37,5.78 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 30.36,-6 30.36,-6 C30.36,-6 32.5,-6 32.5,-6c " + android:valueTo="M31.86 -5.98 C31.86,-5.98 25.7,5.72 25.7,5.72 C25.7,5.72 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 30.36,-6 30.36,-6 C30.36,-6 31.86,-5.98 31.86,-5.98c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="33" + android:propertyName="pathData" + android:startOffset="17" + android:valueFrom="M31.86 -5.98 C31.86,-5.98 25.7,5.72 25.7,5.72 C25.7,5.72 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 30.36,-6 30.36,-6 C30.36,-6 31.86,-5.98 31.86,-5.98c " + android:valueTo="M27.06 -1.54 C27.06,-1.54 27.21,5.79 27.21,5.79 C27.21,5.79 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 21.3,-5.98 21.3,-5.98 C21.3,-5.98 27.06,-1.54 27.06,-1.54c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="50" + android:valueFrom="M27.06 -1.54 C27.06,-1.54 27.21,5.79 27.21,5.79 C27.21,5.79 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 21.3,-5.98 21.3,-5.98 C21.3,-5.98 27.06,-1.54 27.06,-1.54c " + android:valueTo="M26.17 -1.74 C26.17,-1.74 27.97,5.82 27.97,5.82 C27.97,5.82 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 24.54,-5.12 24.54,-5.12 C24.54,-5.12 26.17,-1.74 26.17,-1.74c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="67" + android:valueFrom="M26.17 -1.74 C26.17,-1.74 27.97,5.82 27.97,5.82 C27.97,5.82 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 24.54,-5.12 24.54,-5.12 C24.54,-5.12 26.17,-1.74 26.17,-1.74c " + android:valueTo="M27.22 -2.45 C27.22,-2.45 28.72,5.85 28.72,5.85 C28.72,5.85 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 26.96,-5.01 26.96,-5.01 C26.96,-5.01 27.22,-2.45 27.22,-2.45c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="83" + android:valueFrom="M27.22 -2.45 C27.22,-2.45 28.72,5.85 28.72,5.85 C28.72,5.85 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 26.96,-5.01 26.96,-5.01 C26.96,-5.01 27.22,-2.45 27.22,-2.45c " + android:valueTo="M28.28 -3.16 C28.28,-3.16 29.48,5.88 29.48,5.88 C29.48,5.88 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 28.94,-4.93 28.94,-4.93 C28.94,-4.93 28.28,-3.16 28.28,-3.16c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="100" + android:valueFrom="M28.28 -3.16 C28.28,-3.16 29.48,5.88 29.48,5.88 C29.48,5.88 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 28.94,-4.93 28.94,-4.93 C28.94,-4.93 28.28,-3.16 28.28,-3.16c " + android:valueTo="M29.33 -3.87 C29.33,-3.87 30.23,5.91 30.23,5.91 C30.23,5.91 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 30.46,-4.91 30.46,-4.91 C30.46,-4.91 29.33,-3.87 29.33,-3.87c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="50" + android:propertyName="pathData" + android:startOffset="117" + android:valueFrom="M29.33 -3.87 C29.33,-3.87 30.23,5.91 30.23,5.91 C30.23,5.91 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 30.46,-4.91 30.46,-4.91 C30.46,-4.91 29.33,-3.87 29.33,-3.87c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 30.36,-6 30.36,-6 C30.36,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + </set> + </aapt:attr> + </target> + <target android:name="_R_G_L_0_G_D_1_P_0_G_0_T_0"> + <aapt:attr name="android:animation"> + <set android:ordering="together"> + <objectAnimator + android:duration="167" + android:propertyName="rotation" + android:startOffset="0" + android:valueFrom="-45" + android:valueTo="45" + android:valueType="floatType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.2,0 0,1 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + </set> + </aapt:attr> + </target> + <target android:name="_R_G_L_0_G_D_1_P_0"> + <aapt:attr name="android:animation"> + <set android:ordering="together"> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="0" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -21.36,6.01 -21.36,6.01 C-21.36,6.01 -32.41,5.87 -32.41,5.87 C-32.41,5.87 -32.36,-5.99 -32.36,-5.99 C-32.36,-5.99 -25.47,-6 -25.47,-6 C-25.47,-6 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -22.01,6.01 -22.01,6.01 C-22.01,6.01 -25.12,6.11 -25.12,6.11 C-25.12,6.11 -31.67,-5.94 -31.67,-5.94 C-31.67,-5.94 -25.96,-6 -25.96,-6 C-25.96,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="17" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -22.01,6.01 -22.01,6.01 C-22.01,6.01 -25.12,6.11 -25.12,6.11 C-25.12,6.11 -31.67,-5.94 -31.67,-5.94 C-31.67,-5.94 -25.96,-6 -25.96,-6 C-25.96,-6 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -22.66,6.01 -22.66,6.01 C-22.66,6.01 -26,5.97 -26,5.97 C-26,5.97 -31.77,-5.95 -31.77,-5.95 C-31.77,-5.95 -26.46,-6 -26.46,-6 C-26.46,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="33" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -22.66,6.01 -22.66,6.01 C-22.66,6.01 -26,5.97 -26,5.97 C-26,5.97 -31.77,-5.95 -31.77,-5.95 C-31.77,-5.95 -26.46,-6 -26.46,-6 C-26.46,-6 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -23.31,6.01 -23.31,6.01 C-23.31,6.01 -26.76,6.08 -26.76,6.08 C-26.76,6.08 -21.55,-5.9 -21.55,-5.9 C-21.55,-5.9 -21.18,-5.93 -21.18,-5.93 C-21.18,-5.93 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="50" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -23.31,6.01 -23.31,6.01 C-23.31,6.01 -26.76,6.08 -26.76,6.08 C-26.76,6.08 -21.55,-5.9 -21.55,-5.9 C-21.55,-5.9 -21.18,-5.93 -21.18,-5.93 C-21.18,-5.93 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -23.96,6.01 -23.96,6.01 C-23.96,6.01 -27.58,6.07 -27.58,6.07 C-27.58,6.07 -23.19,-5.85 -23.19,-5.85 C-23.19,-5.85 -23.19,-5.86 -23.19,-5.86 C-23.19,-5.86 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="67" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -23.96,6.01 -23.96,6.01 C-23.96,6.01 -27.58,6.07 -27.58,6.07 C-27.58,6.07 -23.19,-5.85 -23.19,-5.85 C-23.19,-5.85 -23.19,-5.86 -23.19,-5.86 C-23.19,-5.86 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -24.6,6.01 -24.6,6.01 C-24.6,6.01 -28.4,6.06 -28.4,6.06 C-28.4,6.06 -25.62,-5.84 -25.62,-5.84 C-25.62,-5.84 -25.63,-5.85 -25.63,-5.85 C-25.63,-5.85 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="83" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -24.6,6.01 -24.6,6.01 C-24.6,6.01 -28.4,6.06 -28.4,6.06 C-28.4,6.06 -25.62,-5.84 -25.62,-5.84 C-25.62,-5.84 -25.63,-5.85 -25.63,-5.85 C-25.63,-5.85 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -25.25,6 -25.25,6 C-25.25,6 -29.22,6.05 -29.22,6.05 C-29.22,6.05 -27.73,-5.89 -27.73,-5.89 C-27.73,-5.89 -27.72,-5.9 -27.72,-5.9 C-27.72,-5.9 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="17" + android:propertyName="pathData" + android:startOffset="100" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -25.25,6 -25.25,6 C-25.25,6 -29.22,6.05 -29.22,6.05 C-29.22,6.05 -27.73,-5.89 -27.73,-5.89 C-27.73,-5.89 -27.72,-5.9 -27.72,-5.9 C-27.72,-5.9 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -25.9,6 -25.9,6 C-25.9,6 -30.04,6.04 -30.04,6.04 C-30.04,6.04 -29.34,-5.92 -29.34,-5.92 C-29.34,-5.92 -29.34,-5.91 -29.34,-5.91 C-29.34,-5.91 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + <objectAnimator + android:duration="50" + android:propertyName="pathData" + android:startOffset="117" + android:valueFrom="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -25.9,6 -25.9,6 C-25.9,6 -30.04,6.04 -30.04,6.04 C-30.04,6.04 -29.34,-5.92 -29.34,-5.92 C-29.34,-5.92 -29.34,-5.91 -29.34,-5.91 C-29.34,-5.91 32.5,-6 32.5,-6c " + android:valueTo="M32.5 -6 C32.5,-6 32.5,6 32.5,6 C32.5,6 -27.84,6 -27.84,6 C-27.84,6 -32.5,6 -32.5,6 C-32.5,6 -32.5,-6 -32.5,-6 C-32.5,-6 -30.39,-6 -30.39,-6 C-30.39,-6 32.5,-6 32.5,-6c " + android:valueType="pathType"> + <aapt:attr name="android:interpolator"> + <pathInterpolator android:pathData="M 0.0,0.0 c0.167,0.167 0.833,0.833 1.0,1.0" /> + </aapt:attr> + </objectAnimator> + </set> + </aapt:attr> + </target> + <target android:name="time_group"> + <aapt:attr name="android:animation"> + <set android:ordering="together"> + <objectAnimator + android:duration="183" + android:propertyName="translateX" + android:startOffset="0" + android:valueFrom="0" + android:valueTo="1" + android:valueType="floatType" /> + </set> + </aapt:attr> + </target> +</animated-vector>
\ No newline at end of file diff --git a/PermissionController/res/drawable-v33/safety_center_more_issues_card_background.xml b/PermissionController/res/drawable-v33/safety_center_more_issues_card_background.xml index babf1915c..f9020238f 100644 --- a/PermissionController/res/drawable-v33/safety_center_more_issues_card_background.xml +++ b/PermissionController/res/drawable-v33/safety_center_more_issues_card_background.xml @@ -14,8 +14,20 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> +<ripple xmlns:android="http://schemas.android.com/apk/res/android" + android:color="?android:colorControlHighlight"> -<shape xmlns:android="http://schemas.android.com/apk/res/android"> - <solid android:color="?attr/colorSurface" /> - <corners android:radius="20dp"/> -</shape>
\ No newline at end of file + <item> + <shape android:shape="rectangle"> + <corners android:radius="@dimen/sc_card_corner_radius_medium" /> + <solid android:color="?attr/colorSurface" /> + </shape> + </item> + + <item android:id="@android:id/mask"> + <shape android:shape="rectangle"> + <corners android:radius="@dimen/sc_card_corner_radius_medium" /> + <solid android:color="#FFFF" /> + </shape> + </item> +</ripple> diff --git a/PermissionController/res/layout-v33/preference_issue_card.xml b/PermissionController/res/layout-v33/preference_issue_card.xml index 07ce06810..e4a195478 100644 --- a/PermissionController/res/layout-v33/preference_issue_card.xml +++ b/PermissionController/res/layout-v33/preference_issue_card.xml @@ -71,15 +71,16 @@ android:text="@string/safety_center_resolved_issue_fallback" style="@style/SafetyCenterIssueCardResolvedTitle" /> - <!-- This group doesn't contain issue_card_subtitle or issue_card_protected_by_android since - the version of ConstraintLayout we're using doesn't allow us to override the group's - visibility on individual group members. See b/242705351 for context. --> + <!-- This group doesn't contain issue_card_dismiss_btn, issue_card_subtitle or + issue_card_protected_by_android since the version of ConstraintLayout we're + using doesn't allow us to override the group's visibility on individual group + members. See b/242705351 for context. --> <androidx.constraintlayout.widget.Group android:id="@+id/default_issue_content" android:layout_width="wrap_content" android:layout_height="wrap_content" android:visibility="visible" - app:constraint_referenced_ids="issue_card_dismiss_btn,issue_card_title,issue_card_summary,issue_card_action_button_list" /> + app:constraint_referenced_ids="issue_card_title,issue_card_summary,issue_card_action_button_list" /> <androidx.constraintlayout.widget.Group android:id="@+id/resolved_issue_content" diff --git a/PermissionController/res/layout-v33/preference_more_issues_card.xml b/PermissionController/res/layout-v33/preference_more_issues_card.xml index 6a4ce31cc..c93125762 100644 --- a/PermissionController/res/layout-v33/preference_more_issues_card.xml +++ b/PermissionController/res/layout-v33/preference_more_issues_card.xml @@ -14,26 +14,7 @@ ~ limitations under the License. --> -<androidx.constraintlayout.widget.ConstraintLayout +<com.android.permissioncontroller.safetycenter.ui.view.MoreIssuesHeaderView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/issue_card" - android:clickable="false" - style="@style/SafetyCenterMoreIssues"> - - <ImageView - android:id="@+id/status_icon" - android:importantForAccessibility="no" - android:src="@drawable/safety_status_info" - style="@style/SafetyCenterMoreIssuesIcon"/> - - <TextView - android:id="@+id/title" - android:text="@string/safety_center_more_issues_card_title" - style="@style/SafetyCenterMoreIssuesTitle"/> - - <LinearLayout - android:id="@android:id/widget_frame" - style="@style/SafetyCenterMoreIssuesWidgetFrame" - android:importantForAccessibility="noHideDescendants"/> - -</androidx.constraintlayout.widget.ConstraintLayout>
\ No newline at end of file + style="@style/SafetyCenterMoreIssuesCollapsed"/> diff --git a/PermissionController/res/layout-v33/view_more_issues.xml b/PermissionController/res/layout-v33/view_more_issues.xml new file mode 100644 index 000000000..e1db725ad --- /dev/null +++ b/PermissionController/res/layout-v33/view_more_issues.xml @@ -0,0 +1,45 @@ +<!-- + ~ 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. + --> + +<merge xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:tools="http://schemas.android.com/tools" + tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"> + + <ImageView + android:id="@+id/status_icon" + android:importantForAccessibility="no" + android:src="@drawable/safety_status_info" + style="@style/SafetyCenterMoreIssuesIcon"/> + + <TextView + android:id="@+id/title" + style="@style/SafetyCenterMoreIssuesTitle"/> + + <LinearLayout + android:id="@android:id/widget_frame" + style="@style/SafetyCenterMoreIssuesCounter"> + + <TextView + android:id="@+id/widget_title" + style="@style/SafetyCenterMoreIssuesWidgetTitle" /> + + <ImageView + android:id="@+id/widget_icon" + android:importantForAccessibility="no" + style="@style/SafetyCenterMoreIssuesWidgetIcon" /> + + </LinearLayout> +</merge>
\ No newline at end of file diff --git a/PermissionController/res/layout-v33/preference_expand_more_issues_widget.xml b/PermissionController/res/layout-v34/app_data_sharing_details_preference.xml index a8e9873b2..32654e577 100644 --- a/PermissionController/res/layout-v33/preference_expand_more_issues_widget.xml +++ b/PermissionController/res/layout-v34/app_data_sharing_details_preference.xml @@ -1,6 +1,5 @@ -<?xml version="1.0" encoding="utf-8"?> -<!-- - ~ Copyright (C) 2022 The Android Open Source Project +<?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. @@ -14,16 +13,20 @@ ~ See the License for the specific language governing permissions and ~ limitations under the License. --> -<androidx.constraintlayout.widget.ConstraintLayout + + +<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" - android:id="@+id/widget" - android:clickable="false" - style="@style/SafetyCenterMoreIssuesWidget"> + style="@style/AppDataSharingDetailsContainer"> + <TextView - android:id="@+id/widget_title" - style="@style/SafetyCenterMoreIssuesWidgetTitle" /> - <ImageView - android:id="@+id/widget_icon" - android:src="@drawable/ic_expand_more" - style="@style/SafetyCenterMoreIssuesWidgetIcon" /> -</androidx.constraintlayout.widget.ConstraintLayout> + android:id="@+id/info_message" + android:text="@string/data_sharing_updates_subtitle" + style="@style/AppDataSharingDetailsMessage"/> + + <TextView + android:id="@+id/no_updates_message" + android:text="@string/no_updates_at_this_time" + style="@style/AppDataSharingNoUpdatesMessage" /> + +</LinearLayout>
\ No newline at end of file diff --git a/PermissionController/res/layout/app_permission.xml b/PermissionController/res/layout/app_permission.xml index 8341102a3..81b6eea5e 100644 --- a/PermissionController/res/layout/app_permission.xml +++ b/PermissionController/res/layout/app_permission.xml @@ -103,7 +103,7 @@ <RadioButton android:id="@+id/select_photos_radio_button" - android:text="@string/app_permission_button_select_photos" + android:text="@string/app_permission_button_ask" style="@style/AppPermissionRadioButton" /> <RadioButton diff --git a/PermissionController/res/values-af-v33/strings.xml b/PermissionController/res/values-af-v33/strings.xml index d07026361..9d216b981 100644 --- a/PermissionController/res/values-af-v33/strings.xml +++ b/PermissionController/res/values-af-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lys. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Handelinge word benodig. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Lysitem. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Sien alle opletberigte"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Vou uit om nog een waarskuwing te sien}other{Vou uit om nog # waarskuwings te sien}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Waarskuwing. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Waarskuwing. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-af/strings.xml b/PermissionController/res/values-af/strings.xml index dfeb76343..b9bfa7efa 100644 --- a/PermissionController/res/values-af/strings.xml +++ b/PermissionController/res/values-af/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Wys ’n boodskap wanneer programme toegang het tot teks, prente of ander inhoud wat jy gekopieer het"</string> <string name="show_password_title" msgid="2877269286984684659">"Wys wagwoorde"</string> <string name="show_password_summary" msgid="1110166488865981610">"Wys karakters kortliks terwyl jy tik"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Hierdie app het verklaar dat dit dalk liggingdata met derde party sal deel"</string> </resources> diff --git a/PermissionController/res/values-am-v33/strings.xml b/PermissionController/res/values-am-v33/strings.xml index da9a074bc..8d5dbb6a1 100644 --- a/PermissionController/res/values-am-v33/strings.xml +++ b/PermissionController/res/values-am-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"ዝርዝር። <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>። እርምጃዎች ያስፈልጋሉ። <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"የዝርዝር ንጥል። <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>። <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>። <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"ሁሉንም ማንቂያዎች ይመልከቱ"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{ይዘርጉ እና አንድ ተጨማሪ ማንቂያ ይመልከቱ}one{ይዘርጉ እና # ተጨማሪ ማንቂያ ይመልከቱ}other{ይዘርጉ እና # ተጨማሪ ማንቂያዎችን ይመልከቱ}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"ማንቂያ። <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>። <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"ማንቂያ። <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>። <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>። <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-am/strings.xml b/PermissionController/res/values-am/strings.xml index 801db139b..cda973561 100644 --- a/PermissionController/res/values-am/strings.xml +++ b/PermissionController/res/values-am/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"መተግበሪያዎች ጽሑፍን፣ ምስሎችን ወይም እርስዎ የቀዱትን ሌላ ይዘት ሲደርሱ መልዕክት አሳይ"</string> <string name="show_password_title" msgid="2877269286984684659">"የይለፍ ቃላትን አሳይ"</string> <string name="show_password_summary" msgid="1110166488865981610">"እርስዎ በሚተይቡበት ጊዜ ቁምፊዎችን በአጭሩ ያሳይ"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"ይህ መተግበሪያ የአካባቢ ውሂብን ከሦስተኛ ወገኖች ጋር ሊያጋራ እንደሚችል ገልጿል"</string> </resources> diff --git a/PermissionController/res/values-ar-v33/strings.xml b/PermissionController/res/values-ar-v33/strings.xml index 07e955253..11975d227 100644 --- a/PermissionController/res/values-ar-v33/strings.xml +++ b/PermissionController/res/values-ar-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"قائمة <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. مطلوب اتخاذ إجراءات. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"عنصر قائمة <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"عرض كل التنبيهات"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{التوسيع لعرض تنبيه واحد إضافي}zero{التوسيع لعرض # تنبيه إضافي}two{التوسيع لعرض تنبيهين إضافيَين}few{التوسيع لعرض # تنبيهات إضافية}many{التوسيع لعرض # تنبيهًا إضافيًا}other{التوسيع لعرض # تنبيه إضافي}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"تنبيه <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"تنبيه <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g> <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-ar/strings.xml b/PermissionController/res/values-ar/strings.xml index 9e7ff708d..0b889ad89 100644 --- a/PermissionController/res/values-ar/strings.xml +++ b/PermissionController/res/values-ar/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"عرض رسالة عندما يصل التطبيق إلى نص أو صور أو محتوى آخر تم نسخه."</string> <string name="show_password_title" msgid="2877269286984684659">"عرض كلمات المرور"</string> <string name="show_password_summary" msgid="1110166488865981610">"عرض الأحرف لفترة وجيزة أثناء الكتابة"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"وضَّح هذا التطبيق أنه يمكنه مشاركة بيانات الموقع الجغرافي مع جهات خارجية."</string> </resources> diff --git a/PermissionController/res/values-as-v33/strings.xml b/PermissionController/res/values-as-v33/strings.xml index 36572c818..d4c4f13b1 100644 --- a/PermissionController/res/values-as-v33/strings.xml +++ b/PermissionController/res/values-as-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"সূচী। <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>। কার্য কৰাৰ আৱশ্যক। <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"সূচীৰ বস্তু। <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>। <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>। <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"আটাইবোৰ সতৰ্কবাৰ্তা চাওক"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{বিস্তাৰ কৰক আৰু এটা সতৰ্কবাৰ্তা চাওক}one{বিস্তাৰ কৰক আৰু # টা সতৰ্কবাৰ্তা চাওক}other{বিস্তাৰ কৰক আৰু # টা সতৰ্কবাৰ্তা চাওক}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"সতৰ্কতা। <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>। <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"সতৰ্কতা। <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>। <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>। <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-as/strings.xml b/PermissionController/res/values-as/strings.xml index bb89121d3..00146ec59 100644 --- a/PermissionController/res/values-as/strings.xml +++ b/PermissionController/res/values-as/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"এপে আপুনি প্ৰতিলিপি কৰা পাঠ, প্ৰতিচ্ছবি অথবা অন্য সমল এক্সেছ কৰিলে এটা বাৰ্তা দেখুৱাওক"</string> <string name="show_password_title" msgid="2877269286984684659">"পাছৱৰ্ডবোৰ দেখুৱাওক"</string> <string name="show_password_summary" msgid="1110166488865981610">"আপুনি টাইপ কৰাৰ লগে লগে বৰ্ণসমূহ খন্তেকৰ বাবে দেখুৱাওক"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"এই এপ্টোৱে তৃতীয় পক্ষৰ সৈতে অৱস্থানৰ ডেটা শ্বেয়াৰ কৰিব পাৰে বুলি জনাইছে"</string> </resources> diff --git a/PermissionController/res/values-az-v33/strings.xml b/PermissionController/res/values-az-v33/strings.xml index 7eb8186c8..8d562bc22 100644 --- a/PermissionController/res/values-az-v33/strings.xml +++ b/PermissionController/res/values-az-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Siyahı. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Əməliyyat tələb olunur. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Siyahı elementi. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Bütün siqnallara baxın"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Genişləndirin və daha bir xəbərdarlığa baxın}other{Genişləndirin və daha # xəbərdarlığa baxın}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Siqnal. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Siqnal. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-az/strings.xml b/PermissionController/res/values-az/strings.xml index 67c49f0b0..b054fe8c8 100644 --- a/PermissionController/res/values-az/strings.xml +++ b/PermissionController/res/values-az/strings.xml @@ -350,7 +350,7 @@ <string name="accessibility_service_dialog_title_multiple" msgid="5527879210683548175">"<xliff:g id="NUM_SERVICES">%s</xliff:g> əlçatımlıq tətbiqinin cihaza tam girişi var"</string> <string name="accessibility_service_dialog_bottom_text_single" msgid="1128666197822205958">"<xliff:g id="SERVICE_NAME">%s</xliff:g> ekran, əməliyyat və daxiletməyə baxa, əməliyyatlar icra edə və displeyə nəzarət edə bilər."</string> <string name="accessibility_service_dialog_bottom_text_multiple" msgid="7009848932395519852">"Bu tətbiqlər ekran, əməliyyat və daxiletməyə baxa, əməliyyatlar icra edə və displeyə nəzarət edə bilər."</string> - <string name="role_assistant_label" msgid="4727586018198208128">"Standart rəqəmsal assistent"</string> + <string name="role_assistant_label" msgid="4727586018198208128">"Defolt rəq. assistent"</string> <string name="role_assistant_short_label" msgid="3369003713187703399">"Rəq. assistent tətbiqi"</string> <string name="role_assistant_description" msgid="6622458130459922952">"Köməkçi tətbiqlər ekrandakı məlumatı istifadə edə bilər. Rahat olmaları üçün onlardan bəziləri digər tətbiqlərin işə salınmasını və səsli əmr funksiyasını dəstəkləyir."</string> <string name="role_browser_label" msgid="2877796144554070207">"Defolt brauzer tətbiqi"</string> @@ -360,13 +360,13 @@ <string name="role_browser_request_description" msgid="5888803407905985941">"İcazəyə ehtiyac yoxdur"</string> <string name="role_dialer_label" msgid="1100224146343237968">"Defolt telefon tətbiqi"</string> <string name="role_dialer_short_label" msgid="7186888549465352489">"Telefon tətbiqi"</string> - <string name="role_dialer_description" msgid="8768708633696539612">"Cihazda telefon zəngləri qəbul etməyinizə icazə verən tətbiqlər"</string> + <string name="role_dialer_description" msgid="8768708633696539612">"Zəngləri qəbul etməyə və onlara cavab verməyə icazə verən tətbiqlər"</string> <string name="role_dialer_request_title" msgid="5959618560705912058">"<xliff:g id="APP_NAME">%1$s</xliff:g> defolt telefon tətbiqi olaraq ayarlansın?"</string> <string name="role_dialer_request_description" msgid="6288839625724909320">"Bu tətbiqə Kamera, Kontaktlar, Mikrofon, Telefon və SMS-ə giriş icazəsi veriləcək"</string> <string name="role_dialer_search_keywords" msgid="3324448983559188087">"nömrə yığan"</string> <string name="role_sms_label" msgid="8456999857547686640">"Defolt SMS tətbiqi"</string> <string name="role_sms_short_label" msgid="4371444488034692243">"SMS tətbiqi"</string> - <string name="role_sms_description" msgid="3424020199148153513">"Telefon nömrəsini istifadə etməklə mesaj, foto, video və digər məlumatları göndərən tətbiqlər."</string> + <string name="role_sms_description" msgid="3424020199148153513">"Telefon nömrəsi vasitəsilə mesaj, foto, video və digər məlumatları göndərən tətbiqlər"</string> <string name="role_sms_request_title" msgid="7953552109601185602">"<xliff:g id="APP_NAME">%1$s</xliff:g> defolt SMS tətbiqi olaraq ayarlansın?"</string> <string name="role_sms_request_description" msgid="2691004766132144886">"Bu tətbiqə Kamera, Kontaktlar, Fayllar və sənədlər, Mikrofon, Telefon və SMS-ə giriş icazəsi veriləcək"</string> <string name="role_sms_search_keywords" msgid="8022048144395047352">"mətn mesajı, mətn yazmaq, mesajlar, mesaj yazmaq"</string> @@ -514,7 +514,7 @@ <string name="privdash_label_microphone" msgid="8415035835803511693">"Mikrofon"</string> <string name="privdash_label_location" msgid="6882400763866489291">"Məkan"</string> <string name="privdash_label_other" msgid="3710394147423236033">"Digər"</string> - <string name="privdash_label_none" msgid="5991866260360484858">"Heç bir"</string> + <string name="privdash_label_none" msgid="5991866260360484858">"Heç biri"</string> <string name="privdash_label_24h" msgid="1512532123865375319">"Ötən\n24 saat"</string> <string name="privdash_label_7d" msgid="5645301995348656931">"Son\n7 gün"</string> <string name="exempt_mic_camera_info_label" msgid="6273581737010902815">"<xliff:g id="APP_NAME">%1$s</xliff:g> Android tərəfindən qorunur. Məlumatlarınız bu cihazda işləndiyinə görə bu tətbiqin icazə istifadəsi status panelində və ya məxfilik panelinizdə göstərilmir."</string> diff --git a/PermissionController/res/values-b+sr+Latn-v33/strings.xml b/PermissionController/res/values-b+sr+Latn-v33/strings.xml index 1c6c322f8..e2da9ec7b 100644 --- a/PermissionController/res/values-b+sr+Latn-v33/strings.xml +++ b/PermissionController/res/values-b+sr+Latn-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lista: <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Treba da reagujete. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Stavka liste. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Prikaži sva obaveštenja"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Proširite i vidite još jedno obaveštenje}one{Proširite i vidite još # obaveštenje}few{Proširite i vidite još # obaveštenja}other{Proširite i vidite još # obaveštenja}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Obaveštenje. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Obaveštenje. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-b+sr+Latn/strings.xml b/PermissionController/res/values-b+sr+Latn/strings.xml index 162585cf3..813b9a16f 100644 --- a/PermissionController/res/values-b+sr+Latn/strings.xml +++ b/PermissionController/res/values-b+sr+Latn/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Prikazuje poruku kada aplikacije pristupaju tekstu, slikama ili drugom sadržaju koji ste kopirali"</string> <string name="show_password_title" msgid="2877269286984684659">"Prikazuj lozinke"</string> <string name="show_password_summary" msgid="1110166488865981610">"Prikazuje znakove nakratko dok kucate"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Ova aplikacija navodi da može da deli podatke sa trećim stranama"</string> </resources> diff --git a/PermissionController/res/values-be-v33/strings.xml b/PermissionController/res/values-be-v33/strings.xml index e51dcdde5..7bf6f63a0 100644 --- a/PermissionController/res/values-be-v33/strings.xml +++ b/PermissionController/res/values-be-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Спіс. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Патрабуюцца дзеянні. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Элемент спіса. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Праглядзець усе абвесткі"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Разгарніце, каб убачыць яшчэ адну абвестку}one{Разгарніце, каб убачыць яшчэ # абвестку}few{Разгарніце, каб убачыць яшчэ # абвесткі}many{Разгарніце, каб убачыць яшчэ # абвестак}other{Разгарніце, каб убачыць яшчэ # абвесткі}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Абвестка. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Абвестка. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-be/strings.xml b/PermissionController/res/values-be/strings.xml index 32af7103a..1db3fef72 100644 --- a/PermissionController/res/values-be/strings.xml +++ b/PermissionController/res/values-be/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Паказваць паведамленне, калі праграмы атрымліваюць доступ да тэксту, відарысаў ці іншага змесціва, якое вы скапіравалі"</string> <string name="show_password_title" msgid="2877269286984684659">"Паказваць паролі"</string> <string name="show_password_summary" msgid="1110166488865981610">"Падчас уводу сімвалаў на кароткі час паказваць іх"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Гэта праграма можа абагульваць даныя пра месцазнаходжанне з трэцімі бакамі"</string> </resources> diff --git a/PermissionController/res/values-bg-v33/strings.xml b/PermissionController/res/values-bg-v33/strings.xml index 7ff24e444..cc498115f 100644 --- a/PermissionController/res/values-bg-v33/strings.xml +++ b/PermissionController/res/values-bg-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Списък. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Необходимо е действие. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Списъчен елемент. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Преглед на всички сигнали"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Разгънете и вижте още един сигнал}other{Разгънете и вижте още # сигнала}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Сигнал. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Сигнал. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-bg/strings.xml b/PermissionController/res/values-bg/strings.xml index 3b663450e..369c04211 100644 --- a/PermissionController/res/values-bg/strings.xml +++ b/PermissionController/res/values-bg/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Показване на съобщение, когато приложенията осъществяват достъп до копирани от вас текст, изображения или друго съдържание"</string> <string name="show_password_title" msgid="2877269286984684659">"Показване на паролите"</string> <string name="show_password_summary" msgid="1110166488865981610">"Кратко показване на знаците, докато пишете"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Това приложение посочи, че може да споделя с трети страни данни за местоположението"</string> </resources> diff --git a/PermissionController/res/values-bn-v33/strings.xml b/PermissionController/res/values-bn-v33/strings.xml index f3f9c2424..ac9b55644 100644 --- a/PermissionController/res/values-bn-v33/strings.xml +++ b/PermissionController/res/values-bn-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"তালিকা। <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>। ব্যবস্থা নিতে হবে। <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"আইটেম তালিকাভুক্ত করুন। <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>। <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"সব সতর্কতা দেখুন"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{বড় করুন ও আরও একটি সতর্কতা দেখুন}one{বড় করুন ও আরও #টি সতর্কতা দেখুন}other{বড় করুন ও আরও #টি সতর্কতা দেখুন}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"সতর্কতা। <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>। <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"সতর্কতা। <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>। <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>। <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-bs-v33/strings.xml b/PermissionController/res/values-bs-v33/strings.xml index 949c2eb14..15ad5f948 100644 --- a/PermissionController/res/values-bs-v33/strings.xml +++ b/PermissionController/res/values-bs-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lista. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Potrebne su radnje. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Stavka liste. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Pregledajte sva upozorenja"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Proširite i vidite još jedno upozorenje}one{Proširite i vidite još # upozorenje}few{Proširite i vidite još # upozorenja}other{Proširite i vidite još # upozorenja}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Upozorenje. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Upozorenje. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-ca-v33/strings.xml b/PermissionController/res/values-ca-v33/strings.xml index 6f7ae6fc1..6acf69cb6 100644 --- a/PermissionController/res/values-ca-v33/strings.xml +++ b/PermissionController/res/values-ca-v33/strings.xml @@ -27,8 +27,9 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Llista. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Accions necessàries. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Element de llista. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>."</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Mostra totes les alertes"</string> - <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Desplega i consulta 1 alerta més}many{Expand and see # more alerts}other{Desplega i consulta # alertes més}}"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> + <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Desplega i consulta 1 alerta més}many{Desplega i consulta # alertes més}other{Desplega i consulta # alertes més}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>."</string> <string name="safety_center_resolved_issue_fallback" msgid="8548932070610766651">"Acció completa"</string> diff --git a/PermissionController/res/values-ca/strings.xml b/PermissionController/res/values-ca/strings.xml index 8b2879a4a..0afe6d969 100644 --- a/PermissionController/res/values-ca/strings.xml +++ b/PermissionController/res/values-ca/strings.xml @@ -67,7 +67,7 @@ <string name="auto_permission_manager_summary" msgid="9157438376234301354">"Gestiona l\'accés a les dades del calendari, dels registres de trucades i més"</string> <string name="granted_permission_decision" msgid="7824827491551861365">"Has concedit a <xliff:g id="APP_NAME">%1$s</xliff:g> l\'accés a <xliff:g id="PERMISSION_NAME">%2$s</xliff:g>"</string> <string name="denied_permission_decision" msgid="5308961501779563781">"Has denegat a <xliff:g id="APP_NAME">%1$s</xliff:g> l\'accés a <xliff:g id="PERMISSION_NAME">%2$s</xliff:g>"</string> - <string name="days_ago" msgid="6650359081551335629">"{count,plural, =0{Avui}=1{Fa 1 dia}many{# days ago}other{Fa # dies}}"</string> + <string name="days_ago" msgid="6650359081551335629">"{count,plural, =0{Avui}=1{Fa 1 dia}many{Fa # dies}other{Fa # dies}}"</string> <string name="app_disable_dlg_positive" msgid="7418444149981904940">"Desactiva l\'aplicació"</string> <string name="app_disable_dlg_text" msgid="3126943217146120240">"Si desactives aquesta aplicació, és possible que Android i altres aplicacions deixin de funcionar com esperes. Tingues en compte que no pots suprimir aquesta aplicació perquè estava preinstal·lada al dispositiu. Si la desactives, l\'aplicació s\'amagarà al dispositiu."</string> <string name="app_permission_manager" msgid="3903811137630909550">"Gestor de permisos"</string> @@ -75,7 +75,7 @@ <string name="no_permissions" msgid="3881676756371148563">"Sense permisos"</string> <string name="additional_permissions" msgid="5801285469338873430">"Permisos addicionals"</string> <string name="app_permissions_info_button_label" msgid="7633312050729974623">"Obre la informació de l\'aplicació"</string> - <string name="additional_permissions_more" msgid="5681220714755304407">"{count,plural, =1{# permís més}many{# more}other{# permisos més}}"</string> + <string name="additional_permissions_more" msgid="5681220714755304407">"{count,plural, =1{# permís més}many{# permisos més}other{# permisos més}}"</string> <string name="old_sdk_deny_warning" msgid="2382236998845153919">"Aquesta aplicació es va dissenyar per a una versió anterior d\'Android. És possible que no funcioni com està previst si li denegues el permís."</string> <string name="storage_supergroup_warning_allow" msgid="103093462784523190">"Aquesta aplicació es va dissenyar per a una versió anterior d\'Android. Si concedeixes aquest permís, es permetrà l\'accés a tot l\'emmagatzematge (inclosos vídeos, fotos, música, àudio i altres fitxers)."</string> <string name="storage_supergroup_warning_deny" msgid="6420765672683284347">"Aquesta aplicació es va dissenyar per a una versió anterior d\'Android. Si no concedeixes aquest permís, es denegarà l\'accés a tot l\'emmagatzematge (inclosos vídeos, fotos, música, àudio i altres fitxers)."</string> @@ -141,15 +141,15 @@ <string name="auto_permission_usage_timeline_summary" msgid="2713135806453218703">"<xliff:g id="ACCESS_TIME">%1$s</xliff:g> • <xliff:g id="SUMMARY_TEXT">%2$s</xliff:g>"</string> <string name="history_preference_subtext_2" msgid="1521763591164293683">"<xliff:g id="APP_NAME">%1$s</xliff:g> • <xliff:g id="TRUNCATED_TIME">%2$s</xliff:g>"</string> <string name="history_preference_subtext_3" msgid="758761785983094351">"<xliff:g id="ATTRIBUTION_NAME">%1$s</xliff:g> • <xliff:g id="APP_NAME">%2$s</xliff:g> • <xliff:g id="TRUNCATED_TIME">%3$s</xliff:g>"</string> - <string name="duration_used_days" msgid="8238355545812998877">"{count,plural, =1{# dia}many{# days}other{# dies}}"</string> - <string name="duration_used_hours" msgid="4983814806123370332">"{count,plural, =1{# hora}many{# hours}other{# hores}}"</string> - <string name="duration_used_minutes" msgid="1701379522897227819">"{count,plural, =1{# min}many{# mins}other{# min}}"</string> - <string name="duration_used_seconds" msgid="4067390990568727715">"{count,plural, =1{# s}many{# secs}other{# s}}"</string> + <string name="duration_used_days" msgid="8238355545812998877">"{count,plural, =1{# dia}many{# dies}other{# dies}}"</string> + <string name="duration_used_hours" msgid="4983814806123370332">"{count,plural, =1{# hora}many{# hores}other{# hores}}"</string> + <string name="duration_used_minutes" msgid="1701379522897227819">"{count,plural, =1{# min}many{# min}other{# min}}"</string> + <string name="duration_used_seconds" msgid="4067390990568727715">"{count,plural, =1{# s}many{# s}other{# s}}"</string> <string name="permission_usage_any_permission" msgid="6358023078298106997">"Qualsevol permís"</string> <string name="permission_usage_any_time" msgid="3802087027301631827">"En qualsevol moment"</string> - <string name="permission_usage_last_n_days" msgid="7882626467375714145">"{count,plural, =1{Darrer dia}many{Last # days}other{# darrers dies}}"</string> - <string name="permission_usage_last_n_hours" msgid="8490466053680267858">"{count,plural, =1{Darrera hora}many{Last # hours}other{Darreres # hores}}"</string> - <string name="permission_usage_last_n_minutes" msgid="7817864229878281983">"{count,plural, =1{Darrer minut}many{Last # minutes}other{Darrers # minuts}}"</string> + <string name="permission_usage_last_n_days" msgid="7882626467375714145">"{count,plural, =1{Darrer dia}many{# darrers dies}other{# darrers dies}}"</string> + <string name="permission_usage_last_n_hours" msgid="8490466053680267858">"{count,plural, =1{Darrera hora}many{Darreres # hores}other{Darreres # hores}}"</string> + <string name="permission_usage_last_n_minutes" msgid="7817864229878281983">"{count,plural, =1{Darrer minut}many{Darrers # minuts}other{Darrers # minuts}}"</string> <string name="no_permission_usages" msgid="9119517454177289331">"Cap ús de permisos"</string> <string name="permission_usage_list_title_any_time" msgid="8718257027381592407">"Accés més recents en qualsevol moment"</string> <string name="permission_usage_list_title_last_7_days" msgid="9048542342670890615">"Accés més recents durant els 7 darrers dies"</string> @@ -163,9 +163,9 @@ <string name="permission_usage_bar_chart_title_last_hour" msgid="6571647509660009185">"Ús de permisos durant l\'última hora"</string> <string name="permission_usage_bar_chart_title_last_15_minutes" msgid="2743143675412824819">"Ús de permisos durant els últims 15 minuts"</string> <string name="permission_usage_bar_chart_title_last_minute" msgid="820450867183487607">"Ús de permisos durant l\'últim minut"</string> - <string name="permission_usage_preference_summary_not_used_in_past_n_days" msgid="4771868094611359651">"{count,plural, =1{No s\'ha utilitzat en el darrer dia}many{Not used in past # days}other{No s\'ha utilitzat en els darrers # dies}}"</string> - <string name="permission_usage_preference_summary_not_used_in_past_n_hours" msgid="3828973177433435742">"{count,plural, =1{No s\'ha utilitzat en la darrera hora}many{Not used in past # hours}other{No s\'ha utilitzat en les darreres # hores}}"</string> - <string name="permission_usage_preference_label" msgid="8343167938128676378">"{count,plural, =1{Utilitzat per 1 aplicació}many{Used by # apps}other{Utilitzat per # aplicacions}}"</string> + <string name="permission_usage_preference_summary_not_used_in_past_n_days" msgid="4771868094611359651">"{count,plural, =1{No s\'ha utilitzat en el darrer dia}many{No s\'ha utilitzat en els darrers # dies}other{No s\'ha utilitzat en els darrers # dies}}"</string> + <string name="permission_usage_preference_summary_not_used_in_past_n_hours" msgid="3828973177433435742">"{count,plural, =1{No s\'ha utilitzat en la darrera hora}many{No s\'ha utilitzat en les darreres # hores}other{No s\'ha utilitzat en les darreres # hores}}"</string> + <string name="permission_usage_preference_label" msgid="8343167938128676378">"{count,plural, =1{Utilitzat per 1 aplicació}many{Utilitzat per # aplicacions}other{Utilitzat per # aplicacions}}"</string> <string name="permission_usage_view_details" msgid="6675335735468752787">"Mostra-ho tot al tauler"</string> <string name="app_permission_usage_filter_label" msgid="7182861154638631550">"Filtrats per: <xliff:g id="PERM">%1$s</xliff:g>"</string> <string name="app_permission_usage_remove_filter" msgid="2926157607436428207">"Suprimeix el filtre"</string> @@ -256,17 +256,17 @@ <string name="ask_header" msgid="2633816846459944376">"Pregunta sempre"</string> <string name="denied_header" msgid="903209608358177654">"Sense permís"</string> <string name="storage_footer_hyperlink_text" msgid="8873343987957834810">"Mostra més aplicacions que poden accedir a tots els fitxers"</string> - <string name="days" msgid="609563020985571393">"{count,plural, =1{1 dia}many{# days}other{# dies}}"</string> - <string name="hours" msgid="7302866489666950038">"{count,plural, =1{# hora}many{# hours}other{# hores}}"</string> - <string name="minutes" msgid="4868414855445375753">"{count,plural, =1{# minut}many{# minutes}other{# minuts}}"</string> - <string name="seconds" msgid="5893958182059842734">"{count,plural, =1{# segon}many{# seconds}other{# segons}}"</string> + <string name="days" msgid="609563020985571393">"{count,plural, =1{1 dia}many{# dies}other{# dies}}"</string> + <string name="hours" msgid="7302866489666950038">"{count,plural, =1{# hora}many{# hores}other{# hores}}"</string> + <string name="minutes" msgid="4868414855445375753">"{count,plural, =1{# minut}many{# minuts}other{# minuts}}"</string> + <string name="seconds" msgid="5893958182059842734">"{count,plural, =1{# segon}many{# segons}other{# segons}}"</string> <string name="permission_reminders" msgid="6528257957664832636">"Recordatoris de permisos"</string> <string name="auto_revoke_permission_reminder_notification_title_one" msgid="6690347469376854137">"1 aplicació no utilitzada"</string> <string name="auto_revoke_permission_reminder_notification_title_many" msgid="6062217713645069960">"<xliff:g id="NUMBER_OF_APPS">%s</xliff:g> aplicacions no utilitzades"</string> <string name="auto_revoke_permission_reminder_notification_content" msgid="4492228990462107487">"S\'han suprimit els permisos per protegir la teva privadesa. Toca per revisar-ho."</string> <string name="auto_revoke_permission_notification_title" msgid="2629844160853454657">"S\'han suprimit permisos de les aplicacions no utilitzades"</string> <string name="auto_revoke_permission_notification_content" msgid="5125990886047799375">"Durant els darrers mesos, no has utilitzat algunes aplicacions. Toca per revisar-ho."</string> - <string name="unused_apps_notification_title" msgid="4314832015894238019">"{count,plural, =1{# aplicació no utilitzada}many{# unused apps}other{# aplicacions no utilitzades}}"</string> + <string name="unused_apps_notification_title" msgid="4314832015894238019">"{count,plural, =1{# aplicació no utilitzada}many{# aplicacions no utilitzades}other{# aplicacions no utilitzades}}"</string> <string name="unused_apps_notification_content" msgid="9195026773244581246">"S\'han suprimit els permisos i els fitxers temporals, i s\'han aturat les notificacions. Toca per revisar-ho."</string> <string name="unused_apps_safety_center_card_title" msgid="5638409355530099149">"Revisa les aplicacions amb permisos suprimits"</string> <string name="unused_apps_safety_center_card_content" msgid="1088557243627427820">"Els permisos i els fitxers temporals s\'han suprimit i les notificacions s\'han aturat per a les aplicacions que no has utilitzat en un temps."</string> @@ -275,7 +275,7 @@ <string name="post_drive_permission_decision_reminder_summary_1_app_1_permission" msgid="670521503734140711">"Mentre conduïes, has concedit a <xliff:g id="APP">%1$s</xliff:g> accés a <xliff:g id="PERMISSION">%2$s</xliff:g>"</string> <string name="post_drive_permission_decision_reminder_summary_1_app_2_permissions" msgid="671791184670801301">"Mentre conduïes, has concedit a <xliff:g id="APP">%1$s</xliff:g> accés a <xliff:g id="PERMISSION_1">%2$s</xliff:g> i <xliff:g id="PERMISSION_2">%3$s</xliff:g>"</string> <string name="post_drive_permission_decision_reminder_summary_1_app_multi_permission" msgid="4080701771111456927">"Mentre conduïes, has concedit <xliff:g id="COUNT">%1$d</xliff:g> permisos a <xliff:g id="APP">%2$s</xliff:g>"</string> - <string name="post_drive_permission_decision_reminder_summary_multi_apps" msgid="5253882771252863902">"{count,plural, =1{Mentre conduïes, has concedit accés a <xliff:g id="APP_0">%1$s</xliff:g> i a # aplicació més}many{While driving, you gave <xliff:g id="APP_1">%1$s</xliff:g> & # other apps access}other{Mentre conduïes, has concedit accés a <xliff:g id="APP_1">%1$s</xliff:g> i a # aplicacions més}}"</string> + <string name="post_drive_permission_decision_reminder_summary_multi_apps" msgid="5253882771252863902">"{count,plural, =1{Mentre conduïes, has concedit accés a <xliff:g id="APP_0">%1$s</xliff:g> i a # aplicació més}many{Mentre conduïes, has concedit accés a <xliff:g id="APP_1">%1$s</xliff:g> i a # aplicacions més}other{Mentre conduïes, has concedit accés a <xliff:g id="APP_1">%1$s</xliff:g> i a # aplicacions més}}"</string> <string name="go_to_settings" msgid="1053735612211228335">"Ves a Configuració"</string> <string name="auto_revoke_setting_subtitle" msgid="8631720570723050460">"Durant els darrers mesos, no has utilitzat algunes aplicacions"</string> <string name="permissions_removed_category_title" msgid="1064754271178447643">"Permisos suprimits"</string> @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Mostra un missatge quan les aplicacions accedeixen al text, a les imatges o a qualsevol altre contingut que hagis copiat"</string> <string name="show_password_title" msgid="2877269286984684659">"Mostra les contrasenyes"</string> <string name="show_password_summary" msgid="1110166488865981610">"Mostra els caràcters breument mentre escrius"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Aquesta aplicació ha indicat que és possible que comparteixi dades d\'ubicació amb tercers"</string> </resources> diff --git a/PermissionController/res/values-cs-v33/strings.xml b/PermissionController/res/values-cs-v33/strings.xml index cc0f35105..2e993c48d 100644 --- a/PermissionController/res/values-cs-v33/strings.xml +++ b/PermissionController/res/values-cs-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Seznam. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Jsou vyžadovány akce. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Položka seznamu. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Zobrazit všechna upozornění"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Rozbalením zobrazíte jedno další upozornění}few{Rozbalením zobrazíte # další upozornění}many{Rozbalením zobrazíte # dalšího upozornění}other{Rozbalením zobrazíte # dalších upozornění}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Upozornění. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Upozornění. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-cs/strings.xml b/PermissionController/res/values-cs/strings.xml index fb8e6511f..31a34ab51 100644 --- a/PermissionController/res/values-cs/strings.xml +++ b/PermissionController/res/values-cs/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Zobrazovat zprávu, když aplikace použijí text, obrázky nebo jiný obsah, který jste zkopírovali"</string> <string name="show_password_title" msgid="2877269286984684659">"Zobrazovat hesla"</string> <string name="show_password_summary" msgid="1110166488865981610">"Při psaní se budou krátce zobrazovat zadané znaky"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Tato aplikace uvedla, že může sdílet údaje o poloze se třetími stranami"</string> </resources> diff --git a/PermissionController/res/values-da-v33/strings.xml b/PermissionController/res/values-da-v33/strings.xml index 397d80e12..1ffd79e75 100644 --- a/PermissionController/res/values-da-v33/strings.xml +++ b/PermissionController/res/values-da-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Liste. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Handling er påkrævet. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Listepunkt. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Se alle underretninger"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Udvid for at se én yderligere advarsel}one{Udvid for at se # yderligere advarsel}other{Udvid for at se # yderligere advarsler}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Underretning. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Underretning. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-da/strings.xml b/PermissionController/res/values-da/strings.xml index 15dd9052b..d7e2be625 100644 --- a/PermissionController/res/values-da/strings.xml +++ b/PermissionController/res/values-da/strings.xml @@ -70,7 +70,7 @@ <string name="days_ago" msgid="6650359081551335629">"{count,plural, =0{I dag}=1{For 1 dag siden}one{for # dag siden}other{for # dage siden}}"</string> <string name="app_disable_dlg_positive" msgid="7418444149981904940">"Deaktiver appen"</string> <string name="app_disable_dlg_text" msgid="3126943217146120240">"Hvis du deaktiverer denne app, kan det medføre, at Android-apps og andre apps ikke fungerer korrekt. Vær opmærksom på, at du ikke kan slette denne app, da den er forudinstalleret på din enhed. Hvis du slår appen fra, deaktiveres og skjules den på din enhed."</string> - <string name="app_permission_manager" msgid="3903811137630909550">"Tilladelsesadministrator"</string> + <string name="app_permission_manager" msgid="3903811137630909550">"Tilladelsesadministrator"</string> <string name="never_ask_again" msgid="4728762438198560329">"Spørg ikke igen"</string> <string name="no_permissions" msgid="3881676756371148563">"Ingen tilladelser"</string> <string name="additional_permissions" msgid="5801285469338873430">"Yderligere tilladelser"</string> @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Vis en meddelelse, når apps får adgang til tekst, billeder eller andet indhold, du har kopieret"</string> <string name="show_password_title" msgid="2877269286984684659">"Vis adgangskoder"</string> <string name="show_password_summary" msgid="1110166488865981610">"Vis kort tegnene, mens du skriver"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Denne app har angivet, at den muligvis deler lokationsdata med tredjeparter"</string> </resources> diff --git a/PermissionController/res/values-de-v33/strings.xml b/PermissionController/res/values-de-v33/strings.xml index ea5201330..1cb9562fd 100644 --- a/PermissionController/res/values-de-v33/strings.xml +++ b/PermissionController/res/values-de-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Liste. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Wichtige Informationen. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Listeneintrag. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Alle Warnungen anzeigen"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Maximieren und eine weitere Warnung anzeigen}other{Maximieren und # weitere Warnungen anzeigen}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Benachrichtigung. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Benachrichtigung. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-de/strings.xml b/PermissionController/res/values-de/strings.xml index 25df7b98e..5be137a5f 100644 --- a/PermissionController/res/values-de/strings.xml +++ b/PermissionController/res/values-de/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Eine Meldung wird angezeigt, wenn Apps auf Text, Bilder oder andere Inhalte zugreifen, die du kopiert hast"</string> <string name="show_password_title" msgid="2877269286984684659">"Passwörter anzeigen"</string> <string name="show_password_summary" msgid="1110166488865981610">"Zeichen während der Eingabe kurz anzeigen"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"In dieser App wurde angegeben, dass sie eventuell Standortdaten an Dritte weitergibt"</string> </resources> diff --git a/PermissionController/res/values-el-v33/strings.xml b/PermissionController/res/values-el-v33/strings.xml index 5d560fc71..a763be7a3 100644 --- a/PermissionController/res/values-el-v33/strings.xml +++ b/PermissionController/res/values-el-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Λίστα. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Απαιτούνται ενέργειες. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Στοιχείο λίστας. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Εμφάνιση όλων των ειδοποιήσεων"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Αναπτύξτε και δείτε μία ακόμη ειδοποίηση}other{Αναπτύξτε και δείτε # ακόμη ειδοποιήσεις}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Ειδοποίηση. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Ειδοποίηση. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-el/strings.xml b/PermissionController/res/values-el/strings.xml index 33b506ed5..ca42ed63e 100644 --- a/PermissionController/res/values-el/strings.xml +++ b/PermissionController/res/values-el/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Να εμφανίζεται ένα μήνυμα όταν οι εφαρμογές αποκτούν πρόσβαση σε κείμενο, εικόνες ή άλλο περιεχόμενο που έχετε αντιγράψει"</string> <string name="show_password_title" msgid="2877269286984684659">"Εμφάνιση κωδικών πρόσβασης"</string> <string name="show_password_summary" msgid="1110166488865981610">"Σύντομη εμφάνιση χαρακτήρων κατά την πληκτρολόγηση"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Αυτή η εφαρμογή έχει δηλώσει ότι ενδέχεται να κοινοποιήσει δεδομένα τοποθεσίας σε τρίτα μέρη."</string> </resources> diff --git a/PermissionController/res/values-en-rAU-v33/strings.xml b/PermissionController/res/values-en-rAU-v33/strings.xml index e73e4b527..4c9627ae4 100644 --- a/PermissionController/res/values-en-rAU-v33/strings.xml +++ b/PermissionController/res/values-en-rAU-v33/strings.xml @@ -27,7 +27,7 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"List. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Actions needed. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"List item. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"See all alerts"</string> + <string name="safety_center_more_issues_card_title" msgid="7425844746197493312">"More alerts"</string> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Expand and see one more alert}other{Expand and see # more alerts}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alert. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alert. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-en-rCA-v33/strings.xml b/PermissionController/res/values-en-rCA-v33/strings.xml index 6cd114b93..4bb85f62c 100644 --- a/PermissionController/res/values-en-rCA-v33/strings.xml +++ b/PermissionController/res/values-en-rCA-v33/strings.xml @@ -27,7 +27,7 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"List. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Actions needed. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"List item. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"See all alerts"</string> + <string name="safety_center_more_issues_card_title" msgid="7425844746197493312">"More alerts"</string> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Expand and see one more alert}other{Expand and see # more alerts}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alert. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alert. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-en-rGB-v33/strings.xml b/PermissionController/res/values-en-rGB-v33/strings.xml index e73e4b527..4c9627ae4 100644 --- a/PermissionController/res/values-en-rGB-v33/strings.xml +++ b/PermissionController/res/values-en-rGB-v33/strings.xml @@ -27,7 +27,7 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"List. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Actions needed. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"List item. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"See all alerts"</string> + <string name="safety_center_more_issues_card_title" msgid="7425844746197493312">"More alerts"</string> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Expand and see one more alert}other{Expand and see # more alerts}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alert. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alert. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-en-rIN-v33/strings.xml b/PermissionController/res/values-en-rIN-v33/strings.xml index e73e4b527..4c9627ae4 100644 --- a/PermissionController/res/values-en-rIN-v33/strings.xml +++ b/PermissionController/res/values-en-rIN-v33/strings.xml @@ -27,7 +27,7 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"List. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Actions needed. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"List item. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"See all alerts"</string> + <string name="safety_center_more_issues_card_title" msgid="7425844746197493312">"More alerts"</string> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Expand and see one more alert}other{Expand and see # more alerts}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alert. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alert. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-en-rXC-v33/strings.xml b/PermissionController/res/values-en-rXC-v33/strings.xml index e0d215f70..2419864d2 100644 --- a/PermissionController/res/values-en-rXC-v33/strings.xml +++ b/PermissionController/res/values-en-rXC-v33/strings.xml @@ -27,7 +27,7 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"List. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Actions needed. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"List item. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"See all alerts"</string> + <string name="safety_center_more_issues_card_title" msgid="7425844746197493312">"More alerts"</string> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Expand and see one more alert}other{Expand and see # more alerts}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alert. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alert. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-es-rUS-v33/strings.xml b/PermissionController/res/values-es-rUS-v33/strings.xml index b01ae313f..e7b5a167b 100644 --- a/PermissionController/res/values-es-rUS-v33/strings.xml +++ b/PermissionController/res/values-es-rUS-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lista. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Se requieren acciones. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Elemento de la lista. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Ver todas las alertas"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Expande y ve una alerta más}many{Expande y ve # de alertas más}other{Expande y ve # alertas más}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-es-rUS/strings.xml b/PermissionController/res/values-es-rUS/strings.xml index 698b6124e..7369dc198 100644 --- a/PermissionController/res/values-es-rUS/strings.xml +++ b/PermissionController/res/values-es-rUS/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Mostrar un mensaje cuando las apps accedan a textos, imágenes y otro contenido que hayas copiado"</string> <string name="show_password_title" msgid="2877269286984684659">"Mostrar contraseñas"</string> <string name="show_password_summary" msgid="1110166488865981610">"Mostrar caracteres brevemente mientras escribes"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Esta app indicó que podría compartir datos de ubicación con terceros"</string> </resources> diff --git a/PermissionController/res/values-es-v33/strings.xml b/PermissionController/res/values-es-v33/strings.xml index 86c072a1c..ac4ffa022 100644 --- a/PermissionController/res/values-es-v33/strings.xml +++ b/PermissionController/res/values-es-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lista. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Acciones necesarias. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Elemento de lista. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>."</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Ver todas las alertas"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Ampliar para ver una alerta más}many{Ampliar para ver # alertas más}other{Ampliar para ver # alertas más}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>."</string> diff --git a/PermissionController/res/values-es/strings.xml b/PermissionController/res/values-es/strings.xml index b969e4daf..3a0100aea 100644 --- a/PermissionController/res/values-es/strings.xml +++ b/PermissionController/res/values-es/strings.xml @@ -131,7 +131,7 @@ <string name="permission_group_usage_title" msgid="2595013198075285173">"Uso de <xliff:g id="PERMGROUP">%1$s</xliff:g>"</string> <string name="perm_usage_adv_info_title" msgid="3357831829538873708">"Ver otros permisos"</string> <string name="perm_usage_adv_info_summary_2_items" msgid="3702175198750127822">"<xliff:g id="PERMGROUP_0">%1$s</xliff:g>, <xliff:g id="PERMGROUP_1">%2$s</xliff:g>"</string> - <string name="perm_usage_adv_info_summary_more_items" msgid="949055326299562218">"<xliff:g id="PERMGROUP_0">%1$s</xliff:g>, <xliff:g id="PERMGROUP_1">%2$s</xliff:g>, <xliff:g id="NUM">%3$s</xliff:g> más"</string> + <string name="perm_usage_adv_info_summary_more_items" msgid="949055326299562218">"<xliff:g id="PERMGROUP_0">%1$s</xliff:g>, <xliff:g id="PERMGROUP_1">%2$s</xliff:g> y <xliff:g id="NUM">%3$s</xliff:g> más"</string> <string name="permission_group_usage_subtitle_24h" msgid="5120155996322114181">"Cronología de cuándo han usado las aplicaciones el permiso <xliff:g id="PERMGROUP">%1$s</xliff:g> en las últimas 24 horas"</string> <string name="permission_group_usage_subtitle_7d" msgid="1465828402260324654">"Cronología de cuándo han usado las aplicaciones el permiso <xliff:g id="PERMGROUP">%1$s</xliff:g> en los últimos 7 días"</string> <string name="permission_usage_access_dialog_subtitle" msgid="4171772805196955753">"Cuándo ha utilizado esta aplicación tu permiso de <xliff:g id="PERMGROUP">%1$s</xliff:g>"</string> @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Muestra un mensaje cuando las aplicaciones acceden a texto, imágenes u otro contenido que has copiado"</string> <string name="show_password_title" msgid="2877269286984684659">"Mostrar contraseñas"</string> <string name="show_password_summary" msgid="1110166488865981610">"Muestra los caracteres brevemente mientras escribes"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Esta aplicación ha indicado que puede compartir datos de ubicación con terceros"</string> </resources> diff --git a/PermissionController/res/values-et-v33/strings.xml b/PermissionController/res/values-et-v33/strings.xml index 4ff6f274b..c02341963 100644 --- a/PermissionController/res/values-et-v33/strings.xml +++ b/PermissionController/res/values-et-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Loend. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Nõutavad on toimingud. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Loendiüksus. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Kuva kõik hoiatused"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Laiendage ja vaadake veel ühte hoiatust}other{Laiendage ja vaadake veel # hoiatust}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Hoiatus. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Hoiatus. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>."</string> diff --git a/PermissionController/res/values-et/strings.xml b/PermissionController/res/values-et/strings.xml index 272458e6f..65ff6b6cc 100644 --- a/PermissionController/res/values-et/strings.xml +++ b/PermissionController/res/values-et/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Kui rakendused pääsevad juurde kopeeritud tekstile, piltidele või muule sisule, kuvatakse teade"</string> <string name="show_password_title" msgid="2877269286984684659">"Kuva paroolid"</string> <string name="show_password_summary" msgid="1110166488865981610">"Sisestamisel kuvatakse hetkeks tähemärgid"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"See rakendus andis teada, et võib asukohaandmeid jagada kolmandate osapooltega"</string> </resources> diff --git a/PermissionController/res/values-eu-v33/strings.xml b/PermissionController/res/values-eu-v33/strings.xml index 89a3a3a96..4ca302223 100644 --- a/PermissionController/res/values-eu-v33/strings.xml +++ b/PermissionController/res/values-eu-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Zerrenda. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Zerbait egin behar duzu. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Zerrendako elementua. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Ikusi alerta guztiak"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Zabaldu eta ikusi beste alerta bat}other{Zabaldu eta ikusi # alerta gehiago}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-eu/strings.xml b/PermissionController/res/values-eu/strings.xml index 40b91d220..dd525b9aa 100644 --- a/PermissionController/res/values-eu/strings.xml +++ b/PermissionController/res/values-eu/strings.xml @@ -32,7 +32,7 @@ <string name="grant_dialog_button_no_upgrade" msgid="8344732743633736625">"Mantendu “Aplikazioa abian denean” aukera"</string> <string name="grant_dialog_button_no_upgrade_one_time" msgid="5125892775684968694">"Mantendu \"Oraingo honetan soilik\""</string> <string name="grant_dialog_button_more_info" msgid="213350268561945193">"Datu gehiago"</string> - <string name="grant_dialog_button_allow_all_photos" msgid="3688746146785304900">"Eman argazki guztiak atzitzeko baimena"</string> + <string name="grant_dialog_button_allow_all_photos" msgid="3688746146785304900">"Eman argazki guztiak erabiltzeko baimena"</string> <string name="grant_dialog_button_allow_selected_photos" msgid="4098620850512492892">"Hautatu argazkiak"</string> <string name="grant_dialog_button_allow_more_selected_photos" msgid="2003524111894640605">"Hautatu argazki gehiago"</string> <string name="grant_dialog_button_dont_allow_more_selected_photos" msgid="6811842813929146242">"Ez hautatu argazki gehiago"</string> @@ -55,7 +55,7 @@ <string name="grant_dialog_button_allow_one_time" msgid="2618088516449706391">"Oraingo honetan soilik"</string> <string name="grant_dialog_button_allow_background" msgid="8236044729434367833">"Eman baimena beti"</string> <string name="grant_dialog_button_allow_all_files" msgid="4955436994954829894">"Eman fitxategi guztiak kudeatzeko baimena"</string> - <string name="grant_dialog_button_allow_media_only" msgid="4832877658422573832">"Eman multimedia-fitxategiak atzitzeko baimena"</string> + <string name="grant_dialog_button_allow_media_only" msgid="4832877658422573832">"Eman multimedia-fitxategiak erabiltzeko baimena"</string> <string name="app_permissions_breadcrumb" msgid="5136969550489411650">"Aplikazioak"</string> <string name="app_permissions" msgid="3369917736607944781">"Aplikazio-baimenak"</string> <string name="unused_apps" msgid="2058057455175955094">"Erabiltzen ez diren aplikazioak"</string> @@ -65,8 +65,8 @@ <string name="review_permission_decisions_view_all" msgid="90391040431566130">"Ikusi baimenen inguruko azkenaldiko erabaki guztiak"</string> <string name="review_permission_decisions_empty" msgid="8120775336417279806">"Ez dago azkenaldian hartutako baimenen inguruko erabakirik"</string> <string name="auto_permission_manager_summary" msgid="9157438376234301354">"Kudeatu egutegiko, deien erregistroko eta abarretako datuetarako sarbidea"</string> - <string name="granted_permission_decision" msgid="7824827491551861365">"<xliff:g id="PERMISSION_NAME">%2$s</xliff:g> atzitzeko baimena eman diozu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioari"</string> - <string name="denied_permission_decision" msgid="5308961501779563781">"Ez diozu eman <xliff:g id="PERMISSION_NAME">%2$s</xliff:g> atzitzeko baimena <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioari"</string> + <string name="granted_permission_decision" msgid="7824827491551861365">"<xliff:g id="PERMISSION_NAME">%2$s</xliff:g> erabiltzeko baimena eman diozu <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioari"</string> + <string name="denied_permission_decision" msgid="5308961501779563781">"Ez diozu eman <xliff:g id="PERMISSION_NAME">%2$s</xliff:g> erabiltzeko baimena <xliff:g id="APP_NAME">%1$s</xliff:g> aplikazioari"</string> <string name="days_ago" msgid="6650359081551335629">"{count,plural, =0{Gaur}=1{Atzo}other{Duela # egun}}"</string> <string name="app_disable_dlg_positive" msgid="7418444149981904940">"Desgaitu aplikazioa"</string> <string name="app_disable_dlg_text" msgid="3126943217146120240">"Aplikazioa desgaitzen baduzu, baliteke Android-ek eta beste aplikazio batzuek behar bezala ez funtzionatzea. Kontuan izan ezin duzula ezabatu aplikazio hau gailuan berez instalatuta zetorrelako. Desgaituz gero, aplikazioa desaktibatu egingo duzu, eta gailutik ezkutatuko."</string> @@ -77,13 +77,13 @@ <string name="app_permissions_info_button_label" msgid="7633312050729974623">"Ireki aplikazioaren informazioa"</string> <string name="additional_permissions_more" msgid="5681220714755304407">"{count,plural, =1{Beste #}other{Beste #}}"</string> <string name="old_sdk_deny_warning" msgid="2382236998845153919">"Android-en bertsio zaharrago baterako diseinatuta dago aplikazio hau. Baimena ukatzen baduzu, agian aurrerantzean ez du behar bezala funtzionatuko."</string> - <string name="storage_supergroup_warning_allow" msgid="103093462784523190">"Android-en bertsio zaharrago baterako dago diseinatuta aplikazio hau. Baimena ematen baduzu, biltegi osoa atzitzeko baimena emango da (argazkiak, musika, audioa eta bestelako fitxategiak atzitzekoa barne)."</string> - <string name="storage_supergroup_warning_deny" msgid="6420765672683284347">"Android-en bertsio zaharrago baterako dago diseinatuta aplikazio hau. Baimena ematen ez baduzu, biltegi osoa atzitzeko baimena baztertuko da (argazkiak, musika, audioa eta bestelako fitxategiak atzitzekoa barne)."</string> + <string name="storage_supergroup_warning_allow" msgid="103093462784523190">"Android-en bertsio zaharrago baterako dago diseinatuta aplikazio hau. Baimena ematen baduzu, biltegi osoa erabiltzeko baimena emango da (argazkiak, musika, audioa eta bestelako fitxategiak atzitzekoa barne)."</string> + <string name="storage_supergroup_warning_deny" msgid="6420765672683284347">"Android-en bertsio zaharrago baterako dago diseinatuta aplikazio hau. Baimena ematen ez baduzu, biltegi osoa erabiltzeko baimena baztertuko da (argazkiak, musika, audioa eta bestelako fitxategiak atzitzekoa barne)."</string> <string name="default_permission_description" msgid="4624464917726285203">"Gauzatu ekintza ezezagunak"</string> <string name="app_permissions_group_summary" msgid="8788419008958284002">"<xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g> aplikaziok du(te) baimena"</string> <string name="app_permissions_group_summary2" msgid="4329922444840521150">"Baimena daukaten <xliff:g id="COUNT_0">%1$d</xliff:g>/<xliff:g id="COUNT_1">%2$d</xliff:g> aplikazio"</string> <string name="menu_show_system" msgid="4254021607027872504">"Erakutsi sistemaren aplikazioak"</string> - <string name="menu_hide_system" msgid="3855390843744028465">"Ezkutatu sistema"</string> + <string name="menu_hide_system" msgid="3855390843744028465">"Ezkutatu sistemaren aplikazioak"</string> <string name="menu_show_7_days_data" msgid="8979611198508523706">"Erakutsi azken zazpi egunak"</string> <string name="menu_show_24_hours_data" msgid="8228054833323380780">"Erakutsi azken 24 orduak"</string> <string name="manage_permission" msgid="2895385393037061964">"Kudeatu baimena"</string> @@ -91,8 +91,8 @@ <string name="location_settings" msgid="3624412509133422562">"Kokapen-ezarpenak"</string> <string name="location_warning" msgid="2381649060929040962">"Gailu honen kokapen-zerbitzuen hornitzailea da <xliff:g id="APP_NAME">%1$s</xliff:g>. Kokapenerako sarbidea aldatzeko, joan kokapen-ezarpenetara."</string> <string name="system_warning" msgid="1173400963234358816">"Baimena ematen ez baduzu, baliteke gailuaren oinarrizko eginbide batzuek behar bezala ez funtzionatzea."</string> - <string name="deny_read_media_visual_warning" msgid="3982586279917232827">"Android-en bertsio zaharrago baterako dago diseinatuta aplikazio hau. Aplikazioari argazkiak eta bideoak atzitzeko baimena ematen ez badiozu, musika eta bestelako audioa atzitzeko baimena ere baztertu egingo da."</string> - <string name="deny_read_media_aural_warning" msgid="8928699919508646732">"Android-en bertsio zaharrago baterako dago diseinatuta aplikazio hau. Aplikazioari musika eta bestelako audioa atzitzeko baimena ematen ez badiozu, argazkiak eta bideoak atzitzeko baimena ere baztertu egingo da."</string> + <string name="deny_read_media_visual_warning" msgid="3982586279917232827">"Android-en bertsio zaharrago baterako dago diseinatuta aplikazio hau. Aplikazioari argazkiak eta bideoak erabiltzeko baimena ematen ez badiozu, musika eta bestelako audioa erabiltzeko baimena ere baztertu egingo da."</string> + <string name="deny_read_media_aural_warning" msgid="8928699919508646732">"Android-en bertsio zaharrago baterako dago diseinatuta aplikazio hau. Aplikazioari musika eta bestelako audioa erabiltzeko baimena ematen ez badiozu, argazkiak eta bideoak erabiltzeko baimena ere baztertu egingo da."</string> <string name="cdm_profile_revoke_warning" msgid="4443893270719106700">"Baimena ematen ez baduzu, baliteke aplikazio honek kudeatutako gailuaren eginbide batzuek behar bezala ez funtzionatzea."</string> <string name="permission_summary_enforced_by_policy" msgid="4443598170942950519">"Gidalerroen bidez aplikatzen da"</string> <string name="permission_summary_disabled_by_policy_background_only" msgid="221995005556362660">"Gidalerro batek atzeko planoa atzitzeko aukera desgaitu du"</string> @@ -137,7 +137,7 @@ <string name="permission_usage_access_dialog_subtitle" msgid="4171772805196955753">"Aplikazioak noiz erabili duen <xliff:g id="PERMGROUP">%1$s</xliff:g> erabiltzeko baimena"</string> <string name="permission_usage_access_dialog_learn_more" msgid="7121468469493184613">"Lortu informazio gehiago"</string> <string name="learn_more_content_description" msgid="8673699744544502539">"Lortu <xliff:g id="PERMGROUP">%1$s</xliff:g> baimenari buruzko informazio gehiago"</string> - <string name="manage_permission_summary" msgid="4117555482684114317">"Kontrolatu <xliff:g id="PERMGROUP">%1$s</xliff:g> atzitzeko baimenak"</string> + <string name="manage_permission_summary" msgid="4117555482684114317">"Kontrolatu <xliff:g id="PERMGROUP">%1$s</xliff:g> erabiltzeko baimenak"</string> <string name="auto_permission_usage_timeline_summary" msgid="2713135806453218703">"<xliff:g id="ACCESS_TIME">%1$s</xliff:g> • <xliff:g id="SUMMARY_TEXT">%2$s</xliff:g>"</string> <string name="history_preference_subtext_2" msgid="1521763591164293683">"<xliff:g id="APP_NAME">%1$s</xliff:g> • <xliff:g id="TRUNCATED_TIME">%2$s</xliff:g>"</string> <string name="history_preference_subtext_3" msgid="758761785983094351">"<xliff:g id="ATTRIBUTION_NAME">%1$s</xliff:g> • <xliff:g id="APP_NAME">%2$s</xliff:g> • <xliff:g id="TRUNCATED_TIME">%3$s</xliff:g>"</string> @@ -187,11 +187,11 @@ <string name="app_permission_usage_summary_no_duration" msgid="3698475875179457400">"Sarbidea: <xliff:g id="NUM">%1$s</xliff:g> aldiz. Duela <xliff:g id="TIME">%2$s</xliff:g> erabili zen azken aldiz."</string> <string name="app_permission_button_allow" msgid="5808039516494774647">"Eman baimena"</string> <string name="app_permission_button_allow_all_files" msgid="1792232272599018825">"Eman fitxategi guztiak kudeatzeko baimena"</string> - <string name="app_permission_button_allow_media_only" msgid="2834282724426046154">"Eman multimedia-fitxategiak soilik atzitzeko baimena"</string> + <string name="app_permission_button_allow_media_only" msgid="2834282724426046154">"Eman multimedia-fitxategiak soilik erabiltzeko baimena"</string> <string name="app_permission_button_allow_always" msgid="4573292371734011171">"Eman baimena beti"</string> <string name="app_permission_button_allow_foreground" msgid="1991570451498943207">"Aplikazioa erabiltzean soilik"</string> - <string name="app_permission_button_allow_all_photos" msgid="914762549054270764">"Eman argazki guztiak atzitzeko baimena"</string> - <string name="app_permission_button_select_photos" msgid="1022930616634145364">"Eman hautatutako argazkiak atzitzeko baimena"</string> + <string name="app_permission_button_allow_all_photos" msgid="914762549054270764">"Eman argazki guztiak erabiltzeko baimena"</string> + <string name="app_permission_button_select_photos" msgid="1022930616634145364">"Eman hautatutako argazkiak erabiltzeko baimena"</string> <string name="app_permission_button_ask" msgid="3342950658789427">"Galdetu beti"</string> <string name="app_permission_button_deny" msgid="6016454069832050300">"Ez eman baimenik"</string> <string name="precise_image_description" msgid="6349638632303619872">"Kokapen zehatza"</string> @@ -204,7 +204,7 @@ <string name="app_permission_footer_permission_apps_link" msgid="3941988129992794327">"Ikusi baimen hau duten aplikazio guztiak"</string> <string name="assistant_mic_label" msgid="1011432357152323896">"Erakutsi laguntzaileak mikrofonoa erabiltzeko duen baimena"</string> <string name="unused_apps_category_title" msgid="2988455616845243901">"Erabili gabeko aplikazio-ezarpenak"</string> - <string name="auto_revoke_label" msgid="5068393642936571656">"Kendu baimenak aplikazioa ez bada erabiltzen"</string> + <string name="auto_revoke_label" msgid="5068393642936571656">"Kendu baimenak aplikazioa erabiltzen ez bada"</string> <string name="unused_apps_label" msgid="2595428768404901064">"Kendu baimenak eta egin tokia"</string> <string name="unused_apps_label_v2" msgid="7058776770056517980">"Pausatu erabiltzen ez diren aplikazioetako jarduerak"</string> <string name="unused_apps_summary" msgid="8839466950318403115">"Kendu baimenak, ezabatu aldi baterako fitxategiak eta geldiarazi jakinarazpenak"</string> @@ -219,7 +219,7 @@ <string name="auto_revocable_permissions_many" msgid="1521807896206032992">"Kenduko diren baimenak: <xliff:g id="PERMS">%1$s</xliff:g>."</string> <string name="auto_manage_title" msgid="7693181026874842935">"Kudeatu baimenak automatikoki"</string> <string name="auto_revoked_app_summary_one" msgid="7093213590301252970">"<xliff:g id="PERMISSION_NAME">%s</xliff:g> erabiltzeko baimena kendu da"</string> - <string name="auto_revoked_app_summary_two" msgid="1910545340763709389">"<xliff:g id="PERMISSION_NAME_0">%1$s</xliff:g> eta <xliff:g id="PERMISSION_NAME_1">%2$s</xliff:g> atzitzeko baimenak kendu dira"</string> + <string name="auto_revoked_app_summary_two" msgid="1910545340763709389">"<xliff:g id="PERMISSION_NAME_0">%1$s</xliff:g> eta <xliff:g id="PERMISSION_NAME_1">%2$s</xliff:g> erabiltzeko baimenak kendu dira"</string> <string name="auto_revoked_app_summary_many" msgid="5930976230827378798">"<xliff:g id="PERMISSION_NAME">%1$s</xliff:g> eta beste <xliff:g id="NUMBER">%2$s</xliff:g> baimen kendu dira"</string> <string name="unused_apps_page_title" msgid="6986983535677572559">"Erabiltzen ez diren aplikazioak"</string> <string name="unused_apps_page_summary" msgid="1867593913217272155">"Aplikazio bat zenbait hilabetez erabili ez bada:\n\n• Baimenak kendu egingo dira zure datuak babesteko.\n• Jakinarazpenak gelditu egingo dira bateria aurrezteko.\n• Aldi baterako fitxategiak kendu egingo dira tokia egiteko.\n\nBaimenak eta jakinarazpenak berreskuratu nahi badituzu, ireki aplikazioa."</string> @@ -251,7 +251,7 @@ <string name="allowed_header" msgid="7769277978004790414">"Baimenduta"</string> <string name="allowed_always_header" msgid="6455903312589013545">"Beti baimendutakoak"</string> <string name="allowed_foreground_header" msgid="6845655788447833353">"Erabili bitartean soilik baimendutakoak"</string> - <string name="allowed_storage_scoped" msgid="5383645873719086975">"Multimedia-fitx. soilik atzitzeko baimena dutenak"</string> + <string name="allowed_storage_scoped" msgid="5383645873719086975">"Multimedia-fitx. soilik erabiltzeko baimena dutenak"</string> <string name="allowed_storage_full" msgid="5356699280625693530">"Fitxategi guztiak kudeatzeko baimena dutenak"</string> <string name="ask_header" msgid="2633816846459944376">"Galdetu beti"</string> <string name="denied_header" msgid="903209608358177654">"Baimendu gabe"</string> @@ -272,8 +272,8 @@ <string name="unused_apps_safety_center_card_content" msgid="1088557243627427820">"Aspaldi erabili ez dituzun aplikazioen baimenak eta aldi baterako fitxategiak kendu dira, eta aplikazioekin erlazionatutako jakinarazpenak gelditu dira."</string> <string name="unused_apps_safety_center_action_title" msgid="8865914432518993194">"Berrikusi aplikazioak"</string> <string name="post_drive_permission_decision_reminder_title" msgid="1290697371418139976">"Ikusi eman berri dituzun baimenak"</string> - <string name="post_drive_permission_decision_reminder_summary_1_app_1_permission" msgid="670521503734140711">"Gidatu bitartean, <xliff:g id="PERMISSION">%2$s</xliff:g> atzitzeko baimena eman diozu <xliff:g id="APP">%1$s</xliff:g> aplikazioari"</string> - <string name="post_drive_permission_decision_reminder_summary_1_app_2_permissions" msgid="671791184670801301">"Gidatu bitartean, <xliff:g id="PERMISSION_1">%2$s</xliff:g> eta <xliff:g id="PERMISSION_2">%3$s</xliff:g> atzitzeko baimena eman diozu <xliff:g id="APP">%1$s</xliff:g> aplikazioari"</string> + <string name="post_drive_permission_decision_reminder_summary_1_app_1_permission" msgid="670521503734140711">"Gidatu bitartean, <xliff:g id="PERMISSION">%2$s</xliff:g> erabiltzeko baimena eman diozu <xliff:g id="APP">%1$s</xliff:g> aplikazioari"</string> + <string name="post_drive_permission_decision_reminder_summary_1_app_2_permissions" msgid="671791184670801301">"Gidatu bitartean, <xliff:g id="PERMISSION_1">%2$s</xliff:g> eta <xliff:g id="PERMISSION_2">%3$s</xliff:g> erabiltzeko baimena eman diozu <xliff:g id="APP">%1$s</xliff:g> aplikazioari"</string> <string name="post_drive_permission_decision_reminder_summary_1_app_multi_permission" msgid="4080701771111456927">"Gidatu bitartean, <xliff:g id="COUNT">%1$d</xliff:g> baimen eman dizkiozu <xliff:g id="APP">%2$s</xliff:g> aplikazioari"</string> <string name="post_drive_permission_decision_reminder_summary_multi_apps" msgid="5253882771252863902">"{count,plural, =1{Gidatu bitartean, baimenak eman dizkiezu <xliff:g id="APP_0">%1$s</xliff:g> eta beste # aplikaziori}other{Gidatu bitartean, baimenak eman dizkiezu <xliff:g id="APP_1">%1$s</xliff:g> eta beste # aplikaziori}}"</string> <string name="go_to_settings" msgid="1053735612211228335">"Joan ezarpenetara"</string> @@ -291,7 +291,7 @@ <string name="notification_listener_remove_access_button_label" msgid="7101898782417817097">"Kendu sarbidea"</string> <string name="notification_listener_review_app_button_label" msgid="3433073281029143924">"Ikusi aukera gehiago"</string> <string name="notification_listener_remove_access_success_label" msgid="2477611529875633107">"Kendu da sarbidea"</string> - <string name="accessibility_access_reminder_notification_title" msgid="2971317234668807566">"Berrikusi gailua atzitzeko baimen osoa duen aplikazioa"</string> + <string name="accessibility_access_reminder_notification_title" msgid="2971317234668807566">"Berrikusi gailua erabiltzeko baimen osoa duen aplikazioa"</string> <string name="accessibility_access_reminder_notification_content" msgid="7389454158175306720">"<xliff:g id="APP_NAME">%s</xliff:g> aplikazioak pantaila ikus dezake, eta gailuan ekintzak egin. Erabilerraztasun-aplikazioek sarbide mota hori behar dute behar bezala funtzionatzeko."</string> <string name="accessibility_access_warning_card_content" msgid="4370327190293217358">"Aplikazioak pantaila ikus dezake, eta gailuan ekintzak egin. Erabilerraztasun-aplikazioek sarbide mota hori behar dute behar bezala funtzionatzeko, baina ikusi aplikazioa eta ziurtatu hartaz fidatzen zarela."</string> <string name="accessibility_remove_access_button_label" msgid="44145801526711640">"Kendu sarbidea"</string> @@ -342,7 +342,7 @@ <string name="no_permissions_denied" msgid="8159923922804043282">"Ez zaio ukatu baimenik"</string> <string name="no_apps_allowed" msgid="7718822655254468631">"Ez zaio eman baimena ezein aplikaziori"</string> <string name="no_apps_allowed_full" msgid="8011716991498934104">"Ez dago fitxategi guztiak irakurtzeko baimena duen aplikaziorik"</string> - <string name="no_apps_allowed_scoped" msgid="4908850477787659501">"Ez dago multimedia-edukia soilik atzitzeko baimena duen aplikaziorik"</string> + <string name="no_apps_allowed_scoped" msgid="4908850477787659501">"Ez dago multimedia-edukia soilik erabiltzeko baimena duen aplikaziorik"</string> <string name="no_apps_denied" msgid="7663435886986784743">"Ez zaio ukatu baimena ezein aplikaziori"</string> <string name="car_permission_selected" msgid="180837028920791596">"Hautatuta"</string> <string name="settings" msgid="5409109923158713323">"Ezarpenak"</string> @@ -459,52 +459,52 @@ <string name="adjust_user_sensitive_per_app_header" msgid="4543506440989005648">"Nabarmendu hauen erabilera"</string> <string name="assistant_record_audio_user_sensitive_title" msgid="5532123360322362378">"Erakutsi laguntzailea abiarazteko hautematea"</string> <string name="assistant_record_audio_user_sensitive_summary" msgid="6482937591816401619">"Mikrofonoa erabiltzen denean ahozko laguntza aktibatzeko, erakutsi dagokion ikonoa egoera-barran"</string> - <string name="permgrouprequest_storage_isolated" msgid="4892154224026852295">"Gailuko argazkiak eta multimedia-edukia atzitzeko baimena eman nahi diozu <b&gt<xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> - <string name="permgrouprequest_contacts" msgid="8391550064551053695">"Kontaktuak atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> - <string name="permgrouprequest_location" msgid="6990232580121067883">"Gailuaren kokapena atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_storage_isolated" msgid="4892154224026852295">"Gailuko argazkiak eta multimedia-edukia erabiltzeko baimena eman nahi diozu <b&gt<xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_contacts" msgid="8391550064551053695">"Kontaktuak erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_location" msgid="6990232580121067883">"Gailuaren kokapena erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgrouprequestdetail_location" msgid="2635935335778429894">"Hura erabiltzen ari zarenean soilik atzituko du aplikazioak kokapena"</string> - <string name="permgroupbackgroundrequest_location" msgid="1085680897265734809">"Gailuaren kokapena atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgroupbackgroundrequest_location" msgid="1085680897265734809">"Gailuaren kokapena erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgroupbackgroundrequestdetail_location" msgid="8021219324989662957">"Baliteke aplikazioak beti atzitu behar izatea zure kokapena, baita aplikazioa erabiltzen ari ez zarenean ere. "<annotation id="link">"Eman baimen hori Ezarpenak atalean"</annotation>"."</string> <string name="permgroupupgraderequest_location" msgid="8328408946822691636">"Kokapenerako sarbidea aldatu nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgroupupgraderequestdetail_location" msgid="1550899076845189165">"Aplikazioak beti atzitu nahi du zure kokapena, baita aplikazioa erabiltzen ari ez zarenean ere. "<annotation id="link">"Eman baimen hori Ezarpenak atalean"</annotation>"."</string> <string name="permgrouprequest_nearby_devices" msgid="2272829282660436700">"Inguruko gailuak aurkitu, haietara konektatu eta haien arteko distantzia erlatiboa zehazteko baimena eman <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgroupupgraderequestdetail_nearby_devices" msgid="6877531270654738614">"Inguruko gailuak aurkitzeko, haietara konektatzeko eta haien arteko distantzia erlatiboa zehazteko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b&gt aplikazioari? "<annotation id="link">"Eman baimena ezarpenetan."</annotation></string> - <string name="permgrouprequest_fineupgrade" msgid="2334242928821697672">"<xliff:g id="APP_NAME"><b>%1$s</b></xliff:g> aplikazioak gutxi gorabeherako kokapena atzi dezake. Kokapen zehatza atzitzeko baimena eman nahi diozu?"</string> - <string name="permgrouprequest_coarselocation" msgid="7244605063736425232">"Gailuaren gutxi gorabeherako kokapena atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_fineupgrade" msgid="2334242928821697672">"<xliff:g id="APP_NAME"><b>%1$s</b></xliff:g> aplikazioak gutxi gorabeherako kokapena atzi dezake. Kokapen zehatza erabiltzeko baimena eman nahi diozu?"</string> + <string name="permgrouprequest_coarselocation" msgid="7244605063736425232">"Gailuaren gutxi gorabeherako kokapena erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgrouprequest_finelocation_imagetext" msgid="1313062433398914334">"Zehatza"</string> <string name="permgrouprequest_coarselocation_imagetext" msgid="8650605041483025297">"Gutxi gorabeherakoa"</string> - <string name="permgrouprequest_calendar" msgid="1493150855673603806">"Egutegia atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_calendar" msgid="1493150855673603806">"Egutegia erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgrouprequest_sms" msgid="5672063688745420991">"SMS mezuak bidaltzeko eta ikusteko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> - <string name="permgrouprequest_storage" msgid="8717773092518621602">"Gailuko argazkiak, multimedia-edukia eta fitxategiak atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> - <string name="permgrouprequest_storage_q_to_s" msgid="8213701872983685505">"Gailuko <b>argazkiak, bideoak, musika eta audioa</b> atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> - <string name="permgrouprequest_storage_pre_q" msgid="168130651144569428">"Gailuko <b>argazkiak, bideoak, musika, audioa eta bestelako fitxategiak</b> atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> - <string name="permgrouprequest_read_media_aural" msgid="2593365397347577812">"Gailuko musika eta audioa atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> - <string name="permgrouprequest_read_media_visual" msgid="5548780620779729975">"Gailuko argazkiak eta bideoak atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> - <string name="permgrouprequest_more_photos" msgid="4697813231897226261">"Argazki gehiago atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_storage" msgid="8717773092518621602">"Gailuko argazkiak, multimedia-edukia eta fitxategiak erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_storage_q_to_s" msgid="8213701872983685505">"Gailuko <b>argazkiak, bideoak, musika eta audioa</b> erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_storage_pre_q" msgid="168130651144569428">"Gailuko <b>argazkiak, bideoak, musika, audioa eta bestelako fitxategiak</b> erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_read_media_aural" msgid="2593365397347577812">"Gailuko musika eta audioa erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_read_media_visual" msgid="5548780620779729975">"Gailuko argazkiak eta bideoak erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_more_photos" msgid="4697813231897226261">"Argazki gehiago erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgrouprequest_microphone" msgid="2825208549114811299">"Audioa grabatzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgrouprequestdetail_microphone" msgid="8510456971528228861">"Aplikazioak hura erabiltzean soilik grabatuko du audioa"</string> <string name="permgroupbackgroundrequest_microphone" msgid="8874462606796368183">"Audioa grabatzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgroupbackgroundrequestdetail_microphone" msgid="553702902263681838">"Baliteke aplikazioak edonoiz grabatzea audioa, baita aplikazioa erabiltzen ari ez zarenean ere. "<annotation id="link">"Eman baimena ezarpenetan."</annotation></string> <string name="permgroupupgraderequest_microphone" msgid="1362781696161233341">"Mikrofonorako sarbidea aldatu nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgroupupgraderequestdetail_microphone" msgid="2870497719571464239">"Aplikazioak edonoiz grabatu nahi du audioa, baita aplikazioa erabiltzen ari ez zarenean ere. "<annotation id="link">"Eman baimena ezarpenetan."</annotation></string> - <string name="permgrouprequest_activityRecognition" msgid="5415121592794230330">"Zure jarduera fisikoa atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_activityRecognition" msgid="5415121592794230330">"Zure jarduera fisikoa erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgrouprequest_camera" msgid="5123097035410002594">"Argazkiak ateratzeko eta bideoak grabatzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgrouprequestdetail_camera" msgid="9085323239764667883">"Aplikazioak hura erabiltzean soilik aterako ditu argazkiak, eta grabatuko bideoak"</string> <string name="permgroupbackgroundrequest_camera" msgid="1274286575704213875">"Argazkiak atera eta bideoak grabatzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgroupbackgroundrequestdetail_camera" msgid="4458783509089859078">"Baliteke aplikazioak edonoiz ateratzea argazkiak eta grabatzea bideoak, baita aplikazioa erabiltzen ari ez zarenean ere. "<annotation id="link">"Eman baimena ezarpenetan."</annotation></string> <string name="permgroupupgraderequest_camera" msgid="640758449200241582">"Kamerarako sarbidea aldatu nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgroupupgraderequestdetail_camera" msgid="6642747548010962597">"Aplikazioak edonoiz atera nahi ditu argazkiak eta grabatu bideoak, baita aplikazioa erabiltzen ari ez zarenean ere. "<annotation id="link">"Eman baimena ezarpenetan."</annotation></string> - <string name="permgrouprequest_calllog" msgid="2065327180175371397">"Telefonoko deien erregistroa atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_calllog" msgid="2065327180175371397">"Telefonoko deien erregistroa erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgrouprequest_phone" msgid="1829234136997316752">"Telefono-deiak egiteko eta kudeatzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> - <string name="permgrouprequest_sensors" msgid="4397358316850652235">"Bizi-konstanteei buruzko sentsorearen datuak atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgrouprequest_sensors" msgid="4397358316850652235">"Bizi-konstanteei buruzko sentsorearen datuak erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="permgroupupgraderequestdetail_sensors" msgid="6651914048792092835">"Aplikazioak bizi-konstanteei buruzko sentsoreen datuak atzitu nahi ditu, baita aplikazioa erabiltzen ari ez zarenean ere. Aldaketa hori egiteko, "<annotation id="link">"joan ezarpenetara."</annotation></string> - <string name="permgroupbackgroundrequest_sensors" msgid="5661924322018503886">"Bizi-konstanteei buruzko sentsoreen datuak atzitzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> - <string name="permgroupbackgroundrequestdetail_sensors" msgid="7726767635834043501">"Aplikazioari gorputz-sentsoreen datuak beti atzitzeko baimena emateko (baita aplikazioa erabiltzen ari ez zarenean ere), "<annotation id="link">"joan ezarpenetara."</annotation></string> - <string name="permgroupupgraderequest_sensors" msgid="7576527638411370468">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> erabili bitartean gorputz-sentsoreen datuak atzitzeko baimena eman nahi diozu aplikazio horri?"</string> + <string name="permgroupbackgroundrequest_sensors" msgid="5661924322018503886">"Bizi-konstanteei buruzko sentsoreen datuak erabiltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> + <string name="permgroupbackgroundrequestdetail_sensors" msgid="7726767635834043501">"Aplikazioari gorputz-sentsoreen datuak beti erabiltzeko baimena emateko (baita aplikazioa erabiltzen ari ez zarenean ere), "<annotation id="link">"joan ezarpenetara."</annotation></string> + <string name="permgroupupgraderequest_sensors" msgid="7576527638411370468">"<b><xliff:g id="APP_NAME">%1$s</xliff:g></b> erabili bitartean gorputz-sentsoreen datuak erabiltzeko baimena eman nahi diozu aplikazio horri?"</string> <string name="permgrouprequest_notifications" msgid="6396739062335106181">"Jakinarazpenak bidaltzeko baimena eman nahi diozu <b><xliff:g id="APP_NAME">%1$s</xliff:g></b> aplikazioari?"</string> <string name="auto_granted_permissions" msgid="6009452264824455892">"Kontrolatutako baimenak"</string> <string name="auto_granted_location_permission_notification_title" msgid="1438871159268985993">"Kokapena atzi daiteke"</string> - <string name="auto_granted_permission_notification_body" msgid="6919835973190443695">"IKT saileko administratzaileak zure kokapena atzitzeko baimena eman dio <xliff:g id="APP_NAME">%s</xliff:g> aplikazioari"</string> + <string name="auto_granted_permission_notification_body" msgid="6919835973190443695">"IKT saileko administratzaileak zure kokapena erabiltzeko baimena eman dio <xliff:g id="APP_NAME">%s</xliff:g> aplikazioari"</string> <string name="other_permissions_label" msgid="8986184335503271992">"Beste baimen batzuk"</string> <string name="not_used_permissions_label" msgid="3939839426115141264">"Sistemak erabilitako baimenak"</string> <string name="not_used_permissions_description" msgid="7595514824169388718">"Sistema-aplikazioek soilik erabilitako baimenak."</string> @@ -540,8 +540,8 @@ <string name="safety_privacy_qs_tile_subtitle" msgid="3621544532041936749">"Egiaztatu egoera"</string> <string name="privacy_controls_qs" msgid="5780144882040591169">"Pribatutasun-ezarpenak"</string> <string name="security_settings_button_label_qs" msgid="8280343822465962330">"Ezarpen gehiago"</string> - <string name="camera_toggle_label_qs" msgid="3880261453066157285">"Kamera atzitzeko baimena"</string> - <string name="microphone_toggle_label_qs" msgid="8132912469813396552">"Mikrofonoa atzitzeko baimena"</string> + <string name="camera_toggle_label_qs" msgid="3880261453066157285">"Kamera erabiltzeko baimena"</string> + <string name="microphone_toggle_label_qs" msgid="8132912469813396552">"Mikrofonoa erabiltzeko baimena"</string> <string name="permissions_removed_qs" msgid="8957319130625294572">"Kendu egin da baimena"</string> <string name="camera_usage_qs" msgid="4394233566086665994">"Ikusi kameraren azkenaldiko erabilera"</string> <string name="microphone_usage_qs" msgid="8527666682168170417">"Ikusi mikrofonoaren azkenaldiko erabilera"</string> @@ -559,31 +559,31 @@ <string name="recent_app_usage_2_qs" msgid="3591205954235694403">"<xliff:g id="APP_NAME">%1$s</xliff:g> (<xliff:g id="ATTRIBUTION_LABEL">%2$s</xliff:g> • <xliff:g id="PROXY_LABEL">%3$s</xliff:g>) aplikazioak erabili du duela gutxi"</string> <string name="media_confirm_dialog_positive_button" msgid="9020793594051526399">"Berretsi"</string> <string name="media_confirm_dialog_negative_button" msgid="226987376924861785">"Atzera"</string> - <string name="media_confirm_dialog_title_a_to_p_aural_allow" msgid="8560601114044699903">"Bestelako fitxategiak atzitzeko baimena ere emango da"</string> + <string name="media_confirm_dialog_title_a_to_p_aural_allow" msgid="8560601114044699903">"Bestelako fitxategiak erabiltzeko baimena ere emango da"</string> <string name="media_confirm_dialog_title_a_to_p_aural_deny" msgid="7841428716317307685">"Ez da emango bestelako fitxategiak atzitzeko baimenik"</string> - <string name="media_confirm_dialog_title_a_to_p_visual_allow" msgid="6469086448310893751">"Bestelako fitxategiak atzitzeko baimena ere emango da"</string> + <string name="media_confirm_dialog_title_a_to_p_visual_allow" msgid="6469086448310893751">"Bestelako fitxategiak erabiltzeko baimena ere emango da"</string> <string name="media_confirm_dialog_title_a_to_p_visual_deny" msgid="5767849609024384226">"Ez da emango bestelako fitxategiak atzitzeko baimenik"</string> - <string name="media_confirm_dialog_title_q_to_s_aural_allow" msgid="3191904399336990537">"Argazkiak eta bideoak atzitzeko baimena ere emango da"</string> + <string name="media_confirm_dialog_title_q_to_s_aural_allow" msgid="3191904399336990537">"Argazkiak eta bideoak erabiltzeko baimena ere emango da"</string> <string name="media_confirm_dialog_title_q_to_s_aural_deny" msgid="3128147568953297969">"Ez da emango argazkiak eta bideoak atzitzeko baimenik"</string> - <string name="media_confirm_dialog_title_q_to_s_visual_allow" msgid="6310682466493330434">"Musika- eta audio-fitxategiak atzitzeko baimena ere emango da"</string> + <string name="media_confirm_dialog_title_q_to_s_visual_allow" msgid="6310682466493330434">"Musika- eta audio-fitxategiak erabiltzeko baimena ere emango da"</string> <string name="media_confirm_dialog_title_q_to_s_visual_deny" msgid="1123845663785900471">"Ez da emango musika- eta audio-fitxategiak atzitzeko baimenik"</string> - <string name="media_confirm_dialog_message_a_to_p_aural_allow" msgid="7865167246140107623">"Aplikazioa ez da Android-en azken bertsioarekin bateragarria. Aplikazioak musika- eta audio-fitxategiak atzi baditzake, argazkiak, bideoak eta bestelako fitxategiak atzitzeko baimena ere izango du."</string> + <string name="media_confirm_dialog_message_a_to_p_aural_allow" msgid="7865167246140107623">"Aplikazioa ez da Android-en azken bertsioarekin bateragarria. Aplikazioak musika- eta audio-fitxategiak atzi baditzake, argazkiak, bideoak eta bestelako fitxategiak erabiltzeko baimena ere izango du."</string> <string name="media_confirm_dialog_message_a_to_p_aural_deny" msgid="287502523664804786">"Aplikazioa ez da Android-en azken bertsioarekin bateragarria. Aplikazioak musika- eta audio-fitxategiak atzitu ezin baditu, ez du izango argazkiak, bideoak eta bestelako fitxategiak atzitzeko baimenik."</string> - <string name="media_confirm_dialog_message_a_to_p_visual_allow" msgid="4952410892939590487">"Aplikazioa ez da Android-en azken bertsioarekin bateragarria. Aplikazioak argazkiak eta bideoak atzi baditzake, musika, audioa eta bestelako fitxategiak atzitzeko baimena ere izango du."</string> + <string name="media_confirm_dialog_message_a_to_p_visual_allow" msgid="4952410892939590487">"Aplikazioa ez da Android-en azken bertsioarekin bateragarria. Aplikazioak argazkiak eta bideoak atzi baditzake, musika, audioa eta bestelako fitxategiak erabiltzeko baimena ere izango du."</string> <string name="media_confirm_dialog_message_a_to_p_visual_deny" msgid="6609500525590757681">"Aplikazioa ez da Android-en azken bertsioarekin bateragarria. Aplikazioak argazkiak eta bideoak atzitu ezin baditu, ez du izango musika, audioa eta bestelako fitxategiak atzitzeko baimenik."</string> - <string name="media_confirm_dialog_message_q_to_s_aural_allow" msgid="1702402580147536160">"Aplikazioa ez da Android-en azken bertsioarekin bateragarria. Aplikazioak musika- eta audio-fitxategiak atzi baditzake, argazkiak eta bideoak atzitzeko baimena ere izango du."</string> + <string name="media_confirm_dialog_message_q_to_s_aural_allow" msgid="1702402580147536160">"Aplikazioa ez da Android-en azken bertsioarekin bateragarria. Aplikazioak musika- eta audio-fitxategiak atzi baditzake, argazkiak eta bideoak erabiltzeko baimena ere izango du."</string> <string name="media_confirm_dialog_message_q_to_s_aural_deny" msgid="6832087393653561911">"Aplikazioa ez da Android-en azken bertsioarekin bateragarria. Aplikazioak musika- eta audio-fitxategiak atzitu ezin baditu, ez du izango argazkiak eta bideoak atzitzeko baimenik."</string> - <string name="media_confirm_dialog_message_q_to_s_visual_allow" msgid="3504335060843147760">"Aplikazioa ez da Android-en azken bertsioarekin bateragarria. Aplikazioak argazkiak eta bideoak atzi baditzake, musika- eta audio-fitxategiak atzitzeko baimena ere izango du."</string> + <string name="media_confirm_dialog_message_q_to_s_visual_allow" msgid="3504335060843147760">"Aplikazioa ez da Android-en azken bertsioarekin bateragarria. Aplikazioak argazkiak eta bideoak atzi baditzake, musika- eta audio-fitxategiak erabiltzeko baimena ere izango du."</string> <string name="media_confirm_dialog_message_q_to_s_visual_deny" msgid="2145973462806481992">"Aplikazioa ez da Android-en azken bertsioarekin bateragarria. Aplikazioak musika- eta audio-fitxategiak atzitu ezin baditu, ez du izango argazkiak eta bideoak atzitzeko baimenik."</string> - <string name="safety_center_background_location_access_notification_title" msgid="8933610618810588237">"Berrikusi kokapena atzeko planoan atzitzeko baimena duen aplikazioa"</string> + <string name="safety_center_background_location_access_notification_title" msgid="8933610618810588237">"Berrikusi kokapena atzeko planoan erabiltzeko baimena duen aplikazioa"</string> <string name="safety_center_background_location_access_reminder_notification_content" msgid="4066560182507301022">"<xliff:g id="APP_NAME">%s</xliff:g> aplikazioak beti atzi dezake kokapena, nahiz eta itxita egon"</string> - <string name="safety_center_background_location_access_reminder_title" msgid="5477847038103863843">"Berrikusi kokapena atzeko planoan atzitzeko baimena duen aplikazioa"</string> + <string name="safety_center_background_location_access_reminder_title" msgid="5477847038103863843">"Berrikusi kokapena atzeko planoan erabiltzeko baimena duen aplikazioa"</string> <string name="safety_center_background_location_access_reminder_summary" msgid="8276755741395332974">"Aplikazioak beti atzi dezake kokapena, nahiz eta itxita egon."</string> <string name="safety_center_background_location_access_revoked" msgid="6972274943343442213">"Aldatu da sarbidea"</string> <string name="safety_center_view_recent_location_access" msgid="3524391299490678243">"Ikusi kokapenaren azken erabilera"</string> <string name="privacy_controls_title" msgid="7605929972256835199">"Pribatutasun-ezarpenak"</string> - <string name="camera_toggle_title" msgid="1251201397431837666">"Kamera atzitzeko baimena"</string> - <string name="mic_toggle_title" msgid="2649991093496110162">"Mikrofonoa atzitzeko baimena"</string> + <string name="camera_toggle_title" msgid="1251201397431837666">"Kamera erabiltzeko baimena"</string> + <string name="mic_toggle_title" msgid="2649991093496110162">"Mikrofonoa erabiltzeko baimena"</string> <string name="perm_toggle_description" msgid="7801326363741451379">"Aplikazio eta zerbitzuetarako"</string> <string name="mic_toggle_description" msgid="9163104307990677157">"Aplikazio eta zerbitzuetarako. Ezarpena desaktibatuta badago, baliteke mikrofonoaren bidez lortutako datuak larrialdietarako zenbaki batera deitzen duzunean partekatzea."</string> <string name="location_settings_subtitle" msgid="2328360561197430695">"Ikusi kokapena atzi dezaketen aplikazioak eta zerbitzuak"</string> @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Erakutsi mezu bat aplikazio batek kopiatu dituzun testuak, irudiak edo edukiak atzitzen dituenean"</string> <string name="show_password_title" msgid="2877269286984684659">"Erakutsi pasahitzak"</string> <string name="show_password_summary" msgid="1110166488865981610">"Idatzi ahala, erakutsi karaktereak laburki"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Agian hirugarrenekin kokapen-datuak partekatuko dituela adierazi du aplikazioaren garatzaileak"</string> </resources> diff --git a/PermissionController/res/values-fa-v33/strings.xml b/PermissionController/res/values-fa-v33/strings.xml index f3a43a926..69fac1737 100644 --- a/PermissionController/res/values-fa-v33/strings.xml +++ b/PermissionController/res/values-fa-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"فهرست. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. اقداماتی لازم است. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"مورد فهرست. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"دیدن همه هشدارها"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{گسترده کردن و دیدن یک هشدار دیگر}one{گسترده کردن و دیدن # هشدار دیگر}other{گسترده کردن و دیدن # هشدار دیگر}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"هشدار. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"هشدار. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-fa/strings.xml b/PermissionController/res/values-fa/strings.xml index bb9b6b370..e9ca316e0 100644 --- a/PermissionController/res/values-fa/strings.xml +++ b/PermissionController/res/values-fa/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"وقتی برنامهها به نوشتار، تصویر، یا محتوای دیگری که کپی کردهاید دسترسی پیدا میکنند، پیامی نشان داده میشود"</string> <string name="show_password_title" msgid="2877269286984684659">"نمایش گذرواژهها"</string> <string name="show_password_summary" msgid="1110166488865981610">"همانطور که تایپ میکنید، نویسهها را برای مدت کوتاهی نشان میدهد"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"این برنامه اعلام کرده است که ممکن است دادههای مکان را با اشخاص ثالث همرسانی کند"</string> </resources> diff --git a/PermissionController/res/values-fi-v33/strings.xml b/PermissionController/res/values-fi-v33/strings.xml index d1bdd08c5..e2782e6c8 100644 --- a/PermissionController/res/values-fi-v33/strings.xml +++ b/PermissionController/res/values-fi-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lista. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Toimi pian. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Listan osa. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Näytä kaikki ilmoitukset"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Laajenna ja katso yksi muu ilmoitus}other{Laajenna ja katso # muuta ilmoitusta}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Ilmoitus. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Ilmoitus. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g> <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-fi/strings.xml b/PermissionController/res/values-fi/strings.xml index 0a0f46f6a..c84f2e4d1 100644 --- a/PermissionController/res/values-fi/strings.xml +++ b/PermissionController/res/values-fi/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Näytä viesti, kun sovellukset käyttävät kopioimaasi tekstiä, kuvia tai muuta sisältöä"</string> <string name="show_password_title" msgid="2877269286984684659">"Näytä salasanat"</string> <string name="show_password_summary" msgid="1110166488865981610">"Näytä kirjaimet hetkellisesti, kun kirjoitat"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Sovellus on ilmoittanut, että se saattaa jakaa sijaintitietoja kolmansille osapuolille"</string> </resources> diff --git a/PermissionController/res/values-fr-rCA-v33/strings.xml b/PermissionController/res/values-fr-rCA-v33/strings.xml index 1cad5769f..3a07e21c8 100644 --- a/PermissionController/res/values-fr-rCA-v33/strings.xml +++ b/PermissionController/res/values-fr-rCA-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Liste. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Actions requises. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Élément de la liste. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Afficher toutes les alertes"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Développez et affichez une autre alerte}one{Développez et affichez # autre alerte}many{Développez et affichez # d\'autres alertes}other{Développez et affichez # autres alertes}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alerte. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alerte. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-fr-rCA/strings.xml b/PermissionController/res/values-fr-rCA/strings.xml index 2086ee935..de785009a 100644 --- a/PermissionController/res/values-fr-rCA/strings.xml +++ b/PermissionController/res/values-fr-rCA/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Afficher un message lorsque les applications accèdent à du texte, à des images ou à d\'autres contenus que vous avez copiés"</string> <string name="show_password_title" msgid="2877269286984684659">"Afficher les mots de passe"</string> <string name="show_password_summary" msgid="1110166488865981610">"Afficher les caractères brièvement pendant la saisie"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Cette application indique qu\'elle peut partager des données de localisation avec des tiers"</string> </resources> diff --git a/PermissionController/res/values-fr-v33/strings.xml b/PermissionController/res/values-fr-v33/strings.xml index cd97e2b07..65f40a849 100644 --- a/PermissionController/res/values-fr-v33/strings.xml +++ b/PermissionController/res/values-fr-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Liste. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Actions requises. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Élément de liste. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g> : <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Voir toutes les alertes"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Développer et voir 1 autre alerte}one{Développer et voir # autre alerte}many{Développer et voir # autres alertes}other{Développer et voir # autres alertes}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alerte. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alerte. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-fr/strings.xml b/PermissionController/res/values-fr/strings.xml index c8fd668bf..19ff27d2d 100644 --- a/PermissionController/res/values-fr/strings.xml +++ b/PermissionController/res/values-fr/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Afficher un message lorsque les applis accèdent à du texte, à des images ou à d\'autres contenus que vous avez copiés"</string> <string name="show_password_title" msgid="2877269286984684659">"Afficher les mots de passe"</string> <string name="show_password_summary" msgid="1110166488865981610">"Afficher brièvement les caractères pendant la saisie"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Cette appli a indiqué qu\'elle peut partager des données de localisation avec des tiers"</string> </resources> diff --git a/PermissionController/res/values-gl-v33/strings.xml b/PermissionController/res/values-gl-v33/strings.xml index 2e0e0404d..7058cb094 100644 --- a/PermissionController/res/values-gl-v33/strings.xml +++ b/PermissionController/res/values-gl-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lista. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Cómpre realizar accións. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Elemento da lista. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Ver todas as alertas"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Despregar tarxeta e ver 1 alerta máis}other{Despregar tarxeta e ver # alertas máis}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-gl/strings.xml b/PermissionController/res/values-gl/strings.xml index 83bd0a914..ac3f1454f 100644 --- a/PermissionController/res/values-gl/strings.xml +++ b/PermissionController/res/values-gl/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Mostra unha mensaxe cando as aplicacións acceden ao texto, ás imaxes ou ao contido que copiaches"</string> <string name="show_password_title" msgid="2877269286984684659">"Mostrar contrasinais"</string> <string name="show_password_summary" msgid="1110166488865981610">"Mostra os caracteres brevemente mentres escribes"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"A aplicación indicou que é posible que comparta datos de localización con terceiros"</string> </resources> diff --git a/PermissionController/res/values-gu-v33/strings.xml b/PermissionController/res/values-gu-v33/strings.xml index bc4e586c4..f8de2cfad 100644 --- a/PermissionController/res/values-gu-v33/strings.xml +++ b/PermissionController/res/values-gu-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"સૂચિ. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. જરૂરી પગલાં. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"આઇટમ સૂચિબદ્ધ કરો. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"બધા અલર્ટ જુઓ"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{મોટું કરો અને વધુ એક અલર્ટ જુઓ}one{મોટું કરો અને વધુ # અલર્ટ જુઓ}other{મોટું કરો અને વધુ # અલર્ટ જુઓ}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"અલર્ટ. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"અલર્ટ. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-hi-v33/strings.xml b/PermissionController/res/values-hi-v33/strings.xml index 783940852..80318ee3c 100644 --- a/PermissionController/res/values-hi-v33/strings.xml +++ b/PermissionController/res/values-hi-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"सूची. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. ज़रूरी कार्रवाइयां. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"आइटम की सूची. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"सभी चेतावनियां देखें"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{कार्ड को बड़ा करके एक और सूचना देखें}one{कार्ड को बड़ा करके # और सूचना देखें}other{कार्ड को बड़ा करके # और सूचनाएं देखें}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"चेतावनी. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"चेतावनी. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-hi/strings.xml b/PermissionController/res/values-hi/strings.xml index 397bf0e54..ab9fe4b4e 100644 --- a/PermissionController/res/values-hi/strings.xml +++ b/PermissionController/res/values-hi/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"जब कोई ऐप्लिकेशन आपके कॉपी किए गए टेक्स्ट, इमेज या अन्य कॉन्टेंट को ऐक्सेस करे, तो मैसेज से इसकी सूचना पाएं"</string> <string name="show_password_title" msgid="2877269286984684659">"पासवर्ड दिखाएं"</string> <string name="show_password_summary" msgid="1110166488865981610">"टाइप करते समय वर्ण दिखाएं"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"इस ऐप्लिकेशन ने बताया है कि यह जगह की जानकारी का डेटा, तीसरे पक्ष के साथ शेयर कर सकता है"</string> </resources> diff --git a/PermissionController/res/values-hr-v33/strings.xml b/PermissionController/res/values-hr-v33/strings.xml index d2ddea586..3bdc07b0b 100644 --- a/PermissionController/res/values-hr-v33/strings.xml +++ b/PermissionController/res/values-hr-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Popis. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Potrebno je poduzeti radnje. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Stavka popisa. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Prikaži sva upozorenja"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Proširite i pogledajte još jedno upozorenje}one{Proširite i pogledajte još # upozorenje}few{Proširite i pogledajte još # upozorenja}other{Proširite i pogledajte još # upozorenja}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Upozorenje. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Upozorenje. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-hu-v33/strings.xml b/PermissionController/res/values-hu-v33/strings.xml index 2f3b3fa1a..75efbf5c4 100644 --- a/PermissionController/res/values-hu-v33/strings.xml +++ b/PermissionController/res/values-hu-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lista. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Fontos teendő. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Listaelem. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Összes értesítés megtekintése"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Ha kibontja, még egy értesítést láthat}other{Ha kibontja, még # értesítést láthat}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Figyelmeztetés. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Figyelmeztetés. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>."</string> diff --git a/PermissionController/res/values-hu/strings.xml b/PermissionController/res/values-hu/strings.xml index dba2895d0..c842a9d10 100644 --- a/PermissionController/res/values-hu/strings.xml +++ b/PermissionController/res/values-hu/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Üzenet megjelenítése, amikor alkalmazások férnek hozzá a vágólapra másolt szövegekhez, képekhez vagy más tartalmakhoz"</string> <string name="show_password_title" msgid="2877269286984684659">"Jelszavak mutatása"</string> <string name="show_password_summary" msgid="1110166488865981610">"Gépelés közben rövid ideig megjeleníti a karaktereket"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Az alkalmazás jelezte, hogy megoszthat helyadatokat harmadik felekkel"</string> </resources> diff --git a/PermissionController/res/values-hy-v33/strings.xml b/PermissionController/res/values-hy-v33/strings.xml index 6ff7b7690..25ea6747a 100644 --- a/PermissionController/res/values-hy-v33/strings.xml +++ b/PermissionController/res/values-hy-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Ցանկ։ <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>։ Պահանջվում է գործողություն։ <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Ցանկի տարր։ <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>։ <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>․ <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Տեսնել բոլոր ծանուցումները"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Ծավալել և տեսնել ևս մեկ զգուշացում}one{Ծավալել և տեսնել ևս # զգուշացում}other{Ծավալել և տեսնել ևս # զգուշացում}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Ծանուցում: <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>: <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Ծանուցում: <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>: <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>: <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-hy/strings.xml b/PermissionController/res/values-hy/strings.xml index dc088f9d4..306a3ba79 100644 --- a/PermissionController/res/values-hy/strings.xml +++ b/PermissionController/res/values-hy/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Ցուցադրել հաղորդագրություն, երբ հավելվածներին հասանելի են դառնում ձեր պատճենած տեքստը, պատկերները կամ այլ բովանդակություն"</string> <string name="show_password_title" msgid="2877269286984684659">"Ցուցադրել գաղտնաբառերը"</string> <string name="show_password_summary" msgid="1110166488865981610">"Տեքստ մուտքագրելիս կարճ ժամանակով ցուցադրել գրանշանները"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Այս հավելվածը կարող է երրորդ կողմերի հետ կիսվել տեղադրության տվյալներով"</string> </resources> diff --git a/PermissionController/res/values-in-v33/strings.xml b/PermissionController/res/values-in-v33/strings.xml index 6a489e327..ecb08f01b 100644 --- a/PermissionController/res/values-in-v33/strings.xml +++ b/PermissionController/res/values-in-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Daftar. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Diperlukan tindakan. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Item daftar. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Lihat semua peringatan"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Luaskan untuk melihat satu peringatan lain}other{Luaskan untuk melihat # peringatan lain}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Notifikasi. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Notifikasi. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-in/strings.xml b/PermissionController/res/values-in/strings.xml index 372f90659..204422995 100644 --- a/PermissionController/res/values-in/strings.xml +++ b/PermissionController/res/values-in/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Menampilkan pesan saat aplikasi mengakses teks, gambar, atau konten lainnya yang telah Anda salin"</string> <string name="show_password_title" msgid="2877269286984684659">"Tampilkan sandi"</string> <string name="show_password_summary" msgid="1110166488865981610">"Menampilkan karakter sejenak saat Anda mengetik"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Aplikasi ini menyatakan bahwa aplikasi mungkin membagikan data lokasi ke pihak ketiga"</string> </resources> diff --git a/PermissionController/res/values-is-v33/strings.xml b/PermissionController/res/values-is-v33/strings.xml index be1601b63..fdfc0719e 100644 --- a/PermissionController/res/values-is-v33/strings.xml +++ b/PermissionController/res/values-is-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Listi. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Aðgerða þörf. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Listaatriði. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Sjá allar viðvaranir"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Stækka og sjá eina viðvörun í viðbót}one{Stækka og sjá # viðvörun í viðbót}other{Stækka og sjá # viðvaranir í viðbót}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Viðvörun. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Viðvörun. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-is/strings.xml b/PermissionController/res/values-is/strings.xml index eccb7daf1..f3ec424ce 100644 --- a/PermissionController/res/values-is/strings.xml +++ b/PermissionController/res/values-is/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Birta skilaboð þegar forrit fá aðgang að texta, myndum eða öðru efni sem þú hefur afritað"</string> <string name="show_password_title" msgid="2877269286984684659">"Sýna aðgangsorð"</string> <string name="show_password_summary" msgid="1110166488865981610">"Birta stafi í stutta stund þegar þú skrifar"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Þetta forrit gaf til kynna að það kunni að deila staðsetningargögnum með þriðju aðilum"</string> </resources> diff --git a/PermissionController/res/values-it-v33/strings.xml b/PermissionController/res/values-it-v33/strings.xml index 298b795c8..f63a7eb38 100644 --- a/PermissionController/res/values-it-v33/strings.xml +++ b/PermissionController/res/values-it-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Elenco. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Azioni richieste. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Voce elenco. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Visualizza tutti gli avvisi"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Espandi e visualizza un altro avviso}many{Espandi e visualizza altri # avvisi}other{Espandi e visualizza altri # avvisi}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Avviso. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Avviso. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-it/strings.xml b/PermissionController/res/values-it/strings.xml index f7d5e42af..e6ded96f7 100644 --- a/PermissionController/res/values-it/strings.xml +++ b/PermissionController/res/values-it/strings.xml @@ -165,7 +165,7 @@ <string name="permission_usage_bar_chart_title_last_minute" msgid="820450867183487607">"Uso autorizzazioni nell\'ultimo minuto"</string> <string name="permission_usage_preference_summary_not_used_in_past_n_days" msgid="4771868094611359651">"{count,plural, =1{Autorizzazione non utilizzata nell\'ultimo giorno}many{Autorizzazione non utilizzata negli ultimi # giorni}other{Autorizzazione non utilizzata negli ultimi # giorni}}"</string> <string name="permission_usage_preference_summary_not_used_in_past_n_hours" msgid="3828973177433435742">"{count,plural, =1{Autorizzazione non utilizzata nell\'ultima ora}many{Autorizzazione non utilizzata nelle ultime # ore}other{Autorizzazione non utilizzata nelle ultime # ore}}"</string> - <string name="permission_usage_preference_label" msgid="8343167938128676378">"{count,plural, =1{Autorizzazione usata da 1 app}many{Used by # apps}other{Autorizzazione usata da # app}}"</string> + <string name="permission_usage_preference_label" msgid="8343167938128676378">"{count,plural, =1{Autorizzazione usata da 1 app}many{Autorizzazione usata da # app}other{Autorizzazione usata da # app}}"</string> <string name="permission_usage_view_details" msgid="6675335735468752787">"Mostra tutto nella Dashboard"</string> <string name="app_permission_usage_filter_label" msgid="7182861154638631550">"Filtrata per: <xliff:g id="PERM">%1$s</xliff:g>"</string> <string name="app_permission_usage_remove_filter" msgid="2926157607436428207">"Rimuovi filtro"</string> @@ -196,7 +196,7 @@ <string name="app_permission_button_deny" msgid="6016454069832050300">"Non consentire"</string> <string name="precise_image_description" msgid="6349638632303619872">"Posizione esatta"</string> <string name="approximate_image_description" msgid="938803699637069884">"Posizione approssimativa"</string> - <string name="app_permission_location_accuracy" msgid="7166912915040018669">"Usa posizione esatta"</string> + <string name="app_permission_location_accuracy" msgid="7166912915040018669">"Utilizza posizione esatta"</string> <string name="app_permission_location_accuracy_subtitle" msgid="2654077606404987210">"Quando la posizione esatta non è attiva, le app possono accedere alla tua posizione approssimativa"</string> <string name="app_permission_title" msgid="2090897901051370711">"Autorizzazione <xliff:g id="PERM">%1$s</xliff:g>"</string> <string name="app_permission_header" msgid="2951363137032603806">"Accesso a <xliff:g id="PERM">%1$s</xliff:g> per questa app"</string> diff --git a/PermissionController/res/values-iw-v33/strings.xml b/PermissionController/res/values-iw-v33/strings.xml index 77d4d0fd2..6cb02e33b 100644 --- a/PermissionController/res/values-iw-v33/strings.xml +++ b/PermissionController/res/values-iw-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"רשימה. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. נדרשות פעולות. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"פריט ברשימה. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"הצגת כל ההתראות"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{הרחבה וצפייה בהתראה נוספת אחת}one{הרחבה וצפייה ב-# התראות נוספות}two{הרחבה וצפייה ב-# התראות נוספות}other{הרחבה וצפייה ב-# התראות נוספות}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"התראה. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"התראה. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-iw/strings.xml b/PermissionController/res/values-iw/strings.xml index 400e02d6e..4f9e55d13 100644 --- a/PermissionController/res/values-iw/strings.xml +++ b/PermissionController/res/values-iw/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"הצגת הודעה בזמן גישה של אפליקציות לטקסט, לתמונות או לכל תוכן אחר שהעתקת"</string> <string name="show_password_title" msgid="2877269286984684659">"הצגת סיסמאות"</string> <string name="show_password_summary" msgid="1110166488865981610">"התווים יופיעו לפרקי זמן קצרים בזמן ההקלדה"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"האפליקציה הזו הצהירה שהיא עשויה לשתף נתוני מיקום עם צדדים שלישיים"</string> </resources> diff --git a/PermissionController/res/values-ja-v33/strings.xml b/PermissionController/res/values-ja-v33/strings.xml index a684d977e..52ed3c4f8 100644 --- a/PermissionController/res/values-ja-v33/strings.xml +++ b/PermissionController/res/values-ja-v33/strings.xml @@ -27,7 +27,7 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"リスト。<xliff:g id="ENTRY_TITLE">%1$s</xliff:g>。対応が必要です。<xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"リストアイテム。<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>。<xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>。<xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"すべてのアラートを表示"</string> + <string name="safety_center_more_issues_card_title" msgid="7425844746197493312">"その他のアラート"</string> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{1 個以上のアラートを開いて表示する}other{# 個以上のアラートを開いて表示する}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"アラート。<xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>。<xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"アラート。<xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>。<xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>。<xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-ka-v33/strings.xml b/PermissionController/res/values-ka-v33/strings.xml index 28e54bf52..98b3641ee 100644 --- a/PermissionController/res/values-ka-v33/strings.xml +++ b/PermissionController/res/values-ka-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"სია. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. საჭირო ქმედებები. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"სიის ერთეული. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"ყველა გაფრთხილების ნახვა"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{გააფართოვეთ და ნახეთ კიდევ ერთი გაფრთხილება}other{გააფართოვეთ და იხილეთ კიდევ # გაფრთხილება}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"გაფრთხილება. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"გაფრთხილება. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-ka/strings.xml b/PermissionController/res/values-ka/strings.xml index eae04b712..a6742cad5 100644 --- a/PermissionController/res/values-ka/strings.xml +++ b/PermissionController/res/values-ka/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"როდესაც აპებს თქვენ მიერ კოპირებულ ტექსტზე, სურათებზე ან სხვა კონტენტზე აქვთ წვდომა, გამოჩნდება შეტყობინება"</string> <string name="show_password_title" msgid="2877269286984684659">"პაროლების ჩვენება"</string> <string name="show_password_summary" msgid="1110166488865981610">"აკრეფისას სიმბოლოების ხანმოკლედ გამოჩენა"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"ამ აპის თანახმად, მან შესაძლოა გაუზიაროს მდებარეობის მონაცემები მესამე მხარეს"</string> </resources> diff --git a/PermissionController/res/values-kk-v33/strings.xml b/PermissionController/res/values-kk-v33/strings.xml index 74cf3484f..83a07caee 100644 --- a/PermissionController/res/values-kk-v33/strings.xml +++ b/PermissionController/res/values-kk-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Тізім. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Әрекет жасауыңыз керек. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Тізім элементі. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Барлық хабарландыруды көру"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Тағы бір хабарландыруды жаю және көру}other{Тағы # хабарландыруды жаю және көру}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Хабарландыру. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Хабарландыру. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-kk/strings.xml b/PermissionController/res/values-kk/strings.xml index 7008b853b..33aef0c07 100644 --- a/PermissionController/res/values-kk/strings.xml +++ b/PermissionController/res/values-kk/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Қолданбалар көшірілген мәтінді, суреттерді немесе басқа контентті пайдаланған кезде хабар көрсету"</string> <string name="show_password_title" msgid="2877269286984684659">"Құпия сөздерді көрсету"</string> <string name="show_password_summary" msgid="1110166488865981610">"Таңбалар терілген кезде аз уақыт көрсетіледі."</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Бұл қолданба геодеректі үшінші тараптармен бөлісуі мүмкін екенін мәлімдеді."</string> </resources> diff --git a/PermissionController/res/values-km-v33/strings.xml b/PermissionController/res/values-km-v33/strings.xml index ea3583649..4ba4f2bea 100644 --- a/PermissionController/res/values-km-v33/strings.xml +++ b/PermissionController/res/values-km-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"បញ្ជី។ <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>។ សកម្មភាពដែលត្រូវធ្វើ។ <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"រាយបញ្ជីធាតុ។ <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>។ <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>។ <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"មើលការជូនដំណឹងទាំងអស់"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{ពង្រីកដើម្បីមើលការជូនដំណឹងមួយទៀត}other{ពង្រីកដើម្បីមើលការជូនដំណឹង # ទៀត}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"ការជូនដំណឹង។ <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>។ <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"ការជូនដំណឹង។ <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>។ <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>។ <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-km/strings.xml b/PermissionController/res/values-km/strings.xml index 140739d3b..7bce05e90 100644 --- a/PermissionController/res/values-km/strings.xml +++ b/PermissionController/res/values-km/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"បង្ហាញសារ នៅពេលកម្មវិធីចូលប្រើអត្ថបទ រូបភាព ឬខ្លឹមសារផ្សេងទៀតដែលអ្នកបានចម្លង"</string> <string name="show_password_title" msgid="2877269286984684659">"បង្ហាញពាក្យសម្ងាត់"</string> <string name="show_password_summary" msgid="1110166488865981610">"បង្ហាញតួអក្សរមួយភ្លែតខណៈពេលអ្នកវាយបញ្ចូល"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"កម្មវិធីនេះបានបញ្ជាក់ថា វាអាចចែករំលែកទិន្នន័យទីតាំងជាមួយភាគីទីបី"</string> </resources> diff --git a/PermissionController/res/values-kn-v33/strings.xml b/PermissionController/res/values-kn-v33/strings.xml index 6f55bba19..1599eea02 100644 --- a/PermissionController/res/values-kn-v33/strings.xml +++ b/PermissionController/res/values-kn-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"ಪಟ್ಟಿ. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. ಅಗತ್ಯ ಕ್ರಮಗಳು. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"ಪಟ್ಟಿ ಐಟಂ. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"ಎಲ್ಲಾ ಅಲರ್ಟ್ಗಳನ್ನು ನೋಡಿ"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{ವಿಸ್ತರಿಸಿ ಮತ್ತು ಇನ್ನೊಂದು ಎಚ್ಚರಿಕೆಯನ್ನು ನೋಡಿ}one{ವಿಸ್ತರಿಸಿ ಮತ್ತು # ಹೆಚ್ಚಿನ ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೋಡಿ}other{ವಿಸ್ತರಿಸಿ ಮತ್ತು # ಹೆಚ್ಚಿನ ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೋಡಿ}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"ಎಚ್ಚರಿಕೆ. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"ಎಚ್ಚರಿಕೆ. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-ko-v33/strings.xml b/PermissionController/res/values-ko-v33/strings.xml index 476572c61..2a7594c5f 100644 --- a/PermissionController/res/values-ko-v33/strings.xml +++ b/PermissionController/res/values-ko-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"목록. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. 조치 필요. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"목록 항목. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"모든 알림 보기"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{펼쳐서 알림 1개 더보기}other{펼쳐서 알림 #개 더보기}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"알림 <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"알림 <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-ko/strings.xml b/PermissionController/res/values-ko/strings.xml index e5d2850c9..f4df7f8d6 100644 --- a/PermissionController/res/values-ko/strings.xml +++ b/PermissionController/res/values-ko/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"앱이 복사된 텍스트, 이미지 또는 기타 콘텐츠에 액세스할 때 메시지 표시"</string> <string name="show_password_title" msgid="2877269286984684659">"비밀번호 표시"</string> <string name="show_password_summary" msgid="1110166488865981610">"입력할 때 잠깐 표시"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"앱에서 위치 데이터를 서드 파티와 공유할 수 있다고 명시했습니다."</string> </resources> diff --git a/PermissionController/res/values-ky-v33/strings.xml b/PermissionController/res/values-ky-v33/strings.xml index 187e2a969..fe595b478 100644 --- a/PermissionController/res/values-ky-v33/strings.xml +++ b/PermissionController/res/values-ky-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Тизме. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Чара көрүү керек. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Тизмедеги нерсе. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Бардык эскертүүлөрдү көрүү"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Дагы бир эскертүүнү көрүү үчүн жайып көрсөтүү}other{Дагы # эскертүүнү көрүү үчүн жайып көрсөтүү}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Эскертүү. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Эскертүү. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-lo-v33/strings.xml b/PermissionController/res/values-lo-v33/strings.xml index 96e9ee7c3..86db96906 100644 --- a/PermissionController/res/values-lo-v33/strings.xml +++ b/PermissionController/res/values-lo-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"ລາຍການ. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. ຕ້ອງດຳເນີນການ. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"ລາຍການລາຍຊື່. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"ເບິ່ງແຈ້ງເຕືອນທັງໝົດ"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{ຂະຫຍາຍ ແລະ ເບິ່ງແຈ້ງເຕືອນເພີ່ມອີກ 1 ລາຍການ}other{ຂະຫຍາຍ ແລະ ເບິ່ງແຈ້ງເຕືອນເພີ່ມອີກ # ລາຍການ}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"ແຈ້ງເຕືອນ. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"ແຈ້ງເຕືອນ. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-lo/strings.xml b/PermissionController/res/values-lo/strings.xml index 46c7869cb..e287c4429 100644 --- a/PermissionController/res/values-lo/strings.xml +++ b/PermissionController/res/values-lo/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"ສະແດງຂໍ້ຄວາມເມື່ອແອັບເຂົ້າເຖິງຂໍ້ຄວາມ, ຮູບພາບ ຫຼື ເນື້ອຫາອື່ນທີ່ທ່ານສຳເນົາໄວ້"</string> <string name="show_password_title" msgid="2877269286984684659">"ສະແດງລະຫັດຜ່ານ"</string> <string name="show_password_summary" msgid="1110166488865981610">"ສະແດງຕົວອັກສອນເປັນເວລາສັ້ນໆໃນເວລາພິມ"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"ແອັບນີ້ລະບຸວ່າມັນອາດແບ່ງປັນຂໍ້ມູນສະຖານທີ່ກັບພາກສ່ວນທີສາມ"</string> </resources> diff --git a/PermissionController/res/values-lt-v33/strings.xml b/PermissionController/res/values-lt-v33/strings.xml index f8b5bf1a4..2072ce4ae 100644 --- a/PermissionController/res/values-lt-v33/strings.xml +++ b/PermissionController/res/values-lt-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Sąrašas. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Būtina imtis veiksmų. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Sąrašo elementas. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"„<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>“. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Žr. visus įspėjimus"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Išskleiskite ir peržiūrėkite dar vieną įspėjimą}one{Išskleiskite ir peržiūrėkite dar # įspėjimą}few{Išskleiskite ir peržiūrėkite dar # įspėjimus}many{Išskleiskite ir peržiūrėkite dar # įspėjimo}other{Išskleiskite ir peržiūrėkite dar # įspėjimų}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Įspėjimas. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Įspėjimas. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-lv-v33/strings.xml b/PermissionController/res/values-lv-v33/strings.xml index 96f2e77c4..07c2a4b79 100644 --- a/PermissionController/res/values-lv-v33/strings.xml +++ b/PermissionController/res/values-lv-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Saraksts. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Nepieciešama rīcība. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Saraksta vienums. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Skatiet visus brīdinājumus"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Izvērsiet un skatiet vēl vienu brīdinājumu.}zero{Izvērsiet un skatiet vēl # brīdinājumus.}one{Izvērsiet un skatiet vēl # brīdinājumu.}other{Izvērsiet un skatiet vēl # brīdinājumus.}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Brīdinājums. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Brīdinājums. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-lv/strings.xml b/PermissionController/res/values-lv/strings.xml index 8a2fc08f1..2f6d14649 100644 --- a/PermissionController/res/values-lv/strings.xml +++ b/PermissionController/res/values-lv/strings.xml @@ -340,8 +340,8 @@ <string name="app_perms_content_provider_7d_all_files" msgid="7962416229708835558">"Piekļūts pēdējo 7 dienu laikā • Visi faili"</string> <string name="no_permissions_allowed" msgid="6081976856354669209">"Nav piešķirta neviena atļauja"</string> <string name="no_permissions_denied" msgid="8159923922804043282">"Nav noraidīta neviena atļauja"</string> - <string name="no_apps_allowed" msgid="7718822655254468631">"Nav atļauta neviena lietotne"</string> - <string name="no_apps_allowed_full" msgid="8011716991498934104">"Nav atļauta neviena lietotne visiem failiem"</string> + <string name="no_apps_allowed" msgid="7718822655254468631">"Nav atļauts nevienai lietotnei"</string> + <string name="no_apps_allowed_full" msgid="8011716991498934104">"Nav atļauts nevienai lietotnei visiem failiem"</string> <string name="no_apps_allowed_scoped" msgid="4908850477787659501">"Nav atļauta neviena lietotne tikai multivides failiem"</string> <string name="no_apps_denied" msgid="7663435886986784743">"Nav noraidīta neviena lietotne"</string> <string name="car_permission_selected" msgid="180837028920791596">"Atlasīta"</string> @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Rādīt ziņojumu, kad lietotnes piekļūst jūsu nokopētajam tekstam, attēliem vai citam saturam"</string> <string name="show_password_title" msgid="2877269286984684659">"Rādīt paroles"</string> <string name="show_password_summary" msgid="1110166488865981610">"Rakstot tiek īslaicīgi rādītas rakstzīmes"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Lietotne norādīja, ka tā var kopīgot atrašanās vietas datus ar trešajām pusēm."</string> </resources> diff --git a/PermissionController/res/values-mk-v33/strings.xml b/PermissionController/res/values-mk-v33/strings.xml index 995fa0536..0431c190c 100644 --- a/PermissionController/res/values-mk-v33/strings.xml +++ b/PermissionController/res/values-mk-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Список. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Потребни дејства. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Ставка на списокот. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Видете ги сите предупредувања"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Проширете и видете уште едно предупредување}one{Проширете и видете уште # предупредување}other{Проширете и видете уште # предупредувањa}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Предупредување. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Предупредување. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-mk/strings.xml b/PermissionController/res/values-mk/strings.xml index e694ff158..6ee8550dd 100644 --- a/PermissionController/res/values-mk/strings.xml +++ b/PermissionController/res/values-mk/strings.xml @@ -358,13 +358,13 @@ <string name="role_browser_description" msgid="3465253637499842671">"Апликации што ви даваат пристап до интернет и ги прикажуваат линковите што ги допирате"</string> <string name="role_browser_request_title" msgid="2895200507835937192">"Да се постави <xliff:g id="APP_NAME">%1$s</xliff:g> како ваша стандардна апликација за прелистување?"</string> <string name="role_browser_request_description" msgid="5888803407905985941">"Не се потреби дозволи"</string> - <string name="role_dialer_label" msgid="1100224146343237968">"Стандардна апл. за телефон"</string> + <string name="role_dialer_label" msgid="1100224146343237968">"Стандардна апл. за тел."</string> <string name="role_dialer_short_label" msgid="7186888549465352489">"Апликација за телефон"</string> <string name="role_dialer_description" msgid="8768708633696539612">"Апликации што ви овозможуваат да упатувате и примате телефонски повици преку уредов"</string> <string name="role_dialer_request_title" msgid="5959618560705912058">"Да се постави <xliff:g id="APP_NAME">%1$s</xliff:g> како ваша стандардна апликација за телефон?"</string> <string name="role_dialer_request_description" msgid="6288839625724909320">"Апликацијава ќе има пристап до камерата, контактите, микрофонот, телефонот и SMS-пораките"</string> <string name="role_dialer_search_keywords" msgid="3324448983559188087">"бирач"</string> - <string name="role_sms_label" msgid="8456999857547686640">"Стандардна апликација за SMS"</string> + <string name="role_sms_label" msgid="8456999857547686640">"Стандардна апл. за SMS"</string> <string name="role_sms_short_label" msgid="4371444488034692243">"Апликација за SMS"</string> <string name="role_sms_description" msgid="3424020199148153513">"Апликации што ви овозможуваат да го користите телефонскиот број за испраќање и примање кратки SMS-пораки, фотографии, видеа и друго"</string> <string name="role_sms_request_title" msgid="7953552109601185602">"Да се постави <xliff:g id="APP_NAME">%1$s</xliff:g> како ваша стандардна апликација за SMS?"</string> @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Нека се прикажува известување кога апликациите пристапуваат до текст, слики или други содржини што сте ги копирале"</string> <string name="show_password_title" msgid="2877269286984684659">"Прикажувај ги лозинките"</string> <string name="show_password_summary" msgid="1110166488865981610">"Прикажувај ги знаците накратко додека пишувам"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Апликацијава изјави дека можеби ќе споделува податоци за локацијата со трети страни"</string> </resources> diff --git a/PermissionController/res/values-ml-v33/strings.xml b/PermissionController/res/values-ml-v33/strings.xml index 0b3c72b67..c51a5306a 100644 --- a/PermissionController/res/values-ml-v33/strings.xml +++ b/PermissionController/res/values-ml-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"ലിസ്റ്റ്. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. നടപടികൾ ആവശ്യമാണ്. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"ലിസ്റ്റ് ഇനം. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"എല്ലാ മുന്നറിയിപ്പുകളും കാണുക"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{വികസിപ്പിച്ച് ഒരു മുന്നറിയിപ്പ് കൂടി കാണുക}other{വികസിപ്പിച്ച് # മുന്നറിയിപ്പ് കൂടി കാണുക}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"മുന്നറിയിപ്പ്. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"മുന്നറിയിപ്പ്. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-ml/strings.xml b/PermissionController/res/values-ml/strings.xml index 51d1ee618..33b2ba252 100644 --- a/PermissionController/res/values-ml/strings.xml +++ b/PermissionController/res/values-ml/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"നിങ്ങൾ പകർത്തിയ ടെക്സ്റ്റോ ചിത്രങ്ങളോ മറ്റ് ഉള്ളടക്കമോ ആപ്പുകൾ ആക്സസ് ചെയ്യുമ്പോൾ ഒരു സന്ദേശം കാണിക്കുക"</string> <string name="show_password_title" msgid="2877269286984684659">"പാസ്വേഡുകൾ കാണിക്കുക"</string> <string name="show_password_summary" msgid="1110166488865981610">"ടൈപ്പ് ചെയ്യുന്ന അക്ഷരങ്ങൾ പ്രദർശിപ്പിക്കുക"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"മൂന്നാം കക്ഷികളുമായി ലൊക്കേഷൻ ഡാറ്റ പങ്കിട്ടേക്കാമെന്ന് ഈ ആപ്പ് പ്രസ്താവിക്കുന്നു"</string> </resources> diff --git a/PermissionController/res/values-mn-v33/strings.xml b/PermissionController/res/values-mn-v33/strings.xml index 9aa62490a..8a8ee4562 100644 --- a/PermissionController/res/values-mn-v33/strings.xml +++ b/PermissionController/res/values-mn-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Жагсаалт. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Үйлдэл шаардлагатай. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Жагсаалтын зүйл. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Бүх сэрэмжлүүлгийг харах"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Дэлгээд дахин нэг анхааруулга харах}other{Дэлгээд дахин # анхааруулга харах}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Сэрэмжлүүлэг. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Сэрэмжлүүлэг. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-mn/strings.xml b/PermissionController/res/values-mn/strings.xml index 523334261..48953504b 100644 --- a/PermissionController/res/values-mn/strings.xml +++ b/PermissionController/res/values-mn/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Аппууд таны хуулсан текст, зураг эсвэл бусад контентод хандах үед мессеж харуулах"</string> <string name="show_password_title" msgid="2877269286984684659">"Нууц үгнүүдийг харуулах"</string> <string name="show_password_summary" msgid="1110166488865981610">"Таныг бичиж явцад тэмдэгтүүдийг түр үзүүлэх"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Энэ апп байршлын өгөгдлийг гуравдагч талуудтай хуваалцаж болохыг мэдэгдсэн"</string> </resources> diff --git a/PermissionController/res/values-mr-v33/strings.xml b/PermissionController/res/values-mr-v33/strings.xml index f3e2586a2..b7c5233bc 100644 --- a/PermissionController/res/values-mr-v33/strings.xml +++ b/PermissionController/res/values-mr-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"सूची. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. कृती आवश्यक. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"सूची आयटम. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"सर्व सूचना पहा"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{विस्तार करा आणि आणखी एक सूचना पहा}other{विस्तार करा आणि आणखी # सूचना पहा}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"इशारा. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"इशारा. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-mr/strings.xml b/PermissionController/res/values-mr/strings.xml index 16dec4a63..258b72a3a 100644 --- a/PermissionController/res/values-mr/strings.xml +++ b/PermissionController/res/values-mr/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"तुम्ही कॉपी केलेला मजकूर, इमेज किंवा इतर आशय ॲप्स अॅक्सेस करतात तेव्हा, मेसेज दाखवा"</string> <string name="show_password_title" msgid="2877269286984684659">"पासवर्ड दाखवा"</string> <string name="show_password_summary" msgid="1110166488865981610">"तुम्ही टाइप कराल त्याप्रमाणे वर्ण थोडक्यात डिस्प्ले करा"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"हे अॅप तृतीय पक्षांसोबत स्थान डेटा शेअर करू शकते असे या अॅपने नमूद केले आहे"</string> </resources> diff --git a/PermissionController/res/values-ms-v33/strings.xml b/PermissionController/res/values-ms-v33/strings.xml index c59d75274..f4bdcb11d 100644 --- a/PermissionController/res/values-ms-v33/strings.xml +++ b/PermissionController/res/values-ms-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Senarai. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Tindakan diperlukan. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Senaraikan item. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Lihat semua makluman"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Kembangkan dan lihat satu makluman lagi}other{Kembangkan dan lihat # makluman lagi}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Amaran. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Amaran. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-my-v33/strings.xml b/PermissionController/res/values-my-v33/strings.xml index 0c56c669a..98c5da04d 100644 --- a/PermissionController/res/values-my-v33/strings.xml +++ b/PermissionController/res/values-my-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"စာရင်း။ <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>။ လုပ်ဆောင်ချက် လိုအပ်သည်။ <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"အကြောင်းအရာကို စာရင်းလုပ်နိုင်သည်။ <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>။ <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>။ <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"သတိပေးချက်အားလုံး ကြည့်ရန်"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{ချဲ့ပြီး သတိပေးချက်နောက်တစ်ခု ကြည့်ရန်}other{ချဲ့ပြီး သတိပေးချက်နောက် # ခု ကြည့်ရန်}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"သတိပေးချက်။ <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>။ <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"သတိပေးချက်။ <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>။ <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>။ <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-my/strings.xml b/PermissionController/res/values-my/strings.xml index ae1be78e4..0d17f9edb 100644 --- a/PermissionController/res/values-my/strings.xml +++ b/PermissionController/res/values-my/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"အက်ပ်များက သင်မိတ္တူကူးထားသော စာသား၊ ပုံများ (သို့) အခြားအကြောင်းအရာကို သုံးသောအခါ အကြောင်းကြားပါ"</string> <string name="show_password_title" msgid="2877269286984684659">"စကားဝှက်များပြရန်"</string> <string name="show_password_summary" msgid="1110166488865981610">"စာရိုက်သည့်အခါ အက္ခရာများကို ခဏတာပြသည်"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"ဤအက်ပ်က ၎င်းသည် ဒေတာကို ပြင်ပအဖွဲ့များနှင့် မျှဝေနိုင်ကြောင်း ဖော်ပြထားသည်"</string> </resources> diff --git a/PermissionController/res/values-nb-v33/strings.xml b/PermissionController/res/values-nb-v33/strings.xml index ff20e29fe..3fd17433c 100644 --- a/PermissionController/res/values-nb-v33/strings.xml +++ b/PermissionController/res/values-nb-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Liste. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Handlinger kreves. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Listeelement. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Se alle varslene"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Dobbelttrykk for å se et varsel til}other{Dobbelttrykk for å se # varsler til}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Varsel. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Varsel. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-nb/strings.xml b/PermissionController/res/values-nb/strings.xml index 08b1131a2..b2d11a57d 100644 --- a/PermissionController/res/values-nb/strings.xml +++ b/PermissionController/res/values-nb/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Vis en melding når apper bruker tekst, bilder eller annet innhold du har kopiert"</string> <string name="show_password_title" msgid="2877269286984684659">"Vis passord"</string> <string name="show_password_summary" msgid="1110166488865981610">"Vis tegnene et øyeblikk mens du skriver"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Denne appen har oppgitt at den kan dele posisjonsdata med tredjeparter"</string> </resources> diff --git a/PermissionController/res/values-ne-v33/strings.xml b/PermissionController/res/values-ne-v33/strings.xml index ff208ec7b..981dbf1ec 100644 --- a/PermissionController/res/values-ne-v33/strings.xml +++ b/PermissionController/res/values-ne-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"सूची। <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>। कारबाही गरिनु पर्छ। <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"सूचीमा रहेको वस्तु। <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>। <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>। <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"सबै अलर्टहरू हेर्नुहोस्"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{एक्स्पान्ड गरेर थप एउटा अलर्ट हेर्नुहोस्}other{एक्स्पान्ड गरेर थप # वटा अलर्ट हेर्नुहोस्}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"अलर्ट। <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>। <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"अलर्ट। <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>। <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>। <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-ne/strings.xml b/PermissionController/res/values-ne/strings.xml index 40c0e6dd8..0ee6fe4b9 100644 --- a/PermissionController/res/values-ne/strings.xml +++ b/PermissionController/res/values-ne/strings.xml @@ -341,7 +341,7 @@ <string name="no_permissions_allowed" msgid="6081976856354669209">"कुनै पनि अनुमति छैन"</string> <string name="no_permissions_denied" msgid="8159923922804043282">"कुनै पनि अनुमति अस्वीकार गरिएको छैन"</string> <string name="no_apps_allowed" msgid="7718822655254468631">"कुनै पनि एपलाई अनुमति दिइएको छैन"</string> - <string name="no_apps_allowed_full" msgid="8011716991498934104">"सबै फाइलहरू कुनै पनि एपमा राख्न सकिँदैन"</string> + <string name="no_apps_allowed_full" msgid="8011716991498934104">"कुनै एपलाई सबै फाइलको अनुमति दिइएको छैन"</string> <string name="no_apps_allowed_scoped" msgid="4908850477787659501">"कुनै पनि एपलाई मिडिया फाइल मात्र प्रयोग गर्ने अनुमति दिइएको छैन"</string> <string name="no_apps_denied" msgid="7663435886986784743">"सबै एपलाई अनुमति दिइएको छ"</string> <string name="car_permission_selected" msgid="180837028920791596">"चयन गरिएको"</string> @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"मैले कपी गरेका टेक्स्ट, फोटो वा अन्य सामग्री एपहरूले प्रयोग गर्दा म्यासेज देखाइयोस्"</string> <string name="show_password_title" msgid="2877269286984684659">"पासवर्डहरू देखाइयोस्"</string> <string name="show_password_summary" msgid="1110166488865981610">"टाइप गर्दै गर्दा वर्णहरू झलक्क देखाइयोस्"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"यो एपले यसले लोकेसन डेटा तेस्रो पक्षसँग सेयर गर्न सक्छ भन्ने जानकारी दिएको छ"</string> </resources> diff --git a/PermissionController/res/values-nl-v33/strings.xml b/PermissionController/res/values-nl-v33/strings.xml index b54b66233..fa0e72b2a 100644 --- a/PermissionController/res/values-nl-v33/strings.xml +++ b/PermissionController/res/values-nl-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lijst. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Acties vereist. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Lijstitem. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Alle meldingen bekijken"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Uitvouwen en nog 1 melding bekijken}other{Uitvouwen en nog # meldingen bekijken}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Melding. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Melding. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-nl/strings.xml b/PermissionController/res/values-nl/strings.xml index b445a0867..8d153e0c6 100644 --- a/PermissionController/res/values-nl/strings.xml +++ b/PermissionController/res/values-nl/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Toon een bericht als apps toegang hebben tot tekst, afbeeldingen of andere content die je hebt gekopieerd"</string> <string name="show_password_title" msgid="2877269286984684659">"Wachtwoorden tonen"</string> <string name="show_password_summary" msgid="1110166488865981610">"Tekens kort tonen terwijl je typt"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Deze app geeft aan dat locatiegegevens kunnen worden gedeeld met derden"</string> </resources> diff --git a/PermissionController/res/values-or-v33/strings.xml b/PermissionController/res/values-or-v33/strings.xml index 006862b13..e6dd8caea 100644 --- a/PermissionController/res/values-or-v33/strings.xml +++ b/PermissionController/res/values-or-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"ତାଲିକା। <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>। ପଦକ୍ଷେପ ନେବା ଆବଶ୍ୟକ। <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"ତାଲିକା ଆଇଟମ। <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>। <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>। <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"ସମସ୍ତ ଆଲର୍ଟ ଦେଖନ୍ତୁ"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{ବିସ୍ତାର କରି ଆଉ ଗୋଟିଏ ଆଲର୍ଟ ଦେଖନ୍ତୁ}other{ବିସ୍ତାର କରି ଆଉ #ଟି ଆଲର୍ଟ ଦେଖନ୍ତୁ}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"ଆଲର୍ଟ। <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>। <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"ଆଲର୍ଟ। <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>। <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>। <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-or/strings.xml b/PermissionController/res/values-or/strings.xml index 279e1586e..7446f3a66 100644 --- a/PermissionController/res/values-or/strings.xml +++ b/PermissionController/res/values-or/strings.xml @@ -394,7 +394,7 @@ <string name="role_call_screening_request_description" msgid="7338511921032446006">"କୌଣସି ଅନୁମତି ଆବଶ୍ୟକ ନାହିଁ"</string> <string name="role_automotive_navigation_label" msgid="2701890757955474751">"ଡିଫଲ୍ଟ ନାଭିଗେସନ ଆପ"</string> <string name="role_automotive_navigation_short_label" msgid="5165823092506922457">"ନାଭିଗେସନ ଆପ"</string> - <string name="role_automotive_navigation_description" msgid="7834601873792870134">"ଉଲ୍ଲେଖନୀୟ-ସ୍ଥାନର ସନ୍ଧାନ ଏବଂ ପର୍ଯ୍ୟାୟକ୍ରମେ ନାଭିଗେସନ ପାଇଁ ମାର୍ଗଦର୍ଶନର ସୁବିଧା ପ୍ରଦାନ କରିପାରୁଥିବା ଆପଗୁଡ଼ିକ"</string> + <string name="role_automotive_navigation_description" msgid="7834601873792870134">"ଉଲ୍ଲେଖନୀୟ-ସ୍ଥାନର ସର୍ଚ୍ଚ ଏବଂ ପର୍ଯ୍ୟାୟକ୍ରମେ ନାଭିଗେସନ ପାଇଁ ମାର୍ଗଦର୍ଶନର ସୁବିଧା ପ୍ରଦାନ କରିପାରୁଥିବା ଆପ୍ସ"</string> <string name="role_automotive_navigation_request_title" msgid="7525693151489384300">"<xliff:g id="APP_NAME">%1$s</xliff:g>କୁ ଆପଣଙ୍କ ଡିଫଲ୍ଟ ନାଭିଗେସନ ଆପ ଭାବେ ସେଟ କରିବେ?"</string> <string name="role_automotive_navigation_request_description" msgid="7073023813249245540">"କୌଣସି ଅନୁମତି ଆବଶ୍ୟକ ନାହିଁ"</string> <string name="role_watch_description" msgid="267003778693177779">"ଆପଣଙ୍କ ବିଜ୍ଞପ୍ତିଗୁଡ଼ିକ ସହ ଇଣ୍ଟରାକ୍ଟ କରିବା ଏବଂ ଆପଣଙ୍କ ଫୋନ୍, SMS, ଯୋଗାଯୋଗ ଓ କ୍ୟାଲେଣ୍ଡର ଅନୁମତିଗୁଡ଼ିକୁ ଆକ୍ସେସ୍ କରିବା ପାଇଁ <xliff:g id="APP_NAME">%1$s</xliff:g>କୁ ଅନୁମତି ଦିଆଯିବ।"</string> @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"ଯେତେବେଳେ ଆପଣ କପି କରିଥିବା ଟେକ୍ସଟ, ଇମେଜ କିମ୍ବା ଅନ୍ୟ ବିଷୟବସ୍ତୁକୁ ଆପ୍ସ ଆକ୍ସେସ କରେ, ସେତେବେଳେ ଏକ ମେସେଜ ଦେଖାନ୍ତୁ"</string> <string name="show_password_title" msgid="2877269286984684659">"ପାସୱାର୍ଡଗୁଡ଼ିକ ଦେଖାନ୍ତୁ"</string> <string name="show_password_summary" msgid="1110166488865981610">"ଆପଣ ଟାଇପ କରିବା ସମୟରେ କେରେକ୍ଟରଗୁଡ଼ିକୁ କିଛି ସମୟ ପାଇଁ ଡିସପ୍ଲେ କରନ୍ତୁ"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"ଏହି ଆପ ଉଲ୍ଲେଖ କରିଛି ଯେ ଏହା ତୃତୀୟ ପକ୍ଷଗୁଡ଼ିକ ସହ ଲୋକେସନ ଡାଟା ସେୟାର କରିପାରେ"</string> </resources> diff --git a/PermissionController/res/values-pa-v33/strings.xml b/PermissionController/res/values-pa-v33/strings.xml index 60ddc1782..fc5bf4e33 100644 --- a/PermissionController/res/values-pa-v33/strings.xml +++ b/PermissionController/res/values-pa-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"ਸੂਚੀ। <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. ਕਾਰਵਾਈਆਂ ਦੀ ਲੋੜ ਹੈ। <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"ਸੂਚੀ ਆਈਟਮ। <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"ਸਾਰੀਆਂ ਸੁਚੇਤਨਾਵਾਂ ਦੇਖੋ"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ ਇੱਕ ਹੋਰ ਸੁਚੇਤਨਾ ਦੇਖੋ}one{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਸੁਚੇਤਨਾ ਦੇਖੋ}other{ਵਿਸਤਾਰ ਕਰੋ ਅਤੇ # ਹੋਰ ਸੁਚੇਤਨਾਵਾਂ ਦੇਖੋ}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"ਸੁਚੇਤਨਾ। <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"ਸੁਚੇਤਨਾ। <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>। <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-pa/strings.xml b/PermissionController/res/values-pa/strings.xml index 0b0918350..6d78f81ee 100644 --- a/PermissionController/res/values-pa/strings.xml +++ b/PermissionController/res/values-pa/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"ਜਦੋਂ ਐਪਾਂ ਲਿਖਤ, ਚਿੱਤਰ ਜਾਂ ਤੁਹਾਡੇ ਵੱਲੋਂ ਕਾਪੀ ਕੀਤੀ ਹੋਰ ਸਮੱਗਰੀ ਤੱਕ ਪਹੁੰਚ ਕਰਦੀਆਂ ਹਨ, ਤਾਂ ਕੋਈ ਸੁਨੇਹਾ ਦਿਖਾਓ"</string> <string name="show_password_title" msgid="2877269286984684659">"ਪਾਸਵਰਡ ਦਿਖਾਓ"</string> <string name="show_password_summary" msgid="1110166488865981610">"ਟਾਈਪ ਕਰਨ ਵੇਲੇ ਅੱਖਰ-ਚਿੰਨ੍ਹਾਂ ਨੂੰ ਥੋੜ੍ਹੇ ਸਮੇਂ ਲਈ ਦਿਖਾਓ"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"ਇਸ ਐਪ ਨੇ ਸਪਸ਼ਟ ਕੀਤਾ ਕਿ ਇਹ ਤੀਜੀਆਂ ਧਿਰਾਂ ਨਾਲ ਟਿਕਾਣੇ ਦੇ ਡਾਟੇ ਨੂੰ ਸਾਂਝਾ ਕਰ ਸਕਦੀ ਹੈ"</string> </resources> diff --git a/PermissionController/res/values-pl-v33/strings.xml b/PermissionController/res/values-pl-v33/strings.xml index 531a91a63..9de94e5b5 100644 --- a/PermissionController/res/values-pl-v33/strings.xml +++ b/PermissionController/res/values-pl-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lista. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Wymagane działanie. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Pozycja na liście. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Zobacz wszystkie alerty"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Rozwiń i zobacz jeszcze 1 alert}few{Rozwiń i zobacz jeszcze # alerty}many{Rozwiń i zobacz jeszcze # alertów}other{Rozwiń i zobacz jeszcze # alertu}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alert. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alert. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-pl/strings.xml b/PermissionController/res/values-pl/strings.xml index dfcdf6b9d..dda7cfd69 100644 --- a/PermissionController/res/values-pl/strings.xml +++ b/PermissionController/res/values-pl/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Pokazuj komunikat, gdy aplikacja uzyskuje dostęp do skopiowanego tekstu, obrazów lub innych treści"</string> <string name="show_password_title" msgid="2877269286984684659">"Pokazuj hasła"</string> <string name="show_password_summary" msgid="1110166488865981610">"Wpisywane znaki są przez chwilę wyświetlane"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Ta aplikacja deklaruje, że może udostępniać dane o lokalizacji osobom trzecim"</string> </resources> diff --git a/PermissionController/res/values-pt-rBR-v33/strings.xml b/PermissionController/res/values-pt-rBR-v33/strings.xml index f8cd3b632..f27047529 100644 --- a/PermissionController/res/values-pt-rBR-v33/strings.xml +++ b/PermissionController/res/values-pt-rBR-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lista. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Ações necessárias. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Item da lista. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Ver todos os alertas"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Abra para ver mais um alerta}one{Abra para ver mais # alerta}many{Abra para ver mais # de alertas}other{Abra para ver mais # alertas}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-pt-rBR/strings.xml b/PermissionController/res/values-pt-rBR/strings.xml index 68af9ef5d..1558cdcc4 100644 --- a/PermissionController/res/values-pt-rBR/strings.xml +++ b/PermissionController/res/values-pt-rBR/strings.xml @@ -165,7 +165,7 @@ <string name="permission_usage_bar_chart_title_last_minute" msgid="820450867183487607">"Uso da permissão no último minuto"</string> <string name="permission_usage_preference_summary_not_used_in_past_n_days" msgid="4771868094611359651">"{count,plural, =1{Não usado no último # dia}one{Não usado no último # dia}many{Não usado nos últimos # de dias}other{Não usado nos últimos # dias}}"</string> <string name="permission_usage_preference_summary_not_used_in_past_n_hours" msgid="3828973177433435742">"{count,plural, =1{Não usado na última # hora}one{Não usado na última # hora}many{Não usado nas últimas # de horas}other{Não usado nas últimas # horas}}"</string> - <string name="permission_usage_preference_label" msgid="8343167938128676378">"{count,plural, =1{Permissões usadas por 1 app}one{Permissões usadas por # app}many{Used by # apps}other{Permissões usadas por # apps}}"</string> + <string name="permission_usage_preference_label" msgid="8343167938128676378">"{count,plural, =1{Permissões usadas por 1 app}one{Permissões usadas por # app}many{Permissões usadas por # apps}other{Permissões usadas por # apps}}"</string> <string name="permission_usage_view_details" msgid="6675335735468752787">"Ver tudo no painel"</string> <string name="app_permission_usage_filter_label" msgid="7182861154638631550">"Filtrado por: <xliff:g id="PERM">%1$s</xliff:g>"</string> <string name="app_permission_usage_remove_filter" msgid="2926157607436428207">"Remover filtro"</string> diff --git a/PermissionController/res/values-pt-rPT-v33/strings.xml b/PermissionController/res/values-pt-rPT-v33/strings.xml index 89f1789e7..58ecb9496 100644 --- a/PermissionController/res/values-pt-rPT-v33/strings.xml +++ b/PermissionController/res/values-pt-rPT-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lista. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Ações necessárias. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Item de lista. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Veja todos os alertas"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Expandir e ver mais um alerta}many{Expandir e ver mais # alertas}other{Expandir e ver mais # alertas}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-pt-v33/strings.xml b/PermissionController/res/values-pt-v33/strings.xml index f8cd3b632..f27047529 100644 --- a/PermissionController/res/values-pt-v33/strings.xml +++ b/PermissionController/res/values-pt-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lista. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Ações necessárias. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Item da lista. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Ver todos os alertas"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Abra para ver mais um alerta}one{Abra para ver mais # alerta}many{Abra para ver mais # de alertas}other{Abra para ver mais # alertas}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alerta. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-pt/strings.xml b/PermissionController/res/values-pt/strings.xml index 68af9ef5d..1558cdcc4 100644 --- a/PermissionController/res/values-pt/strings.xml +++ b/PermissionController/res/values-pt/strings.xml @@ -165,7 +165,7 @@ <string name="permission_usage_bar_chart_title_last_minute" msgid="820450867183487607">"Uso da permissão no último minuto"</string> <string name="permission_usage_preference_summary_not_used_in_past_n_days" msgid="4771868094611359651">"{count,plural, =1{Não usado no último # dia}one{Não usado no último # dia}many{Não usado nos últimos # de dias}other{Não usado nos últimos # dias}}"</string> <string name="permission_usage_preference_summary_not_used_in_past_n_hours" msgid="3828973177433435742">"{count,plural, =1{Não usado na última # hora}one{Não usado na última # hora}many{Não usado nas últimas # de horas}other{Não usado nas últimas # horas}}"</string> - <string name="permission_usage_preference_label" msgid="8343167938128676378">"{count,plural, =1{Permissões usadas por 1 app}one{Permissões usadas por # app}many{Used by # apps}other{Permissões usadas por # apps}}"</string> + <string name="permission_usage_preference_label" msgid="8343167938128676378">"{count,plural, =1{Permissões usadas por 1 app}one{Permissões usadas por # app}many{Permissões usadas por # apps}other{Permissões usadas por # apps}}"</string> <string name="permission_usage_view_details" msgid="6675335735468752787">"Ver tudo no painel"</string> <string name="app_permission_usage_filter_label" msgid="7182861154638631550">"Filtrado por: <xliff:g id="PERM">%1$s</xliff:g>"</string> <string name="app_permission_usage_remove_filter" msgid="2926157607436428207">"Remover filtro"</string> diff --git a/PermissionController/res/values-ro-v33/strings.xml b/PermissionController/res/values-ro-v33/strings.xml index fb3635eee..ed1565ba1 100644 --- a/PermissionController/res/values-ro-v33/strings.xml +++ b/PermissionController/res/values-ro-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Listă. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Acțiuni necesare. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Articol din listă. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Afișează toate alertele"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Extinde și mai vezi o alertă}few{Extinde și mai vezi # alerte}other{Extinde și mai vezi # de alerte}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alertă. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alertă. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-ro/strings.xml b/PermissionController/res/values-ro/strings.xml index f544a7438..39f115a52 100644 --- a/PermissionController/res/values-ro/strings.xml +++ b/PermissionController/res/values-ro/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Afișează un mesaj când aplicațiile accesează text, imagini sau alte tipuri de conținut pe care le-ai copiat"</string> <string name="show_password_title" msgid="2877269286984684659">"Afișează parolele"</string> <string name="show_password_summary" msgid="1110166488865981610">"Caracterele se afișează pentru scurt timp, pe măsură ce tastezi"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Aplicația afirmă că poate trimite terților date privind locațiile"</string> </resources> diff --git a/PermissionController/res/values-ru-v33/strings.xml b/PermissionController/res/values-ru-v33/strings.xml index b5b77b49a..4858160a1 100644 --- a/PermissionController/res/values-ru-v33/strings.xml +++ b/PermissionController/res/values-ru-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Список. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Требуется действие. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Пункт списка. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>, <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Все оповещения"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Разверните, чтобы увидеть ещё одно оповещение}one{Разверните, чтобы увидеть ещё # оповещение}few{Разверните, чтобы увидеть ещё # оповещения}many{Разверните, чтобы увидеть ещё # оповещений}other{Разверните, чтобы увидеть ещё # оповещения}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Оповещение: <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Оповещение: <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g> (<xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>). <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-ru/strings.xml b/PermissionController/res/values-ru/strings.xml index 7450c89e5..694120728 100644 --- a/PermissionController/res/values-ru/strings.xml +++ b/PermissionController/res/values-ru/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Показывать уведомления, когда приложения обращаются к скопированному тексту, изображениям или другому контенту"</string> <string name="show_password_title" msgid="2877269286984684659">"Показывать пароли"</string> <string name="show_password_summary" msgid="1110166488865981610">"Ненадолго показывать символы при вводе"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Это приложение может передавать третьим лицам данные о местоположении."</string> </resources> diff --git a/PermissionController/res/values-si-v33/strings.xml b/PermissionController/res/values-si-v33/strings.xml index ba8145780..0791c0541 100644 --- a/PermissionController/res/values-si-v33/strings.xml +++ b/PermissionController/res/values-si-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"ලැයිස්තුව. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. ක්රියාමාර්ග අවශ්යයි. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"ලැයිස්තු අයිතමය. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"සියලු ඇඟවීම් දකින්න"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{පුළුල් කර තවත් එක් ඇඟවීමක් බලන්න}one{පුළුල් කර තවත් ඇඟවීම් #ක් බලන්න}other{පුළුල් කර තවත් ඇඟවීම් #ක් බලන්න}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"ඇඟවීම. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"ඇඟවීම. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-si/strings.xml b/PermissionController/res/values-si/strings.xml index 48f3d63fb..f4b089d72 100644 --- a/PermissionController/res/values-si/strings.xml +++ b/PermissionController/res/values-si/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"යෙදුම් ඔබ පිටපත් කර ඇති පාඨ, රූප හෝ වෙනත් අන්තර්ගතය වෙත ප්රවේශ වන විට පණිවුඩයක් පෙන්වන්න"</string> <string name="show_password_title" msgid="2877269286984684659">"මුරපද පෙන්වන්න"</string> <string name="show_password_summary" msgid="1110166488865981610">"ඔබ ටයිප් කරන විට අනුලකුණු කෙටියෙන් පෙන්වන්න"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"මෙම යෙදුම තෙවන පාර්ශ්වයන් සමග ස්ථාන දත්ත බෙදා ගත හැකි බව ප්රකාශ කර ඇත"</string> </resources> diff --git a/PermissionController/res/values-sk-v33/strings.xml b/PermissionController/res/values-sk-v33/strings.xml index 91ed64d29..ab31cdc1e 100644 --- a/PermissionController/res/values-sk-v33/strings.xml +++ b/PermissionController/res/values-sk-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Zoznam. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Vyžaduje sa akcia. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Položka zoznamu. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>."</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Zobraziť všetky upozornenia"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Po rozbalení sa zobrazí jedno ďalšie upozornenie}few{Po rozbalení sa zobrazia # ďalšie upozornenia}many{Expand and see # more alerts}other{Po rozbalení sa zobrazí # ďalších upozornení}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Upozornenie. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Upozornenie. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-sl-v33/strings.xml b/PermissionController/res/values-sl-v33/strings.xml index ccc00246f..130a00ed3 100644 --- a/PermissionController/res/values-sl-v33/strings.xml +++ b/PermissionController/res/values-sl-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Seznam. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Potrebno je ukrepanje. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Element na seznamu. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Ogled vseh opozoril"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Razširi in prikaži še eno opozorilo}one{Razširi in prikaži še # opozorilo}two{Razširi in prikaži še # opozorili}few{Razširi in prikaži še # opozorila}other{Razširi in prikaži še # opozoril}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Opozorilo. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Opozorilo. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-sl/strings.xml b/PermissionController/res/values-sl/strings.xml index da2ea96b2..b43f71cd6 100644 --- a/PermissionController/res/values-sl/strings.xml +++ b/PermissionController/res/values-sl/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Pokaži sporočilo, ko aplikacije dostopijo do besedila, slik ali drugih vsebin, ki ste jih kopirali."</string> <string name="show_password_title" msgid="2877269286984684659">"Pokaži gesla"</string> <string name="show_password_summary" msgid="1110166488865981610">"Za trenutek prikaži znake med vnašanjem."</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Ta aplikacija navaja, da bo lokacijske podatke morda delila s tretjimi osebami."</string> </resources> diff --git a/PermissionController/res/values-sq-v33/strings.xml b/PermissionController/res/values-sq-v33/strings.xml index 3a48834f9..45927c944 100644 --- a/PermissionController/res/values-sq-v33/strings.xml +++ b/PermissionController/res/values-sq-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lista. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Nevojiten veprime. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Artikulli i listës. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Shiko të gjitha sinjalizimet"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Zgjero dhe shiko një sinjalizim tjetër}other{Zgjero dhe shiko # sinjalizime të tjera}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Sinjalizim. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Sinjalizim. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-sq/strings.xml b/PermissionController/res/values-sq/strings.xml index 0e6ac513c..8fbd4aa48 100644 --- a/PermissionController/res/values-sq/strings.xml +++ b/PermissionController/res/values-sq/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Shfaq një mesazh kur aplikacionet qasen te tekstet, imazhet ose përmbajtje të tjera që ke kopjuar"</string> <string name="show_password_title" msgid="2877269286984684659">"Shfaq fjalëkalimet"</string> <string name="show_password_summary" msgid="1110166488865981610">"Shfaq karakteret shkurtimisht kur shkruan"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Ky aplikacion deklaroi se mund të ndajë të dhënat e vendndodhjes me palë të treta"</string> </resources> diff --git a/PermissionController/res/values-sr-v33/strings.xml b/PermissionController/res/values-sr-v33/strings.xml index 7c10efd3a..67fb03c25 100644 --- a/PermissionController/res/values-sr-v33/strings.xml +++ b/PermissionController/res/values-sr-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Листа: <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Треба да реагујете. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Ставка листе. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Прикажи сва обавештења"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Проширите и видите још једно обавештење}one{Проширите и видите још # обавештење}few{Проширите и видите још # обавештења}other{Проширите и видите још # обавештења}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Обавештење. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Обавештење. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-sr/strings.xml b/PermissionController/res/values-sr/strings.xml index 661d3bf2c..6c9be2d47 100644 --- a/PermissionController/res/values-sr/strings.xml +++ b/PermissionController/res/values-sr/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Приказује поруку када апликације приступају тексту, сликама или другом садржају који сте копирали"</string> <string name="show_password_title" msgid="2877269286984684659">"Приказуј лозинке"</string> <string name="show_password_summary" msgid="1110166488865981610">"Приказује знакове накратко док куцате"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Ова апликација наводи да може да дели податке са трећим странама"</string> </resources> diff --git a/PermissionController/res/values-sv-v33/strings.xml b/PermissionController/res/values-sv-v33/strings.xml index 220c2c304..408c889ed 100644 --- a/PermissionController/res/values-sv-v33/strings.xml +++ b/PermissionController/res/values-sv-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Lista. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Åtgärder krävs. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Post i listan. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Se alla varningar"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Utöka för att visa en varning till}other{Utöka för att visa # varningar till}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Varning. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Varning. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> @@ -40,7 +41,7 @@ <string name="safety_center_qs_privacy_control" msgid="1160682635058529673">"Brytare. <xliff:g id="PRIVACY_CONTROL_TITLE">%1$s</xliff:g>. <xliff:g id="PRIVACY_CONTROL_STATUS">%2$s</xliff:g>"</string> <string name="safety_center_qs_toggle_action" msgid="5920465736488119255">"Aktivera och inaktivera"</string> <string name="safety_center_qs_open_action" msgid="2760200829912423728">"Öppna"</string> - <string name="safety_center_review_settings_button" msgid="938981137942443930">"Granska inställningarna"</string> + <string name="safety_center_review_settings_button" msgid="938981137942443930">"Granska inställningarna"</string> <string name="safety_center_gear_label" msgid="5175877094379694098">"Inställningar"</string> <string name="safety_center_info_label" msgid="8993181584061825412">"Information"</string> </resources> diff --git a/PermissionController/res/values-sv/strings.xml b/PermissionController/res/values-sv/strings.xml index 9843cfadc..58c69cd50 100644 --- a/PermissionController/res/values-sv/strings.xml +++ b/PermissionController/res/values-sv/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Visa ett meddelande när appar får åtkomst till text, bilder eller annat som du har kopierat"</string> <string name="show_password_title" msgid="2877269286984684659">"Visa lösenord"</string> <string name="show_password_summary" msgid="1110166488865981610">"Visa tecknen en kort stund medan du skriver"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Appen har angett att den kan dela platsdata med tredje part"</string> </resources> diff --git a/PermissionController/res/values-sw-v33/strings.xml b/PermissionController/res/values-sw-v33/strings.xml index cd16208aa..a0bf405c3 100644 --- a/PermissionController/res/values-sw-v33/strings.xml +++ b/PermissionController/res/values-sw-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Orodha. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Unahitaji kuchukua hatua. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Kipengee cha orodha. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Angalia tahadhari zote"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Panua na uangalie arifa moja zaidi}other{Panua na uangalie arifa # zaidi}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Arifa. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Arifa. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-sw/strings.xml b/PermissionController/res/values-sw/strings.xml index f559781a9..7024e384e 100644 --- a/PermissionController/res/values-sw/strings.xml +++ b/PermissionController/res/values-sw/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Onyesha ujumbe programu zinapofikia maandishi, picha au maudhui mengine uliyonakili"</string> <string name="show_password_title" msgid="2877269286984684659">"Onyesha manenosiri"</string> <string name="show_password_summary" msgid="1110166488865981610">"Onyesha herufi kwa muda mfupi unapoandika"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Maelezo ya programu yanasema kuwa inaweza kushiriki data na kampuni za wengine"</string> </resources> diff --git a/PermissionController/res/values-ta-v33/strings.xml b/PermissionController/res/values-ta-v33/strings.xml index 77fdb5c0b..9ee5c46af 100644 --- a/PermissionController/res/values-ta-v33/strings.xml +++ b/PermissionController/res/values-ta-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"பட்டியல். <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. நடவடிக்கைகள் தேவை. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"பட்டியல் ஆவணம். <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"அனைத்து அறிவிப்புகளையும் காட்டுதல்"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{விரிவாக்கி மேலும் ஒரு விழிப்பூட்டலைப் பாருங்கள்}other{விரிவாக்கி மேலும் # விழிப்பூட்டல்களைப் பாருங்கள்}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"விழிப்பூட்டல். <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"விழிப்பூட்டல். <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-ta/strings.xml b/PermissionController/res/values-ta/strings.xml index 80d959431..151ba1391 100644 --- a/PermissionController/res/values-ta/strings.xml +++ b/PermissionController/res/values-ta/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"நீங்கள் நகலெடுத்த வார்த்தைகளையோ படங்களையோ பிறவற்றையோ ஆப்ஸ் அணுகும்போது ஓர் அறிவிப்பைக் காட்டும்"</string> <string name="show_password_title" msgid="2877269286984684659">"கடவுச்சொற்களைக் காட்டுதல்"</string> <string name="show_password_summary" msgid="1110166488865981610">"டைப் செய்யும்போதே எழுத்துகளைச் சற்று நேரம் காட்டும்"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"மூன்றாம் தரப்பினருடன் இருப்பிடத் தரவைப் பகிரலாம் என இந்த ஆப்ஸ் குறிப்பிடுகிறது"</string> </resources> diff --git a/PermissionController/res/values-te-v33/strings.xml b/PermissionController/res/values-te-v33/strings.xml index 44cc64fee..3057f6900 100644 --- a/PermissionController/res/values-te-v33/strings.xml +++ b/PermissionController/res/values-te-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"లిస్ట్. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. మీ చర్య అవసరం. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"లిస్ట్ ఐటెమ్. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"అన్ని అలర్ట్లను చూడండి"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{విస్తరించి, మరొక అలర్ట్ను చూడండి}other{విస్తరించి, మరో # అలర్ట్లను చూడండి}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"అలర్ట్. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"అలర్ట్. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-th-v33/strings.xml b/PermissionController/res/values-th-v33/strings.xml index afa45ec47..a776a2042 100644 --- a/PermissionController/res/values-th-v33/strings.xml +++ b/PermissionController/res/values-th-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"รายการ <xliff:g id="ENTRY_TITLE">%1$s</xliff:g> จำเป็นต้องดำเนินการ <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"รายการย่อย <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g> <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g> <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"ดูการแจ้งเตือนทั้งหมด"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{ขยายและดูการแจ้งเตือนอีก 1 รายการ}other{ขยายและดูการแจ้งเตือนอีก # รายการ}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"การแจ้งเตือน <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g> <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"การแจ้งเตือน <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g> <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g> <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-tl-v33/strings.xml b/PermissionController/res/values-tl-v33/strings.xml index 7f62a8459..db045b393 100644 --- a/PermissionController/res/values-tl-v33/strings.xml +++ b/PermissionController/res/values-tl-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Listahan. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Mga kailangang pagkilos. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Item sa listahan. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Tingnan ang lahat ng alerto"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{I-expand at makakita ng isa pang alerto}one{I-expand at makakita ng # pang alerto}other{I-expand at makakita ng # pang alerto}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Alerto. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Alerto. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-tr-v33/strings.xml b/PermissionController/res/values-tr-v33/strings.xml index bdbc62443..d0bd721f5 100644 --- a/PermissionController/res/values-tr-v33/strings.xml +++ b/PermissionController/res/values-tr-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Liste. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. İşlem gerekiyor. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Liste öğesi. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Tüm uyarıları göster"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Genişletip bir uyarıyı daha görün}other{Genişletip # uyarıyı daha görün}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Uyarı. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Uyarı. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-tr/strings.xml b/PermissionController/res/values-tr/strings.xml index 85144aba4..d88f6ce03 100644 --- a/PermissionController/res/values-tr/strings.xml +++ b/PermissionController/res/values-tr/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Uygulamalar kopyaladığınız metne, resimlere veya diğer içeriklere eriştiğinde mesaj gösterilsin."</string> <string name="show_password_title" msgid="2877269286984684659">"Şifreleri göster"</string> <string name="show_password_summary" msgid="1110166488865981610">"Yazarken karakterleri kısa süreliğine göster"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Bu uygulama, konum verilerini üçüncü taraflarla paylaşabileceğini belirtti"</string> </resources> diff --git a/PermissionController/res/values-uk-v33/strings.xml b/PermissionController/res/values-uk-v33/strings.xml index 17d1071c6..60832d36f 100644 --- a/PermissionController/res/values-uk-v33/strings.xml +++ b/PermissionController/res/values-uk-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Список. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Потрібно виконати дії. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Пункт списку. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Переглянути всі сповіщення"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Розгорніть і перегляньте ще одне сповіщення}one{Розгорніть і перегляньте ще # сповіщення}few{Розгорніть і перегляньте ще # сповіщення}many{Розгорніть і перегляньте ще # сповіщень}other{Розгорніть і перегляньте ще # сповіщення}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Сповіщення. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Сповіщення. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-uk/strings.xml b/PermissionController/res/values-uk/strings.xml index e3dc01a8c..e45d53790 100644 --- a/PermissionController/res/values-uk/strings.xml +++ b/PermissionController/res/values-uk/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"З’являтиметься сповіщення, коли будь-який додаток отримуватиме доступ до скопійованого вами тексту, зображень чи іншого контенту"</string> <string name="show_password_title" msgid="2877269286984684659">"Показувати паролі"</string> <string name="show_password_summary" msgid="1110166488865981610">"Ненадовго показувати символи під час введення"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Цей додаток зазначає, що може передавати дані про місцезнаходження третім особам"</string> </resources> diff --git a/PermissionController/res/values-ur-v33/strings.xml b/PermissionController/res/values-ur-v33/strings.xml index b899bc4b2..64e14ed54 100644 --- a/PermissionController/res/values-ur-v33/strings.xml +++ b/PermissionController/res/values-ur-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"فہرست۔ <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>۔ کاروائی درکار ہے۔ <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"فہرست آئٹم۔ <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>۔ <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>۔ <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"سبھی الرٹس دیکھیں"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{پھیلائیں اور ایک اور الرٹ دیکھیں}other{پھیلائیں اور # مزید الرٹس دیکھیں}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"الرٹ۔ <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>۔ <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"الرٹ۔ <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>۔ <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>۔ <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-uz-v33/strings.xml b/PermissionController/res/values-uz-v33/strings.xml index ce122c0a3..2db9c3090 100644 --- a/PermissionController/res/values-uz-v33/strings.xml +++ b/PermissionController/res/values-uz-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Roʻyxat. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Amallar bajarish zarur. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Roʻyxat bandi. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Barcha signallar"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Kengaytirish va yana bitta ogohlantirishni ochish}other{Kengaytirish va yana # ta ogohlantirishni ochish}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Ogohlantirish. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Ogohlantirish. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-uz/strings.xml b/PermissionController/res/values-uz/strings.xml index 29c2cccc1..3a32a979d 100644 --- a/PermissionController/res/values-uz/strings.xml +++ b/PermissionController/res/values-uz/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Ilovalar siz nusxa olgan matn, rasmlar yoki boshqa kontentdan foydalanganda xabar chiqarish"</string> <string name="show_password_title" msgid="2877269286984684659">"Parollar ochiq tursin"</string> <string name="show_password_summary" msgid="1110166488865981610">"Parolni kiritishda belgilar qisqa muddat ochiq turadi"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Bu ilovaning maʼlumotlarini begonalarga ulashishi mumkinligi xabar berildi"</string> </resources> diff --git a/PermissionController/res/values-v33/strings.xml b/PermissionController/res/values-v33/strings.xml index 7cc8ac67a..bff633bcc 100644 --- a/PermissionController/res/values-v33/strings.xml +++ b/PermissionController/res/values-v33/strings.xml @@ -41,8 +41,10 @@ <string name="safety_center_entry_group_item_content_description">List item. <xliff:g id="entry item title" example="App security">%1$s</xliff:g>. <xliff:g id="entry item summary" example="Scanning is on">%2$s</xliff:g></string> <!-- Content description for a safety center entry [CHAR LIMIT=NONE]--> <string name="safety_center_entry_content_description"> <xliff:g id="entry item title" example="App security">%1$s</xliff:g>. <xliff:g id="entry item summary" example="Scanning is on">%2$s</xliff:g></string> - <!-- Title for the "See all alerts"/"More issues" card in Safety Center [CHAR LIMIT=NONE]--> - <string name="safety_center_more_issues_card_title">See all alerts</string> + <!-- Title for the "More alerts" card in Safety Center [CHAR LIMIT=NONE]--> + <string name="safety_center_more_issues_card_title">More alerts</string> + <!-- Title for the "Dismissed alerts" card in Safety Center [CHAR LIMIT=NONE]--> + <string name="safety_center_dismissed_issues_card_title">Dismissed alerts</string> <!-- Label for expanding the "See all alerts"/"More issues" card in Safety Center [CHAR LIMIT=NONE] --> <string name="safety_center_more_issues_card_expand_action"> {count, plural, diff --git a/PermissionController/res/values-v33/styles.xml b/PermissionController/res/values-v33/styles.xml index ec7970735..a0d831f90 100644 --- a/PermissionController/res/values-v33/styles.xml +++ b/PermissionController/res/values-v33/styles.xml @@ -550,7 +550,7 @@ <item name="layout_constraintEnd_toEndOf">parent</item> </style> - <style name="SafetyCenterMoreIssues" + <style name="SafetyCenterMoreIssuesCollapsed" parent="SafetyCenterCard.Issue"> <item name="android:paddingTop">@dimen/sc_spacing_medium</item> <item name="android:paddingBottom">@dimen/sc_spacing_medium</item> @@ -584,25 +584,18 @@ <item name="layout_constraintStart_toStartOf">parent</item> </style> - <style name="SafetyCenterMoreIssuesWidgetFrame" - parent="android:Widget.DeviceDefault"> - <item name="android:layout_height">wrap_content</item> - <item name="android:layout_width">wrap_content</item> - <item name="android:gravity">center_vertical</item> - <item name="android:orientation">vertical</item> - <item name="layout_constraintTop_toTopOf">parent</item> - <item name="layout_constraintEnd_toEndOf">parent</item> - <item name="layout_constraintBottom_toBottomOf">parent</item> - </style> - - <style name="SafetyCenterMoreIssuesWidget" + <style name="SafetyCenterMoreIssuesCounter" parent="android:Widget.DeviceDefault"> <item name="android:layout_height">28dp</item> <item name="android:layout_width">wrap_content</item> - <item name="android:orientation">vertical</item> + <item name="android:orientation">horizontal</item> <item name="android:paddingStart">@dimen/sc_spacing_xsmall</item> <item name="android:paddingEnd">@dimen/sc_spacing_xsmall</item> <item name="android:background">@drawable/safety_center_card_widget_background</item> + <item name="android:gravity">center_vertical</item> + <item name="layout_constraintTop_toTopOf">parent</item> + <item name="layout_constraintBottom_toBottomOf">parent</item> + <item name="layout_constraintEnd_toEndOf">parent</item> </style> <style name="SafetyCenterMoreIssuesWidgetTitle" @@ -613,10 +606,6 @@ <item name="android:layout_width">wrap_content</item> <item name="android:layout_marginEnd">@dimen/sc_spacing_xxxsmall</item> <item name="android:maxLines">1</item> - <item name="layout_constraintTop_toTopOf">parent</item> - <item name="layout_constraintBottom_toBottomOf">parent</item> - <item name="layout_constraintEnd_toStartOf">@id/widget_icon</item> - <item name="layout_constraintHorizontal_bias">0</item> </style> <style name="SafetyCenterMoreIssuesWidgetIcon" @@ -624,11 +613,7 @@ <item name="android:layout_height">16dp</item> <item name="android:layout_width">16dp</item> <item name="android:gravity">center</item> - <item name="layout_constraintTop_toTopOf">parent</item> - <item name="layout_constraintBottom_toBottomOf">parent</item> - <item name="layout_constraintEnd_toEndOf">parent</item> <item name="android:scaleType">fitCenter</item> - <item name="android:tint">?android:attr/textColorPrimary</item> </style> <style name="SafetyCenterEntry" diff --git a/PermissionController/res/values-v34/styles.xml b/PermissionController/res/values-v34/styles.xml index 6ff106b27..52f8bec2e 100644 --- a/PermissionController/res/values-v34/styles.xml +++ b/PermissionController/res/values-v34/styles.xml @@ -158,6 +158,49 @@ <!-- END PERMISSION RATIONALE DIALOG --> + <!-- START APP DATA SHARING UPDATES PAGE --> + + <style name="AppDataSharingDetailsContainer"> + <item name="android:layout_width">match_parent</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_marginStart">24dp</item> + <item name="android:layout_marginEnd">24dp</item> + <item name="android:orientation">vertical</item> + <item name="android:clipToPadding">false</item> + </style> + + <style name="AppDataSharingDetailsTextAppearance" + parent="@android:style/TextAppearance.DeviceDefault"> + <item name="android:textColor">?android:attr/textColorSecondary</item> + <item name="android:textSize">14sp</item> + <item name="android:lineHeight">20sp</item> + </style> + + <style name="AppDataSharingDetailsMessage"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_marginTop">8dp</item> + <item name="android:layout_marginBottom">12dp</item> + <item name="android:textAppearance">@style/AppDataSharingDetailsTextAppearance</item> + </style> + + <style name="AppDataSharingNoUpdatesTextAppearance" + parent="@android:style/TextAppearance.DeviceDefault"> + <item name="android:textColor">?android:attr/textColorPrimary</item> + <item name="android:textSize">20sp</item> + <item name="android:lineHeight">24sp</item> + </style> + + <style name="AppDataSharingNoUpdatesMessage"> + <item name="android:layout_width">wrap_content</item> + <item name="android:layout_height">wrap_content</item> + <item name="android:layout_marginTop">28dp</item> + <item name="android:layout_marginBottom">24dp</item> + <item name="android:textAppearance">@style/AppDataSharingNoUpdatesTextAppearance</item> + </style> + + <!-- END APP DATA SHARING UPDATES PAGE --> + <!-- START SAFETY CENTER SUBPAGE --> <style name="SafetyCenterBrandChip"> diff --git a/PermissionController/res/values-vi-v33/strings.xml b/PermissionController/res/values-vi-v33/strings.xml index 00648cdbc..b6bc1736e 100644 --- a/PermissionController/res/values-vi-v33/strings.xml +++ b/PermissionController/res/values-vi-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Danh sách. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Việc cần làm. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Mục trong danh sách. <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Xem tất cả các cảnh báo"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Mở rộng và xem một cảnh báo khác}other{Mở rộng và xem # cảnh báo khác}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Cảnh báo. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Cảnh báo. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-vi/strings.xml b/PermissionController/res/values-vi/strings.xml index 30d4424e2..51427c699 100644 --- a/PermissionController/res/values-vi/strings.xml +++ b/PermissionController/res/values-vi/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Hiện thông báo khi có ứng dụng truy cập vào văn bản, hình ảnh hoặc nội dung khác mà bạn đã sao chép"</string> <string name="show_password_title" msgid="2877269286984684659">"Hiển thị mật khẩu"</string> <string name="show_password_summary" msgid="1110166488865981610">"Hiển thị các ký tự ngắn gọn khi bạn nhập"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Nhà phát triển nêu rõ ứng dụng này có thể chia sẻ dữ liệu vị trí với bên thứ ba"</string> </resources> diff --git a/PermissionController/res/values-zh-rCN-v33/strings.xml b/PermissionController/res/values-zh-rCN-v33/strings.xml index 7d01f05f1..613a7eebb 100644 --- a/PermissionController/res/values-zh-rCN-v33/strings.xml +++ b/PermissionController/res/values-zh-rCN-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"列表。<xliff:g id="ENTRY_TITLE">%1$s</xliff:g>。需要采取行动。<xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"列表项。<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>。<xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>。<xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"查看所有警报"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{展开并查看另外一项提醒}other{展开并查看另外 # 项提醒}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"警报。<xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>。<xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"警报。<xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>。<xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>。<xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-zh-rCN/strings.xml b/PermissionController/res/values-zh-rCN/strings.xml index b5603a891..92ef59eaf 100644 --- a/PermissionController/res/values-zh-rCN/strings.xml +++ b/PermissionController/res/values-zh-rCN/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"系统会在应用访问您复制的文字、图片或其他内容时显示一条消息"</string> <string name="show_password_title" msgid="2877269286984684659">"显示密码"</string> <string name="show_password_summary" msgid="1110166488865981610">"输入时短暂显示字符"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"此应用已声明它可能会与第三方共享位置数据"</string> </resources> diff --git a/PermissionController/res/values-zh-rHK-v33/strings.xml b/PermissionController/res/values-zh-rHK-v33/strings.xml index d510db5ae..a95f88ecb 100644 --- a/PermissionController/res/values-zh-rHK-v33/strings.xml +++ b/PermissionController/res/values-zh-rHK-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"清單。<xliff:g id="ENTRY_TITLE">%1$s</xliff:g>。需採取的行動。<xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"清單項目。<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>。<xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>。<xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"查看所有警示"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{展開即可查看多一個警示}other{展開即可查看多 # 個警示}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"警示。<xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>。<xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"警示。<xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>。<xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>。<xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-zh-rHK/strings.xml b/PermissionController/res/values-zh-rHK/strings.xml index 0ecf597c2..9ae4b0b70 100644 --- a/PermissionController/res/values-zh-rHK/strings.xml +++ b/PermissionController/res/values-zh-rHK/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"系統會在應用程式存取您複製的文字、圖片或其他內容時顯示訊息"</string> <string name="show_password_title" msgid="2877269286984684659">"顯示密碼"</string> <string name="show_password_summary" msgid="1110166488865981610">"輸入時短暫顯示字元"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"此應用程式表明可能會與第三方分享位置資料"</string> </resources> diff --git a/PermissionController/res/values-zh-rTW-v33/strings.xml b/PermissionController/res/values-zh-rTW-v33/strings.xml index 93013baa1..2f72d809a 100644 --- a/PermissionController/res/values-zh-rTW-v33/strings.xml +++ b/PermissionController/res/values-zh-rTW-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"清單。<xliff:g id="ENTRY_TITLE">%1$s</xliff:g>。敬請採取行動。<xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"清單項目。<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>。<xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>。<xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"查看所有警示"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{展開並查看另外 1 則快訊}other{展開並查看另外 # 則快訊}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"警示。<xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>。<xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"警示。<xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>。<xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>。<xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-zh-rTW/strings.xml b/PermissionController/res/values-zh-rTW/strings.xml index 37121e872..e1e236a5f 100644 --- a/PermissionController/res/values-zh-rTW/strings.xml +++ b/PermissionController/res/values-zh-rTW/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"系統會在應用程式存取你複製的文字、圖片或其他內容時顯示通知訊息"</string> <string name="show_password_title" msgid="2877269286984684659">"顯示密碼"</string> <string name="show_password_summary" msgid="1110166488865981610">"輸入密碼時,短暫顯示剛輸入的字元"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"這個應用程式表示可能會將位置資料分享給第三方"</string> </resources> diff --git a/PermissionController/res/values-zu-v33/strings.xml b/PermissionController/res/values-zu-v33/strings.xml index 6a8c3b090..cdc3a14cc 100644 --- a/PermissionController/res/values-zu-v33/strings.xml +++ b/PermissionController/res/values-zu-v33/strings.xml @@ -27,7 +27,8 @@ <string name="safety_center_entry_group_with_actions_needed_content_description" msgid="2708884606775932657">"Uhlu. <xliff:g id="ENTRY_TITLE">%1$s</xliff:g>. Izenzo ezidingekayo. <xliff:g id="ENTRY_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_group_item_content_description" msgid="7348298582877249787">"Faka into ohlwini <xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_entry_content_description" msgid="3639565652938224321">"<xliff:g id="ENTRY_ITEM_TITLE">%1$s</xliff:g>. <xliff:g id="ENTRY_ITEM_SUMMARY">%2$s</xliff:g>"</string> - <string name="safety_center_more_issues_card_title" msgid="8599419758014246517">"Bona zonke izexwayiso"</string> + <!-- no translation found for safety_center_more_issues_card_title (7425844746197493312) --> + <skip /> <string name="safety_center_more_issues_card_expand_action" msgid="7109451851052272946">"{count,plural, =1{Nweba futhi ubone esinye isexwayiso}one{Nweba futhi ubone ezinye izexwayiso ezingu-#}other{Nweba futhi ubone ezinye izexwayiso ezingu-#}}"</string> <string name="safety_center_issue_card_content_description" msgid="1281390769721765363">"Isexwayiso. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%2$s</xliff:g>"</string> <string name="safety_center_issue_card_content_description_with_subtitle" msgid="5504040663935313539">"Isexwayiso. <xliff:g id="ISSUE_CARD_TITLE">%1$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUBTITLE">%2$s</xliff:g>. <xliff:g id="ISSUE_CARD_SUMMARY">%3$s</xliff:g>"</string> diff --git a/PermissionController/res/values-zu/strings.xml b/PermissionController/res/values-zu/strings.xml index 5a13f4045..b11ea9115 100644 --- a/PermissionController/res/values-zu/strings.xml +++ b/PermissionController/res/values-zu/strings.xml @@ -591,6 +591,5 @@ <string name="show_clip_access_notification_summary" msgid="3532020182782112687">"Bonisa umlayezo uma ama-app wakho afinyelela umbhalo, izithombe, noma okunye okuqukethwe okukopishile"</string> <string name="show_password_title" msgid="2877269286984684659">"Bonisa amaphasiwedi"</string> <string name="show_password_summary" msgid="1110166488865981610">"Bonisa izinhlamvu kancane njengoba uthayipha"</string> - <!-- no translation found for permission_rationale_message_location (2153841534298068414) --> - <skip /> + <string name="permission_rationale_message_location" msgid="2153841534298068414">"Le-app ithi ingabelana ngedatha yendawo nezinkampani engahlangene ngqo"</string> </resources> diff --git a/PermissionController/res/values/overlayable.xml b/PermissionController/res/values/overlayable.xml index d62297229..dc212432a 100644 --- a/PermissionController/res/values/overlayable.xml +++ b/PermissionController/res/values/overlayable.xml @@ -388,6 +388,8 @@ <item type="drawable" name="ic_check" /> <item type="drawable" name="ic_chevron_right" /> + <item type="drawable" name="ic_collapse_issues" /> + <item type="drawable" name="ic_expand_issues" /> <item type="drawable" name="ic_expand_less" /> <item type="drawable" name="ic_expand_more" /> <item type="drawable" name="ic_privacy" /> @@ -403,6 +405,8 @@ <item type="drawable" name="ic_settings_gear" /> <item type="drawable" name="ic_settings_info" /> <item type="drawable" name="indicator_background_circle" /> + <item type="drawable" name="more_issues_collapse_anim" /> + <item type="drawable" name="more_issues_expand_anim" /> <item type="drawable" name="safety_center_card_background" /> <item type="drawable" name="safety_center_card_widget_background" /> <item type="drawable" name="safety_center_group_collapse_anim" /> diff --git a/PermissionController/res/xml-v34/app_data_sharing_updates.xml b/PermissionController/res/xml-v34/app_data_sharing_updates.xml index f73944dd7..dd6811bda 100644 --- a/PermissionController/res/xml-v34/app_data_sharing_updates.xml +++ b/PermissionController/res/xml-v34/app_data_sharing_updates.xml @@ -17,7 +17,9 @@ <!-- TODO(b/261666772): Extract to styles where necessary and update to final spec. --> <PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android"> - <Preference android:key="subtitle"/> + <com.android.permissioncontroller.permission.ui.handheld.v34.AppDataSharingDetailsPreference + android:key="details" + android:selectable="false" /> <PreferenceCategory android:key="last_period_updates" /> <com.android.permissioncontroller.permission.ui.handheld.v34.FooterWithLinkPreference android:key="info_footer" diff --git a/PermissionController/res/xml/roles.xml b/PermissionController/res/xml/roles.xml index 581f56a6c..0f53d4176 100644 --- a/PermissionController/res/xml/roles.xml +++ b/PermissionController/res/xml/roles.xml @@ -615,6 +615,8 @@ <permission name="android.permission.SUBSCRIBE_TO_KEYGUARD_LOCKED_STATE" minSdkVersion="33" /> <permission name="android.permission.MANAGE_DEVICE_LOCK_STATE" minSdkVersion="34" /> + <permission name="android.permission.MANAGE_DEVICE_POLICY_APP_EXEMPTIONS" + minSdkVersion="34" /> </permissions> </role> diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt index 1f7f7f298..b9d2d237a 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/data/AppPermGroupUiInfoLiveData.kt @@ -17,6 +17,7 @@ package com.android.permissioncontroller.permission.data import android.Manifest +import android.Manifest.permission.READ_MEDIA_VISUAL_USER_SELECTED import android.Manifest.permission_group.STORAGE import android.app.AppOpsManager import android.app.Application @@ -132,9 +133,10 @@ class AppPermGroupUiInfoLiveData private constructor( val isUserSet = isUserSet(permissionState) - val isGranted = getGrantedIncludingBackground(permissionState, allPermInfos, packageInfo) + val permGrantState = + getGrantedIncludingBackground(permissionState, allPermInfos, packageInfo) - return AppPermGroupUiInfo(shouldShow, isGranted, isSystemApp, isUserSet) + return AppPermGroupUiInfo(shouldShow, permGrantState, isSystemApp, isUserSet) } /** @@ -282,6 +284,12 @@ class AppPermGroupUiInfoLiveData private constructor( state.granted || (supportsRuntime && (state.permFlags and PackageManager.FLAG_PERMISSION_REVIEW_REQUIRED) != 0) } + val onlySelectedPhotosGranted = + permissionState.containsKey(READ_MEDIA_VISUAL_USER_SELECTED) && + permissionState.all { (permName, state) -> + (permName == READ_MEDIA_VISUAL_USER_SELECTED && state.granted) || + (permName != READ_MEDIA_VISUAL_USER_SELECTED && !state.granted) + } if (anyAllowed && (hasPermWithBackground || shouldShowAsForegroundGroup())) { return if (isOneTime) { PermGrantState.PERMS_ASK @@ -289,7 +297,7 @@ class AppPermGroupUiInfoLiveData private constructor( PermGrantState.PERMS_ALLOWED_FOREGROUND_ONLY } } else if (anyAllowed) { - return if (isOneTime) { + return if (isOneTime || onlySelectedPhotosGranted) { PermGrantState.PERMS_ASK } else { PermGrantState.PERMS_ALLOWED diff --git a/PermissionController/src/com/android/permissioncontroller/permission/data/v34/AppDataSharingUpdatesLiveData.kt b/PermissionController/src/com/android/permissioncontroller/permission/data/v34/AppDataSharingUpdatesLiveData.kt index c9831399d..d5fd59242 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/data/v34/AppDataSharingUpdatesLiveData.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/data/v34/AppDataSharingUpdatesLiveData.kt @@ -26,6 +26,7 @@ import com.android.permissioncontroller.permission.model.v34.AppDataSharingUpdat import com.android.permissioncontroller.safetylabel.AppsSafetyLabelHistoryPersistence import java.time.Duration import java.time.Instant +import java.time.ZoneId import kotlinx.coroutines.Job /** LiveData for [AppDataSharingUpdate]s. */ @@ -45,7 +46,8 @@ class AppDataSharingUpdatesLiveData(val app: Application) : val appSafetyLabelDiffsFromPersistence = AppsSafetyLabelHistoryPersistence.getAppSafetyLabelDiffs( - Instant.now().minusMillis(updatePeriod), file) + Instant.now().atZone(ZoneId.systemDefault()).toInstant().minusMillis(updatePeriod), + file) val updatesFromPersistence = appSafetyLabelDiffsFromPersistence.mapNotNull { it.buildUpdateIfSignificantChange() } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/service/v34/SafetyLabelChangesJobService.kt b/PermissionController/src/com/android/permissioncontroller/permission/service/v34/SafetyLabelChangesJobService.kt index 5948860ec..5b6c833d9 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/service/v34/SafetyLabelChangesJobService.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/service/v34/SafetyLabelChangesJobService.kt @@ -30,7 +30,11 @@ import android.content.Context import android.content.Intent import android.content.Intent.ACTION_BOOT_COMPLETED import android.os.Build +import android.os.PersistableBundle +import android.os.Process import android.os.UserHandle +import android.os.UserManager +import android.provider.DeviceConfig import android.util.Log import androidx.annotation.RequiresApi import androidx.core.app.NotificationCompat @@ -43,6 +47,7 @@ import com.android.permissioncontroller.Constants.SAFETY_LABEL_CHANGES_NOTIFICAT import com.android.permissioncontroller.PermissionControllerApplication import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.data.LightInstallSourceInfoLiveData +import com.android.permissioncontroller.permission.data.LightPackageInfoLiveData import com.android.permissioncontroller.permission.data.SinglePermGroupPackagesUiInfoLiveData import com.android.permissioncontroller.permission.data.v34.AppDataSharingUpdatesLiveData import com.android.permissioncontroller.permission.model.livedatatypes.AppPermGroupUiInfo @@ -52,9 +57,13 @@ import com.android.permissioncontroller.permission.model.v34.AppDataSharingUpdat import com.android.permissioncontroller.permission.utils.KotlinUtils import com.android.permissioncontroller.permission.utils.Utils.getSystemServiceSafe import com.android.permissioncontroller.safetylabel.AppsSafetyLabelHistory +import com.android.permissioncontroller.safetylabel.AppsSafetyLabelHistory.AppInfo import com.android.permissioncontroller.safetylabel.AppsSafetyLabelHistory.SafetyLabel as SafetyLabelForPersistence import com.android.permissioncontroller.safetylabel.AppsSafetyLabelHistoryPersistence +import java.io.File +import java.time.Duration import java.time.Instant +import java.time.ZoneId import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.GlobalScope import kotlinx.coroutines.Job @@ -67,10 +76,13 @@ import kotlinx.coroutines.yield * Runs a monthly job that performs Safety Labels-related tasks. (E.g., data policy changes * notification, hygiene, etc.) */ +// TODO(b/265202443): Review support for safe cancellation of this Job. Currently this is +// implemented by implementing `onStopJob` method and including `yield()` calls in computation +// loops. @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) class SafetyLabelChangesJobService : JobService() { private var mainJobTask: Job? = null - private val context = PermissionControllerApplication.get() + private val context = this@SafetyLabelChangesJobService class Receiver : BroadcastReceiver() { override fun onReceive(receiverContext: Context, intent: Intent) { @@ -78,7 +90,14 @@ class SafetyLabelChangesJobService : JobService() { Log.d(LOG_TAG, "Received broadcast with intent action '${intent.action}'") } if (!KotlinUtils.isSafetyLabelChangeNotificationsEnabled()) { - Log.w(LOG_TAG, "onReceive: Safety label change notifications are not enabled.") + Log.i(LOG_TAG, "onReceive: Safety label change notifications are not enabled.") + return + } + if (isContextInProfileUser(receiverContext)) { + Log.i( + LOG_TAG, + "onReceive: Received broadcast in profile, not scheduling safety label" + + " change job") return } if (intent.action != ACTION_BOOT_COMPLETED && @@ -87,6 +106,12 @@ class SafetyLabelChangesJobService : JobService() { } schedulePeriodicJob(receiverContext) } + + private fun isContextInProfileUser(context: Context): Boolean { + val userManager: UserManager = + (context.getSystemService(UserManager::class.java) as UserManager?)!! + return userManager.isProfile + } } /** @@ -130,58 +155,198 @@ class SafetyLabelChangesJobService : JobService() { } private suspend fun runMainJob() { - initializeSafetyLabels() + performHygieneOnSafetyLabelHistoryPersistence() postSafetyLabelChangedNotification() } - private suspend fun initializeSafetyLabels() { + private suspend fun performHygieneOnSafetyLabelHistoryPersistence() { val historyFile = AppsSafetyLabelHistoryPersistence.getSafetyLabelHistoryFile(context) + val safetyLabelsLastUpdatedTimes: Map<AppInfo, Instant> = + AppsSafetyLabelHistoryPersistence.getSafetyLabelsLastUpdatedTimes(historyFile) + // Retrieve all installed packages that are not pre-installed on the system and + // that request the location permission; these are the packages that we care about for the + // safety labels feature. The variable name does not specify all these filters for brevity. + val packagesRequestingLocation: Set<Pair<String, UserHandle>> = + getAllNonPreinstalledPackagesRequestingLocation() + + recordSafetyLabelsIfMissing( + historyFile, packagesRequestingLocation, safetyLabelsLastUpdatedTimes) + deleteSafetyLabelsNoLongerNeeded( + historyFile, packagesRequestingLocation, safetyLabelsLastUpdatedTimes) + } - val packageNamesWithPersistedSafetyLabels: Set<String> = - AppsSafetyLabelHistoryPersistence.getAppsWithSafetyLabels(historyFile) - .map { it.packageName } - .toSet() - val packageNamesWithRelevantSafetyLabels: Set<String> = - getAllNonPreinstalledPackageNamesRequestingLocation() - val packageNamesToInitialize: Set<String> = - packageNamesWithRelevantSafetyLabels - packageNamesWithPersistedSafetyLabels + /** + * Records safety labels for apps that may not have propagated their safety labels to + * persistence through [SafetyLabelChangedBroadcastReceiver]. + * + * This is done by: + * 1. Initializing safety labels for apps that are relevant, but have no persisted safety labels + * yet. + * 2. Update safety labels for apps that are relevant and have persisted safety labels, if we + * identify that we have missed an update for them. + */ + private suspend fun recordSafetyLabelsIfMissing( + historyFile: File, + packagesRequestingLocation: Set<Pair<String, UserHandle>>, + safetyLabelsLastUpdatedTimes: Map<AppInfo, Instant> + ) { + val safetyLabelsToRecord = mutableSetOf<SafetyLabelForPersistence>() + val packageNamesWithPersistedSafetyLabels = + safetyLabelsLastUpdatedTimes.keys.map { it.packageName } + + // Partition relevant apps by whether we already store safety labels for them. + val (packagesToConsiderUpdate, packagesToInitialize) = + packagesRequestingLocation.partition { (packageName, _) -> + packageName in packageNamesWithPersistedSafetyLabels + } + if (DEBUG) { + Log.d( + LOG_TAG, + "recording safety labels if missing:" + + " packagesRequestingLocation:" + + " $packagesRequestingLocation, packageNamesWithPersistedSafetyLabels:" + + " $packageNamesWithPersistedSafetyLabels") + } + safetyLabelsToRecord.addAll(getSafetyLabels(packagesToInitialize)) + safetyLabelsToRecord.addAll( + getSafetyLabelsIfUpdatesMissed(packagesToConsiderUpdate, safetyLabelsLastUpdatedTimes)) - val safetyLabelsToPersist = mutableSetOf<SafetyLabelForPersistence>() + AppsSafetyLabelHistoryPersistence.recordSafetyLabels(safetyLabelsToRecord, historyFile) + } - for (packageName in packageNamesToInitialize) { + private suspend fun getSafetyLabels( + packages: List<Pair<String, UserHandle>> + ): List<SafetyLabelForPersistence> { + val safetyLabelsToPersist = mutableListOf<SafetyLabelForPersistence>() + + for ((packageName, user) in packages) { yield() // cancellation point + val safetyLabelToPersist = getSafetyLabelToPersist(Pair(packageName, user)) + if (safetyLabelToPersist != null) { + safetyLabelsToPersist.add(safetyLabelToPersist) + } + } + return safetyLabelsToPersist + } - val appMetadataBundle = context.packageManager.getAppMetadata(packageName) - val appMetadataSafetyLabel: AppMetadataSafetyLabel = - AppMetadataSafetyLabel.getSafetyLabelFromMetadata(appMetadataBundle) ?: continue - // TODO(b/264884404): Use install time or last update time for an app for the time a - // safety label is received instead of current time. - val safetyLabelForPersistence: SafetyLabelForPersistence = - AppsSafetyLabelHistory.SafetyLabel.fromAppMetadataSafetyLabel( - packageName, receivedAt = Instant.now(), appMetadataSafetyLabel) + private suspend fun getSafetyLabelsIfUpdatesMissed( + packages: List<Pair<String, UserHandle>>, + safetyLabelsLastUpdatedTimes: Map<AppInfo, Instant> + ): List<SafetyLabelForPersistence> { + val safetyLabelsToPersist = mutableListOf<SafetyLabelForPersistence>() + for ((packageName, user) in packages) { + yield() // cancellation point + + // If safety labels are considered up-to-date, continue as there is no need to retrieve + // the latest safety label; it was already captured. + if (areSafetyLabelsUpToDate(Pair(packageName, user), safetyLabelsLastUpdatedTimes)) { + continue + } - safetyLabelsToPersist.add(safetyLabelForPersistence) + val safetyLabelToPersist = getSafetyLabelToPersist(Pair(packageName, user)) + if (safetyLabelToPersist != null) { + safetyLabelsToPersist.add(safetyLabelToPersist) + } } - AppsSafetyLabelHistoryPersistence.recordSafetyLabels(safetyLabelsToPersist, historyFile) + return safetyLabelsToPersist + } + + /** + * Returns whether the provided app's safety labels are up-to-date by checking that there have + * been no app updates since the persisted safety label history was last updated. + */ + private suspend fun areSafetyLabelsUpToDate( + packageKey: Pair<String, UserHandle>, + safetyLabelsLastUpdatedTimes: Map<AppInfo, Instant> + ): Boolean { + val lastAppUpdateTime: Instant = + Instant.ofEpochMilli( + LightPackageInfoLiveData[packageKey].getInitializedValue().lastUpdateTime) + val latestSafetyLabelUpdateTime: Instant? = + safetyLabelsLastUpdatedTimes[AppInfo(packageKey.first)] + return latestSafetyLabelUpdateTime != null && + !lastAppUpdateTime.isAfter(latestSafetyLabelUpdateTime) + } + + private suspend fun getSafetyLabelToPersist( + packageKey: Pair<String, UserHandle> + ): SafetyLabelForPersistence? { + val (packageName, user) = packageKey + + // Get the context for the user in which the app is installed. + val userContext = + if (user == Process.myUserHandle()) { + context + } else { + context.createContextAsUser(user, 0) + } + val appMetadataBundle: PersistableBundle = + userContext.packageManager.getAppMetadata(packageName) + val appMetadataSafetyLabel: AppMetadataSafetyLabel = + AppMetadataSafetyLabel.getSafetyLabelFromMetadata(appMetadataBundle) ?: return null + val lastUpdateTime = + Instant.ofEpochMilli( + LightPackageInfoLiveData[packageKey].getInitializedValue().lastUpdateTime) + + val safetyLabelForPersistence: SafetyLabelForPersistence = + AppsSafetyLabelHistory.SafetyLabel.fromAppMetadataSafetyLabel( + packageName, lastUpdateTime, appMetadataSafetyLabel) + + return safetyLabelForPersistence + } + + /** + * Deletes safety labels from persistence that are no longer necessary to persist. + * + * This is done by: + * 1. Deleting safety labels for apps that are no longer relevant (e.g. app not installed or app + * not requesting location permission). + * 2. Delete safety labels if there are multiple safety labels prior to the update period; at + * most one safety label is necessary to be persisted prior to the update period to determine + * updates to safety labels. + */ + private fun deleteSafetyLabelsNoLongerNeeded( + historyFile: File, + packagesRequestingLocation: Set<Pair<String, UserHandle>>, + safetyLabelsLastUpdatedTimes: Map<AppInfo, Instant> + ) { + val packageNamesWithPersistedSafetyLabels: List<String> = + safetyLabelsLastUpdatedTimes.keys.map { appInfo -> appInfo.packageName } + val packageNamesWithRelevantSafetyLabels: List<String> = + packagesRequestingLocation.map { (packageName, _) -> packageName } + + val appInfosToDelete: Set<AppInfo> = + packageNamesWithPersistedSafetyLabels + .filter { packageName -> packageName !in packageNamesWithRelevantSafetyLabels } + .map { packageName -> AppInfo(packageName) } + .toSet() + AppsSafetyLabelHistoryPersistence.deleteSafetyLabelsForApps(appInfosToDelete, historyFile) + + val updatePeriod = + DeviceConfig.getLong( + DeviceConfig.NAMESPACE_PRIVACY, + DATA_SHARING_UPDATE_PERIOD_PROPERTY, + Duration.ofDays(DEFAULT_DATA_SHARING_UPDATE_PERIOD_DAYS).toMillis()) + AppsSafetyLabelHistoryPersistence.deleteSafetyLabelsOlderThan( + Instant.now().atZone(ZoneId.systemDefault()).toInstant().minusMillis(updatePeriod), + historyFile) } // TODO(b/261607291): Modify this logic when we enable safety label change notifications for // preinstalled apps. - private suspend fun getAllNonPreinstalledPackageNamesRequestingLocation(): Set<String> = - getAllPackagesRequestingLocation() - .filter { !isPreinstalledPackage(it) } - .map { (packageName, _) -> packageName } - .toSet() + private suspend fun getAllNonPreinstalledPackagesRequestingLocation(): + Set<Pair<String, UserHandle>> = + getAllPackagesRequestingLocation().filter { !isPreinstalledPackage(it) }.toSet() private suspend fun getAllPackagesRequestingLocation(): Set<Pair<String, UserHandle>> = SinglePermGroupPackagesUiInfoLiveData[Manifest.permission_group.LOCATION] - .getInitializedValue() + .getInitializedValue(staleOk = false, forceUpdate = true) .keys private suspend fun getAllPackagesGrantedLocation(): Set<Pair<String, UserHandle>> = SinglePermGroupPackagesUiInfoLiveData[Manifest.permission_group.LOCATION] - .getInitializedValue() + .getInitializedValue(staleOk = false, forceUpdate = true) .filter { (packageKey, appPermGroupUiInfo) -> appPermGroupUiInfo.isPermissionGranted() } .keys @@ -214,7 +379,9 @@ class SafetyLabelChangesJobService : JobService() { } private suspend fun hasDataSharingChanged(): Boolean { - val appDataSharingUpdates = AppDataSharingUpdatesLiveData(context).getInitializedValue() + val appDataSharingUpdates = + AppDataSharingUpdatesLiveData(PermissionControllerApplication.get()) + .getInitializedValue() val packageNamesWithLocationDataSharingUpdates: List<String> = appDataSharingUpdates .filter { it.containsLocationCategoryUpdate() } @@ -291,6 +458,9 @@ class SafetyLabelChangesJobService : JobService() { private const val ACTION_SET_UP_SAFETY_LABEL_CHANGES_JOB = "com.android.permissioncontroller.action.SET_UP_SAFETY_LABEL_CHANGES_JOB" + private const val DATA_SHARING_UPDATE_PERIOD_PROPERTY = "data_sharing_update_period_millis" + private const val DEFAULT_DATA_SHARING_UPDATE_PERIOD_DAYS: Long = 30 + private fun schedulePeriodicJob(context: Context) { try { val jobScheduler = getSystemServiceSafe(context, JobScheduler::class.java) diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java index 4b1129396..a4290da7e 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/GrantPermissionsActivity.java @@ -36,6 +36,7 @@ import static com.android.permissioncontroller.permission.ui.model.GrantPermissi import static com.android.permissioncontroller.permission.utils.Utils.getRequestMessage; import android.Manifest; +import android.app.Activity; import android.app.KeyguardManager; import android.content.Intent; import android.content.pm.PackageItemInfo; @@ -257,8 +258,10 @@ public class GrantPermissionsActivity extends SettingsActivity GrantPermissionsViewModelFactory factory = new GrantPermissionsViewModelFactory( getApplication(), mTargetPackage, mRequestedPermissions, mSessionId, icicle); - mViewModel = factory.create(GrantPermissionsViewModel.class); - mViewModel.getRequestInfosLiveData().observe(this, this::onRequestInfoLoad); + if (!mDelegated) { + mViewModel = factory.create(GrantPermissionsViewModel.class); + mViewModel.getRequestInfosLiveData().observe(this, this::onRequestInfoLoad); + } mRootView = mViewHandler.createView(); mRootView.setVisibility(View.GONE); @@ -314,6 +317,7 @@ public class GrantPermissionsActivity extends SettingsActivity if (follower != null) { // Ensure the list of follower activities is a stack mFollowerActivities.add(0, follower); + follower.mViewModel = mViewModel; } boolean isShowingGroup = mRootView != null && mRootView.getVisibility() == View.VISIBLE; @@ -345,6 +349,9 @@ public class GrantPermissionsActivity extends SettingsActivity mSessionId, oldState); mViewModel = factory.create(GrantPermissionsViewModel.class); mViewModel.getRequestInfosLiveData().observe(this, this::onRequestInfoLoad); + if (follower != null) { + follower.mViewModel = mViewModel; + } } /** @@ -388,17 +395,19 @@ public class GrantPermissionsActivity extends SettingsActivity RequestInfo info = mRequestInfos.get(0); + // Only the top activity can receive activity results + Activity top = mFollowerActivities.isEmpty() ? this : mFollowerActivities.get(0); if (info.getSendToSettingsImmediately()) { - mViewModel.sendDirectlyToSettings(this, info.getGroupName()); + mViewModel.sendDirectlyToSettings(top, info.getGroupName()); return; } else if (info.getOpenPhotoPicker()) { - mViewModel.openPhotoPicker(this, GRANTED_USER_SELECTED); + mViewModel.openPhotoPicker(top, GRANTED_USER_SELECTED); return; } if (Utils.isHealthPermissionUiEnabled() && HEALTH_PERMISSION_GROUP.equals( info.getGroupName())) { - mViewModel.handleHealthConnectPermissions(this); + mViewModel.handleHealthConnectPermissions(top); return; } @@ -607,7 +616,9 @@ public class GrantPermissionsActivity extends SettingsActivity if (Objects.equals(READ_MEDIA_VISUAL, name) && result == GrantPermissionsViewHandler.GRANTED_USER_SELECTED) { - mViewModel.openPhotoPicker(this, result); + // Only the top activity can receive activity results + Activity top = mFollowerActivities.isEmpty() ? this : mFollowerActivities.get(0); + mViewModel.openPhotoPicker(top, result); return; } @@ -656,11 +667,11 @@ public class GrantPermissionsActivity extends SettingsActivity */ private void removeActivityFromMap() { synchronized (sCurrentGrantRequests) { - GrantPermissionsActivity top = sCurrentGrantRequests.get(mKey); - if (this.equals(top)) { + GrantPermissionsActivity leader = sCurrentGrantRequests.get(mKey); + if (this.equals(leader)) { sCurrentGrantRequests.remove(mKey); - } else if (top != null) { - top.mFollowerActivities.remove(this); + } else if (leader != null) { + leader.mFollowerActivities.remove(this); } } for (GrantPermissionsActivity activity: mFollowerActivities) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionFragment.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionFragment.java index 040df594a..007707363 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/AppPermissionFragment.java @@ -113,7 +113,7 @@ public class AppPermissionFragment extends SettingsWithLargeHeader private @NonNull RadioButton mAllowForegroundButton; private @NonNull RadioButton mAskOneTimeButton; private @NonNull RadioButton mAskButton; - private @NonNull RadioButton mSelectButton; + private @NonNull RadioButton mSelectPhotosButton; private @NonNull RadioButton mDenyButton; private @NonNull RadioButton mDenyForegroundButton; private @NonNull View mLocationAccuracy; @@ -261,7 +261,7 @@ public class AppPermissionFragment extends SettingsWithLargeHeader mAllowForegroundButton = root.requireViewById(R.id.allow_foreground_only_radio_button); mAskOneTimeButton = root.requireViewById(R.id.ask_one_time_radio_button); mAskButton = root.requireViewById(R.id.ask_radio_button); - mSelectButton = root.requireViewById(R.id.select_photos_radio_button); + mSelectPhotosButton = root.requireViewById(R.id.select_photos_radio_button); mDenyButton = root.requireViewById(R.id.deny_radio_button); mDenyForegroundButton = root.requireViewById(R.id.deny_foreground_radio_button); mDivider = root.requireViewById(R.id.two_target_divider); @@ -422,18 +422,11 @@ public class AppPermissionFragment extends SettingsWithLargeHeader APP_PERMISSION_FRAGMENT_ACTION_REPORTED__BUTTON_PRESSED__ASK_EVERY_TIME); setResult(DENIED); }); - mSelectButton.setOnClickListener((v) -> { + mSelectPhotosButton.setOnClickListener((v) -> { int buttonPressed = APP_PERMISSION_FRAGMENT_ACTION_REPORTED__BUTTON_PRESSED__PHOTOS_SELECTED; - mViewModel.openPhotoPicker(result -> { - if (result == RESULT_OK) { - mViewModel.requestChange(false, this, this, ChangeRequest.PHOTOS_SELECTED, - buttonPressed); - } else { - // Reset the button state to what is was previously - setRadioButtonsState(states); - } - }); + mViewModel.requestChange(false, this, this, ChangeRequest.PHOTOS_SELECTED, + buttonPressed); }); mDenyButton.setOnClickListener((v) -> { if (mViewModel.getFullStorageStateLiveData().getValue() != null @@ -472,8 +465,8 @@ public class AppPermissionFragment extends SettingsWithLargeHeader setButtonState(mAskButton, states.get(ButtonType.ASK)); setButtonState(mDenyButton, states.get(ButtonType.DENY)); setButtonState(mDenyForegroundButton, states.get(ButtonType.DENY_FOREGROUND)); - setButtonState(mSelectButton, states.get(ButtonType.SELECT_PHOTOS)); - if (mSelectButton.getVisibility() == View.VISIBLE) { + setButtonState(mSelectPhotosButton, states.get(ButtonType.SELECT_PHOTOS)); + if (mSelectPhotosButton.getVisibility() == View.VISIBLE) { mAllowButton.setText(R.string.app_permission_button_allow_all_photos); } else { mAllowButton.setText(R.string.app_permission_button_allow); diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.kt index ba08c84a8..6119b3a95 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/GrantPermissionsViewHandlerImpl.kt @@ -193,9 +193,6 @@ class GrantPermissionsViewHandlerImpl( } override fun createView(): View { - // Make this activity be Non-IME target to prevent hiding keyboard flicker when it show up. - mActivity.window.addFlags(LayoutParams.FLAG_ALT_FOCUSABLE_IM) - val useMaterial3PermissionGrantDialog = mActivity.resources .getBoolean(R.bool.config_useMaterial3PermissionGrantDialog) val rootView = if (useMaterial3PermissionGrantDialog || SdkLevel.isAtLeastT()) { diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/AppDataSharingDetailsPreference.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/AppDataSharingDetailsPreference.kt new file mode 100644 index 000000000..014627c3c --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/AppDataSharingDetailsPreference.kt @@ -0,0 +1,52 @@ +/* + * 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. + */ + +package com.android.permissioncontroller.permission.ui.handheld.v34 + +import android.content.Context +import android.os.Build +import android.util.AttributeSet +import androidx.annotation.RequiresApi +import androidx.core.view.isVisible +import androidx.preference.Preference +import androidx.preference.PreferenceViewHolder +import com.android.permissioncontroller.R + +/** A preference to show messaging below the page title in the [AppDataSharingUpdatesFragment]. */ +@RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) +class AppDataSharingDetailsPreference : Preference { + constructor(c: Context) : super(c) + constructor(c: Context, a: AttributeSet) : super(c, a) + constructor(c: Context, a: AttributeSet, attr: Int) : super(c, a, attr) + constructor(c: Context, a: AttributeSet, attr: Int, res: Int) : super(c, a, attr, res) + + init { + layoutResource = R.layout.app_data_sharing_details_preference + } + + /** Whether to show the no updates message. */ + var showNoUpdates: Boolean = false + set(value) { + field = value + notifyChanged() + } + + override fun onBindViewHolder(holder: PreferenceViewHolder) { + val noUpdatesMessage = holder.findViewById(R.id.no_updates_message) + noUpdatesMessage.isVisible = showNoUpdates + super.onBindViewHolder(holder) + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/AppDataSharingUpdatesFragment.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/AppDataSharingUpdatesFragment.kt index a83b03db0..723a02ebc 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/AppDataSharingUpdatesFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/AppDataSharingUpdatesFragment.kt @@ -6,7 +6,6 @@ import android.os.UserHandle import android.view.MenuItem import android.view.View import androidx.annotation.RequiresApi -import androidx.preference.Preference import androidx.preference.PreferenceCategory import com.android.permissioncontroller.Constants.EXTRA_SESSION_ID import com.android.permissioncontroller.R @@ -36,7 +35,7 @@ class AppDataSharingUpdatesFragment : PermissionsFrameFragment() { if (preferenceScreen == null) { addPreferencesFromResource(R.xml.app_data_sharing_updates) - showNoUpdatesPresentUi() + setLoading(/* loading= */ true, /* animate= */ false) } viewModel.appLocationDataSharingUpdateUiInfoLiveData.observe(this, this::updatePreferences) @@ -52,6 +51,8 @@ class AppDataSharingUpdatesFragment : PermissionsFrameFragment() { } private fun updatePreferences(updateUiInfos: List<AppLocationDataSharingUpdateUiInfo>) { + setLoading(/* loading= */ false, /* animate= */ true) + if (updateUiInfos.isNotEmpty()) { showUpdatesPresentUi() } else { @@ -124,15 +125,16 @@ class AppDataSharingUpdatesFragment : PermissionsFrameFragment() { if (preferenceScreen == null) { return } - val subtitlePreference = - preferenceScreen?.findPreference<Preference>(SUBTITLE_PREFERENCE_ID) + val detailsPreference = + preferenceScreen?.findPreference<AppDataSharingDetailsPreference>(DETAILS_PREFERENCE_ID) val footerPreference = preferenceScreen?.findPreference<FooterWithLinkPreference>(FOOTER_PREFERENCE_ID) val dataSharingUpdatesCategory = preferenceScreen?.findPreference<PreferenceCategory>( LAST_PERIOD_UPDATES_PREFERENCE_CATEGORY_ID) - subtitlePreference?.let { - it.summary = getString(R.string.data_sharing_updates_subtitle) + + detailsPreference?.let { + it.showNoUpdates = false it.isVisible = true } dataSharingUpdatesCategory?.let { @@ -155,22 +157,20 @@ class AppDataSharingUpdatesFragment : PermissionsFrameFragment() { if (preferenceScreen == null) { return } - val subtitlePreference = - preferenceScreen?.findPreference<Preference>(SUBTITLE_PREFERENCE_ID) + val detailsPreference = + preferenceScreen?.findPreference<AppDataSharingDetailsPreference>(DETAILS_PREFERENCE_ID) val footerPreference = preferenceScreen?.findPreference<FooterWithLinkPreference>(FOOTER_PREFERENCE_ID) val dataSharingUpdatesCategory = preferenceScreen?.findPreference<PreferenceCategory>( LAST_PERIOD_UPDATES_PREFERENCE_CATEGORY_ID) - subtitlePreference?.let { - it.summary = getString(R.string.data_sharing_updates_subtitle) + + detailsPreference?.let { + it.showNoUpdates = true it.isVisible = true } dataSharingUpdatesCategory?.let { - // TODO(b/261666772): Refactor how the "no updates" message is shown to align with spec. - // The same preference category may not be usable for UI with and without updates. - it.title = getString(R.string.no_updates_at_this_time) - it.isVisible = true + it.isVisible = false } footerPreference?.let { it.footerMessage = getString(R.string.data_sharing_updates_footer_message) @@ -200,7 +200,7 @@ class AppDataSharingUpdatesFragment : PermissionsFrameFragment() { */ fun createArgs(sessionId: Long) = Bundle().apply { putLong(EXTRA_SESSION_ID, sessionId) } - private const val SUBTITLE_PREFERENCE_ID = "subtitle" + private const val DETAILS_PREFERENCE_ID = "details" private const val FOOTER_PREFERENCE_ID = "info_footer" private const val LAST_PERIOD_UPDATES_PREFERENCE_CATEGORY_ID = "last_period_updates" } diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/PermissionRationaleViewHandlerImpl.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/PermissionRationaleViewHandlerImpl.kt index 52dd7f28e..7504ae7d4 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/PermissionRationaleViewHandlerImpl.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/handheld/v34/PermissionRationaleViewHandlerImpl.kt @@ -129,9 +129,6 @@ class PermissionRationaleViewHandlerImpl( } override fun createView(): View { - // Make this activity be Non-IME target to prevent hiding keyboard flicker when it show up. - mActivity.window.addFlags(WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM) - val rootView = LayoutInflater.from(mActivity) .inflate(R.layout.permission_rationale, null) as ViewGroup diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt index 7f8e2c743..ac20a7748 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/AppPermissionViewModel.kt @@ -451,11 +451,6 @@ class AppPermissionViewModel( } } - fun openPhotoPicker(onResult: Consumer<Int>) { - photoPickerResultConsumer = onResult - photoPickerLauncher?.launch(Unit) - } - private fun isFineLocationChecked(group: LightAppPermGroup): Boolean { if (shouldShowLocationAccuracy == true) { val coarseLocation = group.permissions[ACCESS_COARSE_LOCATION]!! diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt index 94a34011b..8a0adab8e 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/model/GrantPermissionsViewModel.kt @@ -786,6 +786,14 @@ class GrantPermissionsViewModel( packageInfo.targetSdkVersion <= Build.VERSION_CODES.S_V2 && group.foreground.isUserSet) { return STATE_SKIPPED + } else if (perm == READ_MEDIA_VISUAL_USER_SELECTED) { + val otherRequestedPerms = unfilteredAffectedPermissions.filter { otherPerm -> + otherPerm in group.permissions && otherPerm != READ_MEDIA_VISUAL_USER_SELECTED + } + if (otherRequestedPerms.isEmpty()) { + // If the user only requested USER_SELECTED, skip the request + return STATE_SKIPPED + } } val isBackground = perm in group.backgroundPermNames @@ -1028,9 +1036,9 @@ class GrantPermissionsViewModel( private fun grantUserSelectedVisualGroupPermissions(groupState: GroupState) { val userSelectedPerm = groupState.group.permissions[READ_MEDIA_VISUAL_USER_SELECTED] ?: return - val nonSelectedPerms = groupState.affectedPermissions - .filter { it != READ_MEDIA_VISUAL_USER_SELECTED } if (userSelectedPerm.isImplicit) { + val nonSelectedPerms = groupState.group.permissions.keys + .filter { it != READ_MEDIA_VISUAL_USER_SELECTED } // If the permission is implicit, grant USER_SELECTED as user set, and all other // permissions as one time, and without app ops. KotlinUtils.grantForegroundRuntimePermissions(app, groupState.group, @@ -1044,6 +1052,8 @@ class GrantPermissionsViewModel( appPermGroup.setSelfRevoked() appPermGroup.persistChanges(false, null, nonSelectedPerms.toSet()) } else { + val nonSelectedPerms = groupState.affectedPermissions + .filter { it != READ_MEDIA_VISUAL_USER_SELECTED } val setUserFixed = userSelectedPerm.isUserFixed || userSelectedPerm.isUserSet KotlinUtils.grantForegroundRuntimePermissions(app, groupState.group, listOf(READ_MEDIA_VISUAL_USER_SELECTED), userFixed = setUserFixed) @@ -1311,7 +1321,8 @@ class GrantPermissionsViewModel( } activity.startActivityForResult(Intent(MediaStore.ACTION_USER_SELECT_IMAGES_FOR_APP) .putExtra(Intent.EXTRA_UID, packageInfo.uid) - .setType(KotlinUtils.getMimeTypeForPermissions(permissions)), PHOTO_PICKER_REQUEST_CODE) + .setType(KotlinUtils.getMimeTypeForPermissions(unfilteredAffectedPermissions)), + PHOTO_PICKER_REQUEST_CODE) } /** diff --git a/PermissionController/src/com/android/permissioncontroller/permission/ui/v34/PermissionRationaleActivity.java b/PermissionController/src/com/android/permissioncontroller/permission/ui/v34/PermissionRationaleActivity.java index d2ad0cae6..419c300f6 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/ui/v34/PermissionRationaleActivity.java +++ b/PermissionController/src/com/android/permissioncontroller/permission/ui/v34/PermissionRationaleActivity.java @@ -182,7 +182,7 @@ public class PermissionRationaleActivity extends SettingsActivity implements || DeviceUtils.isAuto(this)) { finishAfterTransition(); } else { - var shouldShowSettingsSection = + boolean shouldShowSettingsSection = getIntent().getBooleanExtra(EXTRA_SHOULD_SHOW_SETTINGS_SECTION, true); mViewHandler = new PermissionRationaleViewHandlerImpl(this, this, shouldShowSettingsSection); diff --git a/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt b/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt index 0aecb61a9..f809ad8e1 100644 --- a/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt +++ b/PermissionController/src/com/android/permissioncontroller/permission/utils/KotlinUtils.kt @@ -265,7 +265,7 @@ object KotlinUtils { @ChecksSdkIntAtLeast(api = Build.VERSION_CODES.UPSIDE_DOWN_CAKE, codename = "UpsideDownCake") fun isPhotoPickerPromptEnabled(): Boolean { return SdkLevel.isAtLeastU() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, - PROPERTY_PHOTO_PICKER_PROMPT_ENABLED, false) + PROPERTY_PHOTO_PICKER_PROMPT_ENABLED, true) } /* diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/SafetyCenterConstants.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/SafetyCenterConstants.java index dfa4bcf86..31c52a5e6 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/SafetyCenterConstants.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/SafetyCenterConstants.java @@ -34,4 +34,10 @@ public class SafetyCenterConstants { /** Intent extra indicating whether a subpage in Safety Center was opened from the homepage */ public static final String EXTRA_OPENED_FROM_HOMEPAGE = "opened_from_homepage_intent_extra"; + + /** Suffix used to identify a source in the Safety Center personal profile */ + public static final String PERSONAL_PROFILE_SUFFIX = "personal"; + + /** Suffix used to identify a source in the Safety Center work profile */ + public static final String WORK_PROFILE_SUFFIX = "work"; } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterSearchIndexablesProvider.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterSearchIndexablesProvider.kt index f55c3f1a6..9b6b5c7c3 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterSearchIndexablesProvider.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/service/SafetyCenterSearchIndexablesProvider.kt @@ -41,22 +41,18 @@ import androidx.annotation.RequiresApi import com.android.modules.utils.build.SdkLevel import com.android.permissioncontroller.R import com.android.permissioncontroller.permission.service.BaseSearchIndexablesProvider +import com.android.permissioncontroller.safetycenter.SafetyCenterConstants.PERSONAL_PROFILE_SUFFIX +import com.android.permissioncontroller.safetycenter.SafetyCenterConstants.WORK_PROFILE_SUFFIX +import com.android.permissioncontroller.safetycenter.ui.SafetyCenterUiFlags +import com.android.permissioncontroller.safetycenter.ui.model.PrivacyControlsViewModel.Pref import com.android.safetycenter.internaldata.SafetyCenterEntryId import com.android.safetycenter.internaldata.SafetyCenterIds import com.android.safetycenter.resources.SafetyCenterResourcesContext -/** - * {@link android.provider.SearchIndexablesProvider} for Safety Center. - */ +/** [android.provider.SearchIndexablesProvider] for Safety Center. */ @RequiresApi(Build.VERSION_CODES.TIRAMISU) class SafetyCenterSearchIndexablesProvider : BaseSearchIndexablesProvider() { - private companion object { - private const val BIOMETRIC_SOURCE_ID = "AndroidBiometrics" - private const val PERSONAL_PROFILE_SUFFIX = "personal" - private const val WORK_PROFILE_SUFFIX = "work" - } - override fun queryRawData(projection: Array<out String>?): Cursor { val cursor = MatrixCursor(INDEXABLES_RAW_COLUMNS) if (!SdkLevel.isAtLeastT()) { @@ -65,23 +61,27 @@ class SafetyCenterSearchIndexablesProvider : BaseSearchIndexablesProvider() { val context = requireContext() val safetyCenterManager: SafetyCenterManager? = - context.getSystemService(SafetyCenterManager::class.java) + context.getSystemService(SafetyCenterManager::class.java) val resourcesContext = SafetyCenterResourcesContext(context) val screenTitle = context.getString(R.string.safety_center_dashboard_page_title) - safetyCenterManager?.safetySources - ?.filter { it.type != SAFETY_SOURCE_TYPE_ISSUE_ONLY } - ?.forEach { safetySource -> - cursor.addSafetySourceRow( - context, - safetySource, - resourcesContext, - safetyCenterManager, - screenTitle - ) - } + safetyCenterManager + ?.safetySources + ?.filter { it.type != SAFETY_SOURCE_TYPE_ISSUE_ONLY } + ?.forEach { safetySource -> + cursor.addSafetySourceRow( + context, + safetySource, + resourcesContext, + safetyCenterManager, + screenTitle + ) + } + if (SdkLevel.isAtLeastU()) { + cursor.indexPrivacyControls(context, screenTitle) + } return cursor } @@ -106,9 +106,11 @@ class SafetyCenterSearchIndexablesProvider : BaseSearchIndexablesProvider() { collectAllRemovableKeys(safetyCenterManager, keysToRemove) { true } } - keysToRemove.forEach { key -> - cursor.newRow().add(NonIndexableKey.COLUMN_KEY_VALUE, key) + if (shouldRemovePrivacyControlKeys(safetyCenterManager)) { + keysToRemove.addAll(privacyControlKeys) } + + keysToRemove.forEach { key -> cursor.newRow().add(NonIndexableKey.COLUMN_KEY_VALUE, key) } return cursor } @@ -124,30 +126,30 @@ class SafetyCenterSearchIndexablesProvider : BaseSearchIndexablesProvider() { var isWorkEntryAdded = false fun MatrixCursor.addIndexableRow(title: CharSequence, isWorkProfile: Boolean) = - newRow() - .add(COLUMN_RANK, 0) - .add(COLUMN_TITLE, title) - .add(COLUMN_KEYWORDS, searchTerms?.let { "$title, $it" } ?: title) - .add(COLUMN_KEY, safetySource.id.addSuffix(isWorkProfile)) - .add(COLUMN_INTENT_ACTION, Intent.ACTION_SAFETY_CENTER) - .add(COLUMN_SCREEN_TITLE, screenTitle) + newRow() + .add(COLUMN_RANK, 0) + .add(COLUMN_TITLE, title) + .add(COLUMN_KEYWORDS, searchTerms?.let { "$title, $it" } ?: title) + .add(COLUMN_KEY, safetySource.id.addSuffix(isWorkProfile)) + .add(COLUMN_INTENT_ACTION, Intent.ACTION_SAFETY_CENTER) + .add(COLUMN_SCREEN_TITLE, screenTitle) if (safetySource.id == BIOMETRIC_SOURCE_ID) { // correct Biometric Unlock title is only available when // Biometric SafetySource have sent the data to SafetyCenter context.getSystemService(UserManager::class.java)?.let { userManager -> safetyCenterManager.safetyEntries - .associateBy { it.entryId } - .filter { it.key.safetySourceId == BIOMETRIC_SOURCE_ID } - .forEach { - val isWorkProfile = userManager.isManagedProfile(it.key.userId) - if (isWorkProfile) { - isWorkEntryAdded = true - } else { - isPersonalEntryAdded = true - } - addIndexableRow(it.value.title, isWorkProfile) + .associateBy { it.entryId } + .filter { it.key.safetySourceId == BIOMETRIC_SOURCE_ID } + .forEach { + val isWorkProfile = userManager.isManagedProfile(it.key.userId) + if (isWorkProfile) { + isWorkEntryAdded = true + } else { + isPersonalEntryAdded = true } + addIndexableRow(it.value.title, isWorkProfile) + } } } @@ -165,35 +167,29 @@ class SafetyCenterSearchIndexablesProvider : BaseSearchIndexablesProvider() { } private fun Context.getNotEmptyStringOrNull(resId: Int): String? = - if (resId != Resources.ID_NULL) { - getString(resId).takeIf { it.isNotEmpty() } - } else { - null - } + if (resId != Resources.ID_NULL) { + getString(resId).takeIf { it.isNotEmpty() } + } else { + null + } private fun String.addSuffix(isWorkProfile: Boolean): String = - "${this}_${if (isWorkProfile) WORK_PROFILE_SUFFIX else PERSONAL_PROFILE_SUFFIX}" + "${this}_${if (isWorkProfile) WORK_PROFILE_SUFFIX else PERSONAL_PROFILE_SUFFIX}" private val SafetyCenterManager.safetySources: Sequence<SafetySource>? - get() = safetyCenterConfig - ?.safetySourcesGroups - ?.asSequence() - ?.flatMap { it.safetySources } + get() = safetyCenterConfig?.safetySourcesGroups?.asSequence()?.flatMap { it.safetySources } private fun collectAllRemovableKeys( safetyCenterManager: SafetyCenterManager?, keysToRemove: MutableSet<String>, filter: (SafetySource) -> Boolean ) { - safetyCenterManager?.safetySources - ?.asSequence() - ?.filter(filter) - ?.forEach { safetySource -> - keysToRemove.add(safetySource.id.addSuffix(isWorkProfile = false)) - if (safetySource.profile == SafetySource.PROFILE_ALL) { - keysToRemove.add(safetySource.id.addSuffix(isWorkProfile = true)) - } - } + safetyCenterManager?.safetySources?.asSequence()?.filter(filter)?.forEach { safetySource -> + keysToRemove.add(safetySource.id.addSuffix(isWorkProfile = false)) + if (safetySource.profile == SafetySource.PROFILE_ALL) { + keysToRemove.add(safetySource.id.addSuffix(isWorkProfile = true)) + } + } } private fun keepActiveEntriesFromRemoval( @@ -217,15 +213,44 @@ class SafetyCenterSearchIndexablesProvider : BaseSearchIndexablesProvider() { } private val SafetyCenterManager.safetyEntries: Sequence<SafetyCenterEntry> - get() = safetyCenterData - .entriesOrGroups - .asSequence() - .flatMap { groupOrEntry -> - groupOrEntry.entryGroup?.entries?.asSequence() - ?: groupOrEntry.entry?.let { sequenceOf(it) } - ?: emptySequence() - } + get() = + safetyCenterData.entriesOrGroups.asSequence().flatMap { groupOrEntry -> + groupOrEntry.entryGroup?.entries?.asSequence() + ?: groupOrEntry.entry?.let { sequenceOf(it) } ?: emptySequence() + } private val SafetyCenterEntry.entryId: SafetyCenterEntryId get() = SafetyCenterIds.entryIdFromString(id) + + companion object { + private const val BIOMETRIC_SOURCE_ID = "AndroidBiometrics" + + private val privacyControlKeys: List<String> + get() = Pref.values().map { it.key } + + private fun MatrixCursor.indexPrivacyControls(context: Context, screenTitle: String) { + for (pref in Pref.values()) { + val preferenceTitle = context.getString(pref.titleResId) + newRow() + .add(COLUMN_RANK, 0) + .add(COLUMN_TITLE, preferenceTitle) + .add(COLUMN_KEY, pref.key) + .add(COLUMN_KEYWORDS, preferenceTitle) + .add(COLUMN_INTENT_ACTION, Intent.ACTION_SAFETY_CENTER) + .add(COLUMN_SCREEN_TITLE, screenTitle) + } + } + + private fun shouldRemovePrivacyControlKeys( + safetyCenterManager: SafetyCenterManager? + ): Boolean { + if (!SdkLevel.isAtLeastU()) { + // The keys were never added in the first place, no need to remove. + return false + } + val safetyCenterDisabled = safetyCenterManager?.isSafetyCenterEnabled != true + val subpagesDisabled = !SafetyCenterUiFlags.getShowSubpages() + return safetyCenterDisabled || subpagesDisabled + } + } } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/CollapsableIssuesCardHelper.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/CollapsableIssuesCardHelper.kt index 05741dc30..bf14e1a61 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/CollapsableIssuesCardHelper.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/CollapsableIssuesCardHelper.kt @@ -91,6 +91,7 @@ class CollapsableIssuesCardHelper( * @param dialogFragmentManager fragment manager use for issue dismissal * @param issuesPreferenceGroup Preference group to add preference to * @param issues {@link List} of {@link SafetyCenterIssue} to add to the preference fragment + * @param dismissedIssues {@link List} of dismissed {@link SafetyCenterIssue} to add * @param resolvedIssues {@link Map} of issue id to action ids of resolved issues */ fun addIssues( @@ -98,33 +99,67 @@ class CollapsableIssuesCardHelper( safetyCenterViewModel: SafetyCenterViewModel, dialogFragmentManager: FragmentManager, issuesPreferenceGroup: PreferenceGroup, - issues: List<SafetyCenterIssue>, + issues: List<SafetyCenterIssue>?, + dismissedIssues: List<SafetyCenterIssue>?, resolvedIssues: Map<IssueId, ActionId>, launchTaskId: Int ) { val issueCardPreferenceList: List<IssueCardPreference> = - issues.map { issue: SafetyCenterIssue -> - val resolvedActionId: ActionId? = resolvedIssues[issue.id] - val resolvedTaskId = getLaunchTaskIdForIssue(issue, launchTaskId) - IssueCardPreference( - context, - safetyCenterViewModel, - issue, - resolvedActionId, - dialogFragmentManager, - resolvedTaskId) - } + issues.mapToIssueCardPreferences( + resolvedIssues, + launchTaskId, + context, + safetyCenterViewModel, + dialogFragmentManager, + areDismissed = false + ) + + val dismissedIssueCardPreferences: List<IssueCardPreference> = + dismissedIssues.mapToIssueCardPreferences( + resolvedIssues, + launchTaskId, + context, + safetyCenterViewModel, + dialogFragmentManager, + areDismissed = true + ) val (reorderedIssueCardPreferences, numberOfIssuesToShowWhenCollapsed) = maybeReorderFocusedSafetyCenterIssueInList(issueCardPreferenceList) val nextMoreIssuesCardData = createMoreIssuesCardData( - reorderedIssueCardPreferences, numberOfIssuesToShowWhenCollapsed) + reorderedIssueCardPreferences, + dismissedIssueCardPreferences, + numberOfIssuesToShowWhenCollapsed + ) + + val onlyDismissedIssuesAreCollapsed = + reorderedIssueCardPreferences.size <= numberOfIssuesToShowWhenCollapsed val moreIssuesCardPreference = createMoreIssuesCardPreference( - context, issuesPreferenceGroup, previousMoreIssuesCardData, nextMoreIssuesCardData) + context, + dismissedOnly = onlyDismissedIssuesAreCollapsed, + staticHeader = false, + issuesPreferenceGroup, + previousMoreIssuesCardData, + nextMoreIssuesCardData + ) + + val dismissedIssuesHeaderCardPreference = + if (!onlyDismissedIssuesAreCollapsed && dismissedIssueCardPreferences.isNotEmpty()) { + createMoreIssuesCardPreference( + context, + dismissedOnly = false, + staticHeader = true, + issuesPreferenceGroup, + previousMoreIssuesCardData, + nextMoreIssuesCardData + ) + } else { + null + } // Keep track of previously presented more issues data to assist with transitions previousMoreIssuesCardData = nextMoreIssuesCardData @@ -132,11 +167,37 @@ class CollapsableIssuesCardHelper( addIssuesToPreferenceGroupAndSetVisibility( issuesPreferenceGroup, reorderedIssueCardPreferences, + dismissedIssueCardPreferences, moreIssuesCardPreference, + dismissedIssuesHeaderCardPreference, numberOfIssuesToShowWhenCollapsed, - issueCardsExpanded) + issueCardsExpanded + ) } + private fun List<SafetyCenterIssue>?.mapToIssueCardPreferences( + resolvedIssues: Map<IssueId, ActionId>, + launchTaskId: Int, + context: Context, + safetyCenterViewModel: SafetyCenterViewModel, + dialogFragmentManager: FragmentManager, + areDismissed: Boolean + ): List<IssueCardPreference> = + this?.map { issue: SafetyCenterIssue -> + val resolvedActionId: ActionId? = resolvedIssues[issue.id] + val resolvedTaskId = getLaunchTaskIdForIssue(issue, launchTaskId) + IssueCardPreference( + context, + safetyCenterViewModel, + issue, + resolvedActionId, + dialogFragmentManager, + resolvedTaskId, + areDismissed + ) + } + ?: emptyList() + data class ReorderedSafetyCenterIssueList( val issueCardPreferences: List<IssueCardPreference>, val numberOfIssuesToShowWhenCollapsed: Int @@ -145,9 +206,10 @@ class CollapsableIssuesCardHelper( issueCardPreferences: List<IssueCardPreference> ): ReorderedSafetyCenterIssueList { val mutablePreferencesList = issueCardPreferences.toMutableList() - val focusedIssueCardPreference: IssueCardPreference? = focusedSafetyCenterIssueKey?.let { - findAndRemovePreferenceInList(it, mutablePreferencesList) - } + val focusedIssueCardPreference: IssueCardPreference? = + focusedSafetyCenterIssueKey?.let { + findAndRemovePreferenceInList(it, mutablePreferencesList) + } // If focused issue preference found, place at/near top of list and return new list and // correct number of issue to show while collapsed @@ -156,12 +218,15 @@ class CollapsableIssuesCardHelper( getFocusedIssuePlacement(focusedIssueCardPreference, mutablePreferencesList) mutablePreferencesList.add(focusedIssuePlacement.index, focusedIssueCardPreference) return ReorderedSafetyCenterIssueList( - mutablePreferencesList.toList(), - focusedIssuePlacement.numberForShownIssuesCollapsed) + mutablePreferencesList.toList(), + focusedIssuePlacement.numberForShownIssuesCollapsed + ) } return ReorderedSafetyCenterIssueList( - issueCardPreferences, DEFAULT_NUMBER_SHOWN_ISSUES_COLLAPSED) + issueCardPreferences, + DEFAULT_NUMBER_SHOWN_ISSUES_COLLAPSED + ) } private fun findAndRemovePreferenceInList( @@ -192,8 +257,10 @@ class CollapsableIssuesCardHelper( issueCardPreference: IssueCardPreference, issueCardPreferenceList: List<IssueCardPreference> ): FocusedIssuePlacement { - return if (issueCardPreferenceList.isEmpty() || - issueCardPreferenceList[0].severityLevel <= issueCardPreference.severityLevel) { + return if ( + issueCardPreferenceList.isEmpty() || + issueCardPreferenceList[0].severityLevel <= issueCardPreference.severityLevel + ) { FocusedIssuePlacement.FOCUSED_ISSUE_INDEX_0 } else { FocusedIssuePlacement.FOCUSED_ISSUE_INDEX_1 @@ -202,19 +269,36 @@ class CollapsableIssuesCardHelper( private fun createMoreIssuesCardData( issueCardPreferences: List<IssueCardPreference>, + dismissedIssueCardPreferences: List<IssueCardPreference>, numberOfIssuesToShowWhenCollapsed: Int ): MoreIssuesCardData { val numberOfHiddenIssue: Int = - getNumberOfHiddenIssues(issueCardPreferences, numberOfIssuesToShowWhenCollapsed) + getNumberOfHiddenIssues( + issueCardPreferences, + dismissedIssueCardPreferences, + numberOfIssuesToShowWhenCollapsed + ) val firstHiddenIssueSeverityLevel: Int = - getFirstHiddenIssueSeverityLevel( - issueCardPreferences, numberOfIssuesToShowWhenCollapsed) + if (issueCardPreferences.isEmpty()) { + getFirstHiddenIssueSeverityLevel(dismissedIssueCardPreferences, 0) + } else { + getFirstHiddenIssueSeverityLevel( + issueCardPreferences, + numberOfIssuesToShowWhenCollapsed + ) + } - return MoreIssuesCardData(firstHiddenIssueSeverityLevel, numberOfHiddenIssue) + return MoreIssuesCardData( + firstHiddenIssueSeverityLevel, + numberOfHiddenIssue, + issueCardsExpanded + ) } private fun createMoreIssuesCardPreference( context: Context, + dismissedOnly: Boolean, + staticHeader: Boolean, issuesPreferenceGroup: PreferenceGroup, previousMoreIssuesCardData: MoreIssuesCardData?, nextMoreIssuesCardData: MoreIssuesCardData @@ -223,20 +307,24 @@ class CollapsableIssuesCardHelper( if (isQuickSettingsFragment) R.drawable.ic_chevron_right else R.drawable.ic_expand_more return MoreIssuesCardPreference( - context, prefIconResourceId, previousMoreIssuesCardData, nextMoreIssuesCardData) { + context, + prefIconResourceId, + previousMoreIssuesCardData, + nextMoreIssuesCardData, + dismissedOnly, + staticHeader + ) { if (isQuickSettingsFragment) { goToSafetyCenter(context) } else { - expand(issuesPreferenceGroup) + setExpanded(issuesPreferenceGroup, !issueCardsExpanded) } safetyCenterViewModel.interactionLogger.record(Action.MORE_ISSUES_CLICKED) - - true } } - private fun expand(issuesPreferenceGroup: PreferenceGroup) { - if (issueCardsExpanded) { + private fun setExpanded(issuesPreferenceGroup: PreferenceGroup, isExpanded: Boolean) { + if (issueCardsExpanded == isExpanded) { return } @@ -244,14 +332,26 @@ class CollapsableIssuesCardHelper( for (i in 0 until numberOfPreferences) { when (val preference = issuesPreferenceGroup.getPreference(i)) { // IssueCardPreference can all be visible now - is IssueCardPreference -> preference.isVisible = true + is IssueCardPreference -> + preference.isVisible = isExpanded || i < DEFAULT_NUMBER_SHOWN_ISSUES_COLLAPSED // MoreIssuesCardPreference must be hidden after expansion of issues - is MoreIssuesCardPreference -> preference.isVisible = false + is MoreIssuesCardPreference -> { + if (preference.isStaticHeader) { + preference.isVisible = isExpanded + } else { + previousMoreIssuesCardData?.let { + val newMoreIssuesCardData = it.copy(isExpanded = isExpanded) + preference.setNewMoreIssuesCardData(newMoreIssuesCardData) + previousMoreIssuesCardData = newMoreIssuesCardData + } + } + preference.isVisible = isExpanded || !preference.isStaticHeader + } // Other types are undefined, no-op else -> continue } } - issueCardsExpanded = true + issueCardsExpanded = isExpanded } private fun goToSafetyCenter(context: Context) { @@ -269,8 +369,11 @@ class CollapsableIssuesCardHelper( private fun getNumberOfHiddenIssues( issueCardPreferences: List<IssueCardPreference>, + dismissedIssueCardPreferences: List<IssueCardPreference>, numberOfIssuesToShowWhenCollapsed: Int - ): Int = max(0, issueCardPreferences.size - numberOfIssuesToShowWhenCollapsed) + ): Int = + max(0, issueCardPreferences.size - numberOfIssuesToShowWhenCollapsed) + + dismissedIssueCardPreferences.size private fun getFirstHiddenIssueSeverityLevel( issueCardPreferences: List<IssueCardPreference>, @@ -288,7 +391,9 @@ class CollapsableIssuesCardHelper( private fun addIssuesToPreferenceGroupAndSetVisibility( issuesPreferenceGroup: PreferenceGroup, issueCardPreferences: List<IssueCardPreference>, + dismissedIssueCardPreferences: List<IssueCardPreference>, moreIssuesCardPreference: MoreIssuesCardPreference, + dismissedIssuesHeaderPreference: MoreIssuesCardPreference?, numberOfIssuesToShowWhenCollapsed: Int, issueCardsExpanded: Boolean ) { @@ -296,13 +401,26 @@ class CollapsableIssuesCardHelper( // collapsed val indexOfFirstHiddenIssue: Int = numberOfIssuesToShowWhenCollapsed issueCardPreferences.forEachIndexed { index, issueCardPreference -> - if (index == indexOfFirstHiddenIssue && !issueCardsExpanded) { + if (index == indexOfFirstHiddenIssue) { issuesPreferenceGroup.addPreference(moreIssuesCardPreference) } issueCardPreference.isVisible = index < indexOfFirstHiddenIssue || issueCardsExpanded issuesPreferenceGroup.addPreference(issueCardPreference) } + if (dismissedIssueCardPreferences.isNotEmpty()) { + if (issueCardPreferences.size <= numberOfIssuesToShowWhenCollapsed) { + issuesPreferenceGroup.addPreference(moreIssuesCardPreference) + } + dismissedIssuesHeaderPreference?.let { + it.isVisible = issueCardsExpanded + issuesPreferenceGroup.addPreference(it) + } + dismissedIssueCardPreferences.forEach { + it.isVisible = issueCardsExpanded + issuesPreferenceGroup.addPreference(it) + } + } } } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/IssueCardPreference.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/IssueCardPreference.java index 5621a2600..d7199c546 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/IssueCardPreference.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/IssueCardPreference.java @@ -72,6 +72,7 @@ public class IssueCardPreference extends Preference implements ComparablePrefere private final SafetyCenterIssueId mDecodedIssueId; @Nullable private String mResolvedIssueActionId; @Nullable private final Integer mTaskId; + private final boolean mIsDismissed; public IssueCardPreference( Context context, @@ -79,7 +80,8 @@ public class IssueCardPreference extends Preference implements ComparablePrefere SafetyCenterIssue issue, @Nullable String resolvedIssueActionId, FragmentManager dialogFragmentManager, - @Nullable Integer launchTaskId) { + @Nullable Integer launchTaskId, + boolean isDismissed) { super(context); setLayoutResource(R.layout.preference_issue_card); @@ -89,6 +91,7 @@ public class IssueCardPreference extends Preference implements ComparablePrefere mDecodedIssueId = SafetyCenterIds.issueIdFromString(mIssue.getId()); mResolvedIssueActionId = resolvedIssueActionId; mTaskId = launchTaskId; + mIsDismissed = isDismissed; } @Override @@ -151,6 +154,9 @@ public class IssueCardPreference extends Preference implements ComparablePrefere builder.isLargeScreen(buttonList instanceof EqualWidthContainer); if (isFirstButton) { builder.setAsPrimaryButton(); + if (!mIsDismissed) { + builder.setAsFilledButton(); + } isFirstButton = false; } builder.buildAndAddToView(buttonList); @@ -198,7 +204,7 @@ public class IssueCardPreference extends Preference implements ComparablePrefere } private void configureDismissButton(View dismissButton) { - if (mIssue.isDismissible()) { + if (mIssue.isDismissible() && !mIsDismissed) { dismissButton.setOnClickListener( mIssue.shouldConfirmDismissal() ? new ConfirmDismissalOnClickListener() @@ -295,7 +301,8 @@ public class IssueCardPreference extends Preference implements ComparablePrefere private final SafetyCenterIssue.Action mAction; private final Context mContext; private final ContextThemeWrapper mContextThemeWrapper; - private boolean mIsFirstButton = false; + private boolean mIsPrimaryButton = false; + private boolean mIsFilled = false; private boolean mIsLargeScreen = false; ActionButtonBuilder(SafetyCenterIssue.Action action, Context context) { @@ -306,7 +313,12 @@ public class IssueCardPreference extends Preference implements ComparablePrefere } public ActionButtonBuilder setAsPrimaryButton() { - mIsFirstButton = true; + mIsPrimaryButton = true; + return this; + } + + public ActionButtonBuilder setAsFilledButton() { + mIsFilled = true; return this; } @@ -337,7 +349,7 @@ public class IssueCardPreference extends Preference implements ComparablePrefere mSafetyCenterViewModel .getInteractionLogger() .recordForIssue( - mIsFirstButton + mIsPrimaryButton ? Action.ISSUE_PRIMARY_ACTION_CLICKED : Action.ISSUE_SECONDARY_ACTION_CLICKED, mIssue); @@ -348,7 +360,7 @@ public class IssueCardPreference extends Preference implements ComparablePrefere } private void maybeAddSpaceToView(LinearLayout buttonList) { - if (mIsFirstButton) { + if (mIsPrimaryButton) { return; } @@ -361,13 +373,11 @@ public class IssueCardPreference extends Preference implements ComparablePrefere } private int getStyle() { - return mIsFirstButton - ? R.attr.scActionButtonStyle - : R.attr.scSecondaryActionButtonStyle; + return mIsFilled ? R.attr.scActionButtonStyle : R.attr.scSecondaryActionButtonStyle; } private void setButtonColors(MaterialButton button) { - if (mIsFirstButton) { + if (mIsFilled) { button.setBackgroundTintList( ContextCompat.getColorStateList( mContext, diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/MoreIssuesCardPreference.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/MoreIssuesCardPreference.kt index ec82ac763..304f665be 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/MoreIssuesCardPreference.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/MoreIssuesCardPreference.kt @@ -17,113 +17,71 @@ package com.android.permissioncontroller.safetycenter.ui import android.content.Context -import android.safetycenter.SafetyCenterIssue -import android.util.Log -import android.widget.ImageView -import android.widget.TextView +import android.os.Build import androidx.annotation.DrawableRes -import androidx.core.view.ViewCompat -import androidx.core.view.accessibility.AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK +import androidx.annotation.RequiresApi import androidx.preference.Preference import androidx.preference.PreferenceViewHolder import com.android.permissioncontroller.R -import com.android.permissioncontroller.permission.utils.StringUtils -import java.text.NumberFormat +import com.android.permissioncontroller.safetycenter.ui.view.MoreIssuesHeaderView /** A preference that displays a card linking to a list of more {@link SafetyCenterIssue}. */ -class MoreIssuesCardPreference( +@RequiresApi(Build.VERSION_CODES.TIRAMISU) +internal class MoreIssuesCardPreference( context: Context, @DrawableRes val preferenceWidgetIconResourceId: Int, - val previousMoreIssuesCardData: MoreIssuesCardData?, - val newMoreIssuesCardData: MoreIssuesCardData, - val onClickListener: OnPreferenceClickListener + private var previousMoreIssuesCardData: MoreIssuesCardData?, + private var newMoreIssuesCardData: MoreIssuesCardData, + private val dismissedOnly: Boolean, + val isStaticHeader: Boolean, + private val onClickListener: () -> Unit ) : Preference(context), ComparablePreference { - private var moreIssuesCardAnimator = MoreIssuesCardAnimator() - init { layoutResource = R.layout.preference_more_issues_card - widgetLayoutResource = R.layout.preference_expand_more_issues_widget - onPreferenceClickListener = onClickListener } override fun onBindViewHolder(holder: PreferenceViewHolder) { super.onBindViewHolder(holder) - val statusIcon = holder.findViewById(R.id.status_icon) as ImageView - setCurrentSeverityLevel(statusIcon) - val widgetIcon = holder.findViewById(R.id.widget_icon) as ImageView - widgetIcon.setImageResource(preferenceWidgetIconResourceId) - val widgetTitle = holder.findViewById(R.id.widget_title) as TextView - updateHiddenIssueCount(widgetTitle) - - val expansionString = - StringUtils.getIcuPluralsString( - context, - R.string.safety_center_more_issues_card_expand_action, - newMoreIssuesCardData.hiddenIssueCount) - // Replacing the on-click label to indicate the number of hidden issues. The on-click - // command is set to null so that it uses the existing expansion behaviour. - ViewCompat.replaceAccessibilityAction(holder.itemView, ACTION_CLICK, expansionString, null) - } - - private fun updateHiddenIssueCount(textView: TextView) { - moreIssuesCardAnimator.cancelTextChangeAnimation(textView) - - val numberFormat = NumberFormat.getInstance() - val previousText = previousMoreIssuesCardData?.hiddenIssueCount?.let(numberFormat::format) - val newText = numberFormat.format(newMoreIssuesCardData.hiddenIssueCount) - val animateTextChange = !previousText.isNullOrEmpty() && previousText != newText - - if (animateTextChange) { - textView.text = previousText - moreIssuesCardAnimator.animateChangeText(textView, newText) + val issueHeaderView = holder.itemView as MoreIssuesHeaderView + if (isStaticHeader) { + issueHeaderView.showStaticHeader( + context.getString(R.string.safety_center_dismissed_issues_card_title) + ) } else { - textView.text = newText + issueHeaderView.showExpandableHeader( + previousMoreIssuesCardData, + newMoreIssuesCardData, + context.getString( + if (dismissedOnly) { + R.string.safety_center_dismissed_issues_card_title + } else { + R.string.safety_center_more_issues_card_title + } + ), + onClickListener + ) } } - private fun setCurrentSeverityLevel(statusIcon: ImageView) { - moreIssuesCardAnimator.cancelStatusAnimation(statusIcon) - - if (previousMoreIssuesCardData != null && - previousMoreIssuesCardData.severityLevel != newMoreIssuesCardData.severityLevel) { - moreIssuesCardAnimator.animateStatusIconsChange( - statusIcon, - previousMoreIssuesCardData.severityLevel, - newMoreIssuesCardData.severityLevel, - selectIconResId(newMoreIssuesCardData.severityLevel)) - } else { - statusIcon.setImageResource(selectIconResId(newMoreIssuesCardData.severityLevel)) - } - } - - @DrawableRes - private fun selectIconResId(severityLevel: Int): Int { - return when (severityLevel) { - SafetyCenterIssue.ISSUE_SEVERITY_LEVEL_OK -> R.drawable.ic_safety_info - SafetyCenterIssue.ISSUE_SEVERITY_LEVEL_RECOMMENDATION -> - R.drawable.ic_safety_recommendation - SafetyCenterIssue.ISSUE_SEVERITY_LEVEL_CRITICAL_WARNING -> R.drawable.ic_safety_warn - else -> { - Log.e( - TAG, - String.format( - "Unexpected SafetyCenterIssue.IssueSeverityLevel: %d", severityLevel)) - R.drawable.ic_safety_null_state - } - } + fun setNewMoreIssuesCardData(moreIssuesCardData: MoreIssuesCardData) { + previousMoreIssuesCardData = newMoreIssuesCardData + newMoreIssuesCardData = moreIssuesCardData + notifyChanged() } override fun isSameItem(preference: Preference): Boolean { - return preference is MoreIssuesCardPreference + return preference is MoreIssuesCardPreference && isStaticHeader == preference.isStaticHeader } override fun hasSameContents(preference: Preference): Boolean { return preference is MoreIssuesCardPreference && + isStaticHeader == preference.isStaticHeader && previousMoreIssuesCardData == preference.previousMoreIssuesCardData && newMoreIssuesCardData == preference.newMoreIssuesCardData && - preferenceWidgetIconResourceId == preference.preferenceWidgetIconResourceId + preferenceWidgetIconResourceId == preference.preferenceWidgetIconResourceId && + dismissedOnly == preference.dismissedOnly } companion object { @@ -131,4 +89,8 @@ class MoreIssuesCardPreference( } } -data class MoreIssuesCardData(val severityLevel: Int, val hiddenIssueCount: Int) +internal data class MoreIssuesCardData( + val severityLevel: Int, + val hiddenIssueCount: Int, + val isExpanded: Boolean +) diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/PrivacySubpageFragment.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/PrivacySubpageFragment.kt index 23f86ad47..1a028d6d2 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/PrivacySubpageFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/PrivacySubpageFragment.kt @@ -84,7 +84,9 @@ class PrivacySubpageFragment : SafetyCenterFragment() { subpageIssueGroup.removeAll() val subpageIssues = uiData?.safetyCenterData?.issues?.filter { it.groupId == SOURCE_GROUP_ID } - if (subpageIssues.isNullOrEmpty()) { + val subpageDismissedIssues = + uiData?.safetyCenterData?.dismissedIssues?.filter { it.groupId == SOURCE_GROUP_ID } + if (subpageIssues.isNullOrEmpty() && subpageDismissedIssues.isNullOrEmpty()) { Log.w(TAG, "$SOURCE_GROUP_ID doesn't have any matching SafetyCenterIssues") return } @@ -95,6 +97,7 @@ class PrivacySubpageFragment : SafetyCenterFragment() { getChildFragmentManager(), subpageIssueGroup, subpageIssues, + subpageDismissedIssues, uiData.resolvedIssues, requireActivity().getTaskId() ) diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java index 9da922322..f7e602683 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterActivity.java @@ -23,11 +23,16 @@ import static android.safetycenter.SafetyCenterManager.EXTRA_SAFETY_SOURCES_GROU import static com.android.permissioncontroller.PermissionControllerStatsLog.PRIVACY_SIGNAL_NOTIFICATION_INTERACTION; import static com.android.permissioncontroller.PermissionControllerStatsLog.PRIVACY_SIGNAL_NOTIFICATION_INTERACTION__ACTION__NOTIFICATION_CLICKED; +import static com.android.permissioncontroller.safetycenter.SafetyCenterConstants.PERSONAL_PROFILE_SUFFIX; +import static com.android.permissioncontroller.safetycenter.SafetyCenterConstants.WORK_PROFILE_SUFFIX; import android.content.Intent; import android.os.Bundle; import android.provider.Settings; import android.safetycenter.SafetyCenterManager; +import android.safetycenter.config.SafetyCenterConfig; +import android.safetycenter.config.SafetySource; +import android.safetycenter.config.SafetySourcesGroup; import android.util.Log; import androidx.annotation.Nullable; @@ -37,9 +42,11 @@ import androidx.fragment.app.Fragment; import com.android.permissioncontroller.Constants; import com.android.permissioncontroller.PermissionControllerStatsLog; import com.android.permissioncontroller.R; +import com.android.permissioncontroller.safetycenter.ui.model.PrivacyControlsViewModel.Pref; import com.android.settingslib.activityembedding.ActivityEmbeddingUtils; import com.android.settingslib.collapsingtoolbar.CollapsingToolbarBaseActivity; +import java.util.List; import java.util.Objects; /** Entry-point activity for SafetyCenter. */ @@ -53,6 +60,7 @@ public final class SafetyCenterActivity extends CollapsingToolbarBaseActivity { "android.provider.extra.SETTINGS_EMBEDDED_DEEP_LINK_INTENT_URI"; private static final String EXTRA_SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY = "android.provider.extra.SETTINGS_EMBEDDED_DEEP_LINK_HIGHLIGHT_MENU_KEY"; + private static final String EXTRA_SETTINGS_FRAGMENT_ARGS_KEY = ":settings:fragment_args_key"; private SafetyCenterManager mSafetyCenterManager; @@ -70,11 +78,16 @@ public final class SafetyCenterActivity extends CollapsingToolbarBaseActivity { } Fragment frag; - if (SafetyCenterUiFlags.getShowSubpages() - && getIntent().getAction().equals(ACTION_SAFETY_CENTER) - && getIntent().hasExtra(EXTRA_SAFETY_SOURCES_GROUP_ID)) { + final boolean maybeOpenSubpage = + SafetyCenterUiFlags.getShowSubpages() + && getIntent().getAction().equals(ACTION_SAFETY_CENTER); + if (maybeOpenSubpage && getIntent().hasExtra(EXTRA_SAFETY_SOURCES_GROUP_ID)) { String groupId = getIntent().getStringExtra(EXTRA_SAFETY_SOURCES_GROUP_ID); frag = openRelevantSubpage(groupId); + } else if (maybeOpenSubpage && getIntent().hasExtra(EXTRA_SETTINGS_FRAGMENT_ARGS_KEY)) { + String preferenceKey = getIntent().getStringExtra(EXTRA_SETTINGS_FRAGMENT_ARGS_KEY); + String groupId = getParentGroupId(preferenceKey); + frag = openRelevantSubpage(groupId); } else if (getIntent().getAction().equals(PRIVACY_CONTROLS_ACTION)) { setTitle(R.string.privacy_controls_title); frag = PrivacyControlsFragment.newInstance(); @@ -186,4 +199,33 @@ public final class SafetyCenterActivity extends CollapsingToolbarBaseActivity { } return SafetyCenterSubpageFragment.newInstance(groupId); } + + @RequiresApi(UPSIDE_DOWN_CAKE) + private String getParentGroupId(String preferenceKey) { + if (Pref.findByKey(preferenceKey) != null) { + return PrivacySubpageFragment.SOURCE_GROUP_ID; + } + + SafetyCenterConfig safetyCenterConfig = mSafetyCenterManager.getSafetyCenterConfig(); + String[] splitKey; + if (preferenceKey.endsWith(PERSONAL_PROFILE_SUFFIX)) { + splitKey = preferenceKey.split("_" + PERSONAL_PROFILE_SUFFIX); + } else { + splitKey = preferenceKey.split("_" + WORK_PROFILE_SUFFIX); + } + + if (safetyCenterConfig == null || splitKey.length == 0) { + return ""; + } + + List<SafetySourcesGroup> groups = safetyCenterConfig.getSafetySourcesGroups(); + for (SafetySourcesGroup group : groups) { + for (SafetySource source : group.getSafetySources()) { + if (Objects.equals(source.getId(), splitKey[0])) { + return group.getId(); + } + } + } + return ""; + } } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java index edf71aab9..69e7f1088 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterDashboardFragment.java @@ -21,6 +21,7 @@ import static android.os.Build.VERSION_CODES.TIRAMISU; import static com.android.permissioncontroller.Constants.EXTRA_SESSION_ID; import static com.android.permissioncontroller.safetycenter.SafetyCenterConstants.QUICK_SETTINGS_SAFETY_CENTER_FRAGMENT; +import static java.util.Collections.emptyList; import static java.util.Objects.requireNonNull; import android.content.Context; @@ -212,6 +213,7 @@ public final class SafetyCenterDashboardFragment extends SafetyCenterFragment { getChildFragmentManager(), mIssuesGroup, issues, + emptyList(), resolvedIssues, getActivity().getTaskId()); } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterSubpageFragment.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterSubpageFragment.kt index 4c620d8ca..cc0048cb4 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterSubpageFragment.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterSubpageFragment.kt @@ -88,20 +88,24 @@ class SafetyCenterSubpageFragment : SafetyCenterFragment() { private fun updateSafetyCenterIssues(uiData: SafetyCenterUiData?) { subpageIssueGroup.removeAll() val subpageIssues = uiData?.safetyCenterData?.issues?.filter { it.groupId == sourceGroupId } - if (subpageIssues.isNullOrEmpty()) { + val subpageDismissedIssues = + uiData?.safetyCenterData?.dismissedIssues?.filter { it.groupId == sourceGroupId } + + subpageIllustration.isVisible = + subpageIssues.isNullOrEmpty() && subpageIllustration.imageDrawable != null + + if (subpageIssues.isNullOrEmpty() && subpageDismissedIssues.isNullOrEmpty()) { Log.w(TAG, "$sourceGroupId doesn't have any matching SafetyCenterIssues") - if (subpageIllustration.imageDrawable == null) return - subpageIllustration.setVisible(true) return } - subpageIllustration.setVisible(false) collapsableIssuesCardHelper.addIssues( requireContext(), safetyCenterViewModel, getChildFragmentManager(), subpageIssueGroup, subpageIssues, + subpageDismissedIssues, uiData.resolvedIssues, requireActivity().getTaskId() ) diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterUiFlags.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterUiFlags.kt index 053a77787..f702afe23 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterUiFlags.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/SafetyCenterUiFlags.kt @@ -17,7 +17,7 @@ package com.android.permissioncontroller.safetycenter.ui import android.provider.DeviceConfig -import androidx.core.os.BuildCompat +import com.android.modules.utils.build.SdkLevel /** A class to access the Safety Center UI related {@link DeviceConfig} flags. */ object SafetyCenterUiFlags { @@ -29,7 +29,7 @@ object SafetyCenterUiFlags { */ @JvmStatic fun getShowSubpages(): Boolean { - return BuildCompat.isAtLeastU() && + return SdkLevel.isAtLeastU() && DeviceConfig.getBoolean(DeviceConfig.NAMESPACE_PRIVACY, PROPERTY_SHOW_SUBPAGES, false) } } diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/PrivacyControlsViewModel.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/PrivacyControlsViewModel.kt index 6d02c1fc1..606bdb5b3 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/PrivacyControlsViewModel.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/model/PrivacyControlsViewModel.kt @@ -27,6 +27,7 @@ import android.os.UserManager import android.provider.DeviceConfig import android.provider.Settings import androidx.annotation.RequiresApi +import androidx.annotation.StringRes import androidx.fragment.app.Fragment import androidx.lifecycle.AndroidViewModel import androidx.lifecycle.ViewModel @@ -51,12 +52,16 @@ class PrivacyControlsViewModel(private val app: Application) : AndroidViewModel( private val CONFIG_MIC_TOGGLE_ENABLED = app.getString(R.string.mic_toggle_enable_config) private val CONFIG_CAMERA_TOGGLE_ENABLED = app.getString(R.string.camera_toggle_enable_config) - enum class Pref(val key: String) { - MIC("privacy_mic_toggle"), - CAMERA("privacy_camera_toggle"), - LOCATION("privacy_location_access"), - CLIPBOARD("show_clip_access_notification"), - SHOW_PASSWORD("show_password") + enum class Pref(val key: String, @StringRes val titleResId: Int) { + MIC("privacy_mic_toggle", R.string.camera_toggle_title), + CAMERA("privacy_camera_toggle", R.string.mic_toggle_title), + LOCATION("privacy_location_access", R.string.show_clip_access_notification_title), + CLIPBOARD("show_clip_access_notification", R.string.show_password_title), + SHOW_PASSWORD("show_password", R.string.location_settings); + + companion object { + @JvmStatic fun findByKey(inputKey: String) = values().find { it.key == inputKey } + } } data class PrefState(val visible: Boolean, val checked: Boolean, val admin: EnforcedAdmin?) @@ -72,19 +77,22 @@ class PrivacyControlsViewModel(private val app: Application) : AndroidViewModel( getSensorToggleState( Sensors.CAMERA, UserManager.DISALLOW_CAMERA_TOGGLE, - CONFIG_CAMERA_TOGGLE_ENABLED) + CONFIG_CAMERA_TOGGLE_ENABLED + ) shownPrefs[Pref.MIC] = getSensorToggleState( Sensors.MICROPHONE, UserManager.DISALLOW_MICROPHONE_TOGGLE, - CONFIG_MIC_TOGGLE_ENABLED) + CONFIG_MIC_TOGGLE_ENABLED + ) shownPrefs[Pref.CLIPBOARD] = PrefState(visible = true, checked = isClipboardEnabled(), admin = null) shownPrefs[Pref.SHOW_PASSWORD] = PrefState( visible = shouldDisplayShowPasswordToggle(), checked = isShowPasswordEnabled(), - admin = null) + admin = null + ) value = shownPrefs } @@ -139,28 +147,40 @@ class PrivacyControlsViewModel(private val app: Application) : AndroidViewModel( visible = sensorConfigEnabled && sensorPrivacyManager.supportsSensorToggle(sensor), checked = !sensorPrivacyManager.isSensorPrivacyEnabled(TOGGLE_TYPE_SOFTWARE, sensor), admin = - if (userManager - .getUserRestrictionSources(restriction, Process.myUserHandle()) - .isNotEmpty()) { + if ( + userManager + .getUserRestrictionSources(restriction, Process.myUserHandle()) + .isNotEmpty() + ) { admin } else { null - }) + } + ) } private fun isClipboardEnabled(): Boolean { val clipboardDefaultEnabled = DeviceConfig.getBoolean( - DeviceConfig.NAMESPACE_CLIPBOARD, CONFIG_SHOW_ACCESS_NOTIFICATIONS_DEFAULT, true) + DeviceConfig.NAMESPACE_CLIPBOARD, + CONFIG_SHOW_ACCESS_NOTIFICATIONS_DEFAULT, + true + ) val defaultSetting = if (clipboardDefaultEnabled) 1 else 0 return Settings.Secure.getInt( - app.contentResolver, CONFIG_CLIPBOARD_SHOW_ACCESS_NOTIFICATIONS, defaultSetting) != 0 + app.contentResolver, + CONFIG_CLIPBOARD_SHOW_ACCESS_NOTIFICATIONS, + defaultSetting + ) != 0 } private fun toggleClipboard() { val newState = if (isClipboardEnabled()) 0 else 1 Settings.Secure.putInt( - app.contentResolver, CONFIG_CLIPBOARD_SHOW_ACCESS_NOTIFICATIONS, newState) + app.contentResolver, + CONFIG_CLIPBOARD_SHOW_ACCESS_NOTIFICATIONS, + newState + ) } private fun isShowPasswordEnabled(): Boolean { @@ -172,7 +192,8 @@ class PrivacyControlsViewModel(private val app: Application) : AndroidViewModel( Settings.System.putInt( app.contentResolver, Settings.System.TEXT_SHOW_PASSWORD, - if (isShowPasswordEnabled()) 0 else 1) + if (isShowPasswordEnabled()) 0 else 1 + ) } private fun shouldDisplayShowPasswordToggle(): Boolean { diff --git a/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/MoreIssuesHeaderView.kt b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/MoreIssuesHeaderView.kt new file mode 100644 index 000000000..100b72c32 --- /dev/null +++ b/PermissionController/src/com/android/permissioncontroller/safetycenter/ui/view/MoreIssuesHeaderView.kt @@ -0,0 +1,177 @@ +package com.android.permissioncontroller.safetycenter.ui.view + +import android.content.Context +import android.graphics.drawable.Animatable2 +import android.graphics.drawable.AnimatedVectorDrawable +import android.graphics.drawable.Drawable +import android.os.Build +import android.safetycenter.SafetyCenterIssue +import android.text.TextUtils +import android.util.AttributeSet +import android.util.Log +import android.view.View +import android.widget.ImageView +import android.widget.TextView +import androidx.annotation.DrawableRes +import androidx.annotation.RequiresApi +import androidx.constraintlayout.widget.ConstraintLayout +import androidx.core.view.ViewCompat +import androidx.core.view.accessibility.AccessibilityNodeInfoCompat +import androidx.core.view.isVisible +import com.android.permissioncontroller.R +import com.android.permissioncontroller.permission.utils.StringUtils +import com.android.permissioncontroller.safetycenter.ui.MoreIssuesCardAnimator +import com.android.permissioncontroller.safetycenter.ui.MoreIssuesCardData +import java.text.NumberFormat + +@RequiresApi(Build.VERSION_CODES.TIRAMISU) +internal class MoreIssuesHeaderView +@JvmOverloads +constructor( + context: Context, + attrs: AttributeSet? = null, + defStyleAttr: Int = 0, + defStyleRes: Int = 0 +) : ConstraintLayout(context, attrs, defStyleAttr, defStyleRes) { + + init { + inflate(context, R.layout.view_more_issues, this) + } + + private val moreIssuesCardAnimator = MoreIssuesCardAnimator() + private val statusIconView: ImageView by lazy { findViewById(R.id.status_icon) } + private val titleView: TextView by lazy { findViewById(R.id.title) } + private val expandCollapseLayout: View by lazy { findViewById(android.R.id.widget_frame) } + private val counterView: TextView by lazy { + expandCollapseLayout.findViewById(R.id.widget_title) + } + private val expandCollapseIcon: ImageView by lazy { + expandCollapseLayout.findViewById(R.id.widget_icon) + } + + fun showExpandableHeader( + previousData: MoreIssuesCardData?, + nextData: MoreIssuesCardData, + title: String, + onClick: () -> Unit + ) { + titleView.text = title + updateStatusIcon(previousData?.severityLevel, nextData.severityLevel) + updateExpandCollapseButton(previousData?.isExpanded, nextData.isExpanded) + updateIssueCount(previousData?.hiddenIssueCount, nextData.hiddenIssueCount) + setOnClickListener { onClick() } + + val expansionString = + StringUtils.getIcuPluralsString( + context, + R.string.safety_center_more_issues_card_expand_action, + nextData.hiddenIssueCount + ) + // Replacing the on-click label to indicate the number of hidden issues. The on-click + // command is set to null so that it uses the existing expansion behaviour. + ViewCompat.replaceAccessibilityAction( + this, + AccessibilityNodeInfoCompat.AccessibilityActionCompat.ACTION_CLICK, + expansionString, + null + ) + } + + fun showStaticHeader(title: String) { + titleView.text = title + statusIconView.isVisible = false + expandCollapseLayout.isVisible = false + setOnClickListener(null) + isClickable = false + } + + private fun updateExpandCollapseButton(wasExpanded: Boolean?, isExpanded: Boolean) { + expandCollapseLayout.isVisible = true + if (wasExpanded != null && wasExpanded != isExpanded) { + if (isExpanded) { + expandCollapseIcon.animate( + R.drawable.more_issues_expand_anim, + R.drawable.ic_collapse_issues + ) + } else { + expandCollapseIcon.animate( + R.drawable.more_issues_collapse_anim, + R.drawable.ic_expand_issues + ) + } + } else { + expandCollapseIcon.setImageResource( + if (isExpanded) { + R.drawable.ic_collapse_issues + } else { + R.drawable.ic_expand_issues + } + ) + } + } + + private fun updateStatusIcon(previousSeverityLevel: Int?, endSeverityLevel: Int) { + statusIconView.isVisible = true + moreIssuesCardAnimator.cancelStatusAnimation(statusIconView) + if (previousSeverityLevel != null && previousSeverityLevel != endSeverityLevel) { + moreIssuesCardAnimator.animateStatusIconsChange( + statusIconView, + previousSeverityLevel, + endSeverityLevel, + selectIconResId(endSeverityLevel) + ) + } else { + statusIconView.setImageResource(selectIconResId(endSeverityLevel)) + } + } + + @DrawableRes + private fun selectIconResId(severityLevel: Int): Int { + return when (severityLevel) { + SafetyCenterIssue.ISSUE_SEVERITY_LEVEL_OK -> R.drawable.ic_safety_info + SafetyCenterIssue.ISSUE_SEVERITY_LEVEL_RECOMMENDATION -> + R.drawable.ic_safety_recommendation + SafetyCenterIssue.ISSUE_SEVERITY_LEVEL_CRITICAL_WARNING -> R.drawable.ic_safety_warn + else -> { + Log.e(TAG, "Unexpected SafetyCenterIssue.IssueSeverityLevel: $severityLevel") + R.drawable.ic_safety_null_state + } + } + } + + private fun updateIssueCount(previousCount: Int?, endCount: Int) { + moreIssuesCardAnimator.cancelTextChangeAnimation(counterView) + + val numberFormat = NumberFormat.getInstance() + val previousText = previousCount?.let(numberFormat::format) + val newText = numberFormat.format(endCount) + val animateTextChange = + !previousText.isNullOrEmpty() && !TextUtils.equals(previousText, newText) + + if (animateTextChange) { + counterView.text = previousText + moreIssuesCardAnimator.animateChangeText(counterView, newText) + } else { + counterView.text = newText + } + } + + private fun ImageView.animate(@DrawableRes animationRes: Int, @DrawableRes imageRes: Int) { + (drawable as? AnimatedVectorDrawable)?.clearAnimationCallbacks() + setImageResource(animationRes) + (drawable as? AnimatedVectorDrawable)?.apply { + registerAnimationCallback( + object : Animatable2.AnimationCallback() { + override fun onAnimationEnd(drawable: Drawable?) { + setImageResource(imageRes) + } + } + ) + start() + } + } + + companion object { + val TAG: String = MoreIssuesHeaderView::class.java.simpleName + } +} diff --git a/PermissionController/src/com/android/permissioncontroller/safetylabel/AppsSafetyLabelHistoryPersistence.kt b/PermissionController/src/com/android/permissioncontroller/safetylabel/AppsSafetyLabelHistoryPersistence.kt index 07a8e46d4..890f68e70 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetylabel/AppsSafetyLabelHistoryPersistence.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetylabel/AppsSafetyLabelHistoryPersistence.kt @@ -95,14 +95,19 @@ object AppsSafetyLabelHistoryPersistence { return null } - /** - * Returns a set of [AppInfo]s representing apps that have safety label data persisted in - * history [file]. - */ - fun getAppsWithSafetyLabels(file: File): Set<AppInfo> { - val appHistories = read(file)?.appSafetyLabelHistories + /** Returns the last updated time for each stored [AppSafetyLabelHistory]. */ + fun getSafetyLabelsLastUpdatedTimes(file: File): Map<AppInfo, Instant> { + val appHistories = read(file)?.appSafetyLabelHistories ?: return emptyMap() + + val lastUpdatedTimes = mutableMapOf<AppInfo, Instant>() + for (appHistory in appHistories) { + val lastSafetyLabelReceiptTime: Instant? = appHistory.getLastReceiptTime() + if (lastSafetyLabelReceiptTime != null) { + lastUpdatedTimes[appHistory.appInfo] = lastSafetyLabelReceiptTime + } + } - return appHistories?.map { it.appInfo }?.toSet() ?: setOf() + return lastUpdatedTimes } /** @@ -274,6 +279,9 @@ object AppsSafetyLabelHistoryPersistence { fun getSafetyLabelHistoryFile(context: Context): File = File(context.filesDir, APPS_SAFETY_LABEL_HISTORY_PERSISTENCE_FILE_NAME) + private fun AppSafetyLabelHistory.getLastReceiptTime(): Instant? = + this.safetyLabelHistory.lastOrNull()?.receivedAt + private fun XmlPullParser.parseHistoryFile(): AppsSafetyLabelHistory { if (eventType != XmlPullParser.START_DOCUMENT) { throw IllegalArgumentException() diff --git a/PermissionController/src/com/android/permissioncontroller/safetylabel/SafetyLabelChangedBroadcastReceiver.kt b/PermissionController/src/com/android/permissioncontroller/safetylabel/SafetyLabelChangedBroadcastReceiver.kt index f8ae5668d..c2bb808dc 100644 --- a/PermissionController/src/com/android/permissioncontroller/safetylabel/SafetyLabelChangedBroadcastReceiver.kt +++ b/PermissionController/src/com/android/permissioncontroller/safetylabel/SafetyLabelChangedBroadcastReceiver.kt @@ -82,8 +82,12 @@ class SafetyLabelChangedBroadcastReceiver : BroadcastReceiver() { val user: UserHandle = intent.getParcelableExtra(Intent.EXTRA_USER, UserHandle::class.java) ?: currentUser + + val pendingResult: PendingResult = goAsync() + GlobalScope.launch(Dispatchers.Main) { - processPackageChange(context, packageName, user, packageChangeEvent) + processPackageChange(context, packageName, user) + pendingResult.finish() } } @@ -92,14 +96,13 @@ class SafetyLabelChangedBroadcastReceiver : BroadcastReceiver() { context: Context, packageName: String, user: UserHandle, - packageChangeEvent: PackageChangeEvent ) { val lightPackageInfo = LightPackageInfoLiveData[Pair(packageName, user)].getInitializedValue() if (!isAppRequestingLocationPermission(lightPackageInfo)) { return } - writeSafetyLabel(context, lightPackageInfo, user, packageChangeEvent) + writeSafetyLabel(context, lightPackageInfo, user) } /** @@ -112,7 +115,6 @@ class SafetyLabelChangedBroadcastReceiver : BroadcastReceiver() { context: Context, lightPackageInfo: LightPackageInfo, user: UserHandle, - packageChangeEvent: PackageChangeEvent ) { val packageName = lightPackageInfo.packageName if (DEBUG) { @@ -137,12 +139,8 @@ class SafetyLabelChangedBroadcastReceiver : BroadcastReceiver() { val safetyLabel: AppMetadataSafetyLabel = AppMetadataSafetyLabel.getSafetyLabelFromMetadata(appMetadataBundle) ?: return - val receivedAtMs: Long = - if (packageChangeEvent == PackageChangeEvent.NEW_INSTALL) { - lightPackageInfo.firstInstallTime - } else { - lightPackageInfo.lastUpdateTime - } + val receivedAtMs: Long = lightPackageInfo.lastUpdateTime + val safetyLabelForPersistence: SafetyLabelForPersistence = AppsSafetyLabelHistory.SafetyLabel.fromAppMetadataSafetyLabel( packageName, Instant.ofEpochMilli(receivedAtMs), safetyLabel) diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetylabel/AppsSafetyLabelHistoryPersistenceTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetylabel/AppsSafetyLabelHistoryPersistenceTest.kt index 8ff6be812..5c736bc1b 100644 --- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetylabel/AppsSafetyLabelHistoryPersistenceTest.kt +++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetylabel/AppsSafetyLabelHistoryPersistenceTest.kt @@ -317,14 +317,15 @@ class AppsSafetyLabelHistoryPersistenceTest { } @Test - fun givenNoAppsPersisted_getAppsWithSafetyLabels_returnsNoApps() { - val apps = AppsSafetyLabelHistoryPersistence.getAppsWithSafetyLabels(dataFile) + fun givenNoAppsPersisted_getSafetyLabelsLastUpdatedTimes_returnsEmptyMap() { + val lastUpdatedTimes = + AppsSafetyLabelHistoryPersistence.getSafetyLabelsLastUpdatedTimes(dataFile) - assertThat(apps).isEmpty() + assertThat(lastUpdatedTimes).isEmpty() } @Test - fun givenSomeAppsPersisted_getAppsWithSafetyLabels_returnsPersistedApps() { + fun givenSomeAppsPersisted_getSafetyLabelsLastUpdatedTimes_returnsLastUpdatedTimes() { val appsSafetyLabelHistory = AppsSafetyLabelHistory( listOf( @@ -337,9 +338,14 @@ class AppsSafetyLabelHistoryPersistenceTest { SAFETY_LABEL_PKG_2_V1, SAFETY_LABEL_PKG_2_V2, SAFETY_LABEL_PKG_2_V3)))) AppsSafetyLabelHistoryPersistence.write(dataFile, appsSafetyLabelHistory) - val apps = AppsSafetyLabelHistoryPersistence.getAppsWithSafetyLabels(dataFile) + val lastUpdatedTimes = + AppsSafetyLabelHistoryPersistence.getSafetyLabelsLastUpdatedTimes(dataFile) - assertThat(apps).isEqualTo(setOf(AppInfo(PACKAGE_NAME_1), AppInfo(PACKAGE_NAME_2))) + assertThat(lastUpdatedTimes) + .isEqualTo( + mapOf( + AppInfo(PACKAGE_NAME_1) to DATE_2022_10_14, + AppInfo(PACKAGE_NAME_2) to DATE_2022_12_30)) } @Test diff --git a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetylabel/SafetyLabelChangesJobServiceTest.kt b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetylabel/SafetyLabelChangesJobServiceTest.kt index 6eb4e8609..62e6e2f58 100644 --- a/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetylabel/SafetyLabelChangesJobServiceTest.kt +++ b/PermissionController/tests/mocking/src/com/android/permissioncontroller/tests/mocking/safetylabel/SafetyLabelChangesJobServiceTest.kt @@ -23,6 +23,7 @@ import android.app.job.JobScheduler import android.content.Context import android.content.Intent import android.os.Build +import android.os.UserManager import android.provider.DeviceConfig import android.safetylabel.SafetyLabelConstants import androidx.test.core.app.ApplicationProvider @@ -64,6 +65,8 @@ class SafetyLabelChangesJobServiceTest { @Mock private lateinit var mockJobScheduler: JobScheduler + @Mock private lateinit var mockUserManager: UserManager + @Mock private lateinit var mockNotificationManager: NotificationManager @Before @@ -86,12 +89,15 @@ class SafetyLabelChangesJobServiceTest { whenever(application.resources).thenReturn(context.resources) whenever(application.applicationInfo).thenReturn(context.applicationInfo) whenever(application.applicationContext).thenReturn(application) + whenever(mockUserManager.isProfile).thenReturn(false) // Mock services whenever(application.getSystemService(eq(NotificationManager::class.java))) .thenReturn(mockNotificationManager) whenever(application.getSystemService(eq(JobScheduler::class.java))) .thenReturn(mockJobScheduler) + whenever(application.getSystemService(eq(UserManager::class.java))) + .thenReturn(mockUserManager) doNothing().`when`(service).jobFinished(any(), anyBoolean()) } diff --git a/SafetyCenter/Config/tests/Android.bp b/SafetyCenter/Config/tests/Android.bp index c47356775..c58f2c922 100644 --- a/SafetyCenter/Config/tests/Android.bp +++ b/SafetyCenter/Config/tests/Android.bp @@ -30,8 +30,8 @@ android_test { per_testcase_directory: true, static_libs: [ "compatibility-device-util-axt", - "kotlinx-coroutines-android", "safety-center-config", + "safety-center-test-util-lib", ], test_suites: [ "general-tests", diff --git a/SafetyCenter/Config/tests/AndroidTest.xml b/SafetyCenter/Config/tests/AndroidTest.xml index cac418d5d..44a161f8f 100644 --- a/SafetyCenter/Config/tests/AndroidTest.xml +++ b/SafetyCenter/Config/tests/AndroidTest.xml @@ -41,5 +41,6 @@ <test class="com.android.tradefed.testtype.AndroidJUnitTest" > <option name="package" value="com.android.safetycenter.config.tests" /> <option name="runner" value="androidx.test.runner.AndroidJUnitRunner" /> + <option name="exclude-annotation" value="org.junit.Ignore"/> </test> </configuration> diff --git a/SafetyCenter/Config/tests/java/com/android/safetycenter/config/Coroutines.kt b/SafetyCenter/Config/tests/java/com/android/safetycenter/config/Coroutines.kt deleted file mode 100644 index 9b1d4c5f9..000000000 --- a/SafetyCenter/Config/tests/java/com/android/safetycenter/config/Coroutines.kt +++ /dev/null @@ -1,77 +0,0 @@ -/* - * Copyright (C) 2022 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.safetycenter.config - -import android.util.Log -import kotlinx.coroutines.delay -import kotlinx.coroutines.runBlocking -import kotlinx.coroutines.withTimeout -import java.time.Duration - -/** - * A class that facilitates interacting with coroutines. - * TODO(b/228823159) Consolidate with other Coroutines helper functions - */ -object Coroutines { - - /** Behaves in the same way as [runBlocking], but with a timeout. */ - fun <T> runBlockingWithTimeout(timeout: Duration = TIMEOUT_LONG, block: suspend () -> T) = - runBlocking { - withTimeout(timeout.toMillis()) { block() } - } - - /** Check a condition using coroutines with a timeout. */ - fun waitForWithTimeout( - timeout: Duration = TIMEOUT_LONG, - checkPeriod: Duration = CHECK_PERIOD, - condition: () -> Boolean - ) { - runBlockingWithTimeout(timeout) { waitFor(checkPeriod, condition) } - } - - /** Check a condition using coroutines. */ - suspend fun waitFor(checkPeriod: Duration = CHECK_PERIOD, condition: () -> Boolean) { - val conditionMet = condition() - if (conditionMet) { - return - } - delay(checkPeriod.toMillis()) - return waitFor(checkPeriod, condition) - } - - /** Retries a test until no assertions or exceptions are thrown or a timeout occurs. */ - fun waitForTestToPass(test: () -> Unit) { - waitForWithTimeout { - try { - test() - true - } catch (ex: Throwable) { - Log.w(TAG, "Encountered test failure, retrying until timeout: $ex") - false - } - } - } - - /** A medium period, to be used for conditions that are expected to change. */ - private val TAG = "Coroutines" - - /** A medium period, to be used for conditions that are expected to change. */ - private val CHECK_PERIOD = Duration.ofMillis(250) - - /** A long timeout, to be used for actions that are expected to complete. */ - private val TIMEOUT_LONG: Duration = Duration.ofSeconds(5) -}
\ No newline at end of file diff --git a/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigInvalidTest.kt b/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigInvalidTest.kt index fe189dc7a..64775d7fe 100644 --- a/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigInvalidTest.kt +++ b/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigInvalidTest.kt @@ -62,360 +62,430 @@ class ParserConfigInvalidTest { @Parameterized.Parameters(name = "{0}") fun parameters() = arrayOf( - Params( - "ConfigDynamicSafetySourceAllDisabledNoWork", - R.raw.config_dynamic_safety_source_all_disabled_no_work, - "Element dynamic-safety-source invalid", - "Required attribute titleForWork missing"), - Params( - "ConfigDynamicSafetySourceAllHiddenWithSearchNoWork", - R.raw.config_dynamic_safety_source_all_hidden_with_search_no_work, - "Element dynamic-safety-source invalid", - "Required attribute titleForWork missing"), - Params( - "ConfigDynamicSafetySourceAllNoWork", - R.raw.config_dynamic_safety_source_all_no_work, - "Element dynamic-safety-source invalid", - "Required attribute titleForWork missing"), - Params( - "ConfigDynamicSafetySourceDisabledNoSummary", - R.raw.config_dynamic_safety_source_disabled_no_summary, - "Element dynamic-safety-source invalid", - "Required attribute summary missing"), - Params( - "ConfigDynamicSafetySourceDisabledNoTitle", - R.raw.config_dynamic_safety_source_disabled_no_title, - "Element dynamic-safety-source invalid", - "Required attribute title missing"), - Params( - "ConfigDynamicSafetySourceDuplicateKey", - R.raw.config_dynamic_safety_source_duplicate_key, - "Element safety-sources-config invalid", - "Duplicate id id among safety sources"), - Params( - "ConfigDynamicSafetySourceHiddenWithSearchNoTitle", - R.raw.config_dynamic_safety_source_hidden_with_search_no_title, - "Element dynamic-safety-source invalid", - "Required attribute title missing"), - Params( - "ConfigDynamicSafetySourceInvalidDisplay", - R.raw.config_dynamic_safety_source_invalid_display, - "Attribute value \"invalid\" in dynamic-safety-source.initialDisplayState " + - "invalid", - null), - Params( - "ConfigDynamicSafetySourceInvalidId", - R.raw.config_dynamic_safety_source_invalid_id, - "Element dynamic-safety-source invalid", - "Attribute id invalid"), - Params( - "ConfigDynamicSafetySourceInvalidProfile", - R.raw.config_dynamic_safety_source_invalid_profile, - "Attribute value \"invalid\" in dynamic-safety-source.profile invalid", - null), - Params( - "ConfigDynamicSafetySourceNoId", - R.raw.config_dynamic_safety_source_no_id, - "Element dynamic-safety-source invalid", - "Required attribute id missing"), - Params( - "ConfigDynamicSafetySourceNoIntent", - R.raw.config_dynamic_safety_source_no_intent, - "Element dynamic-safety-source invalid", - "Required attribute intentAction missing"), - Params( - "ConfigDynamicSafetySourceNoPackage", - R.raw.config_dynamic_safety_source_no_package, - "Element dynamic-safety-source invalid", - "Required attribute packageName missing"), - Params( - "ConfigDynamicSafetySourceNoProfile", - R.raw.config_dynamic_safety_source_no_profile, - "Element dynamic-safety-source invalid", - "Required attribute profile missing"), - Params( - "ConfigDynamicSafetySourceNoSummary", - R.raw.config_dynamic_safety_source_no_summary, - "Element dynamic-safety-source invalid", - "Required attribute summary missing"), - Params( - "ConfigDynamicSafetySourceNoTitle", - R.raw.config_dynamic_safety_source_no_title, - "Element dynamic-safety-source invalid", - "Required attribute title missing"), - Params( - "ConfigDynamicSafetySourcePrimaryHiddenWithWork", - R.raw.config_dynamic_safety_source_primary_hidden_with_work, - "Element dynamic-safety-source invalid", - "Prohibited attribute titleForWork present"), - Params( - "ConfigDynamicSafetySourcePrimaryWithWork", - R.raw.config_dynamic_safety_source_primary_with_work, - "Element dynamic-safety-source invalid", - "Prohibited attribute titleForWork present"), - Params( - "ConfigFileCorrupted", - R.raw.config_file_corrupted, - "Exception while parsing the XML resource", - null), - Params( - "ConfigIssueOnlySafetySourceDuplicateKey", - R.raw.config_issue_only_safety_source_duplicate_key, - "Element safety-sources-config invalid", - "Duplicate id id among safety sources"), - Params( - "ConfigIssueOnlySafetySourceInvalidId", - R.raw.config_issue_only_safety_source_invalid_id, - "Element issue-only-safety-source invalid", - "Attribute id invalid"), - Params( - "ConfigIssueOnlySafetySourceInvalidProfile", - R.raw.config_issue_only_safety_source_invalid_profile, - "Attribute value \"invalid\" in issue-only-safety-source.profile invalid", - null), - Params( - "ConfigIssueOnlySafetySourceNoId", - R.raw.config_issue_only_safety_source_no_id, - "Element issue-only-safety-source invalid", - "Required attribute id missing"), - Params( - "ConfigIssueOnlySafetySourceNoPackage", - R.raw.config_issue_only_safety_source_no_package, - "Element issue-only-safety-source invalid", - "Required attribute packageName missing"), - Params( - "ConfigIssueOnlySafetySourceNoProfile", - R.raw.config_issue_only_safety_source_no_profile, - "Element issue-only-safety-source invalid", - "Required attribute profile missing"), - Params( - "ConfigIssueOnlySafetySourceWithDisplay", - R.raw.config_issue_only_safety_source_with_display, - "Element issue-only-safety-source invalid", - "Prohibited attribute initialDisplayState present"), - Params( - "ConfigIssueOnlySafetySourceWithIntent", - R.raw.config_issue_only_safety_source_with_intent, - "Element issue-only-safety-source invalid", - "Prohibited attribute intentAction present"), - Params( - "ConfigIssueOnlySafetySourceWithSearch", - R.raw.config_issue_only_safety_source_with_search, - "Element issue-only-safety-source invalid", - "Prohibited attribute searchTerms present"), - Params( - "ConfigIssueOnlySafetySourceWithSummary", - R.raw.config_issue_only_safety_source_with_summary, - "Element issue-only-safety-source invalid", - "Prohibited attribute summary present"), - Params( - "ConfigIssueOnlySafetySourceWithTitle", - R.raw.config_issue_only_safety_source_with_title, - "Element issue-only-safety-source invalid", - "Prohibited attribute title present"), - Params( - "ConfigIssueOnlySafetySourceWithWork", - R.raw.config_issue_only_safety_source_with_work, - "Element issue-only-safety-source invalid", - "Prohibited attribute titleForWork present"), - Params( - "ConfigMixedSafetySourceDuplicateKey", - R.raw.config_mixed_safety_source_duplicate_key, - "Element safety-sources-config invalid", - "Duplicate id id among safety sources"), - Params( - "ConfigSafetyCenterConfigMissing", - R.raw.config_safety_center_config_missing, - "Element safety-center-config missing", - null), - Params( - "ConfigSafetySourcesConfigEmpty", - R.raw.config_safety_sources_config_empty, - "Element safety-sources-config invalid", - "No safety sources groups present"), - Params( - "ConfigSafetySourcesConfigMissing", - R.raw.config_safety_sources_config_missing, - "Element safety-sources-config missing", - null), - Params( - "ConfigSafetySourcesGroupDuplicateId", - R.raw.config_safety_sources_group_duplicate_id, - "Element safety-sources-config invalid", - "Duplicate id id among safety sources groups"), - Params( - "ConfigSafetySourcesGroupEmpty", - R.raw.config_safety_sources_group_empty, - "Element safety-sources-group invalid", - "Safety sources group empty"), - Params( - "ConfigSafetySourcesGroupHiddenWithOnlyDynamic", - R.raw.config_safety_sources_group_hidden_with_only_dynamic, - "Element safety-sources-group invalid", - "Safety sources groups of type hidden can only contain sources of type " + - "issue-only", - SdkLevel.isAtLeastU()), - Params( - "ConfigSafetySourcesGroupHiddenWithOnlyStatic", - R.raw.config_safety_sources_group_hidden_with_only_static, - "Element safety-sources-group invalid", - "Safety sources groups of type hidden can only contain sources of type " + - "issue-only", - SdkLevel.isAtLeastU()), - Params( - "ConfigSafetySourcesGroupInvalidIcon", - R.raw.config_safety_sources_group_invalid_icon, - "Attribute value \"invalid\" in safety-sources-group.statelessIconType invalid", - null), - Params( - "ConfigSafetySourcesGroupInvalidId", - R.raw.config_safety_sources_group_invalid_id, - "Element safety-sources-group invalid", - "Attribute id invalid"), - Params( - "ConfigSafetySourcesGroupNoId", - R.raw.config_safety_sources_group_no_id, - "Element safety-sources-group invalid", - "Required attribute id missing"), - Params( - "ConfigSafetySourcesGroupNoTitle", - R.raw.config_safety_sources_group_no_title, - "Element safety-sources-group invalid", - "Required attribute title missing"), - Params( - "ConfigSafetySourcesGroupStatefulWithOnlyIssueOnly", - R.raw.config_safety_sources_group_stateful_with_only_issue_only, - "Element safety-sources-group invalid", - "Safety sources groups containing only sources of type issue-only must be of " + - "type hidden", - SdkLevel.isAtLeastU()), - Params( - "ConfigSafetySourcesGroupStatelessWithOnlyIssueOnly", - R.raw.config_safety_sources_group_stateless_with_only_issue_only, - "Element safety-sources-group invalid", - "Safety sources groups containing only sources of type issue-only must be of " + - "type hidden", - SdkLevel.isAtLeastU()), - Params( - "ConfigStaticSafetySourceDuplicateKey", - R.raw.config_static_safety_source_duplicate_key, - "Element safety-sources-config invalid", - "Duplicate id id among safety sources"), - Params( - "ConfigStaticSafetySourceInvalidId", - R.raw.config_static_safety_source_invalid_id, - "Element static-safety-source invalid", - "Attribute id invalid"), - Params( - "ConfigStaticSafetySourceInvalidProfile", - R.raw.config_static_safety_source_invalid_profile, - "Attribute value \"invalid\" in static-safety-source.profile invalid", - null), - Params( - "ConfigStaticSafetySourceNoId", - R.raw.config_static_safety_source_no_id, - "Element static-safety-source invalid", - "Required attribute id missing"), - Params( - "ConfigStaticSafetySourceNoIntent", - R.raw.config_static_safety_source_no_intent, - "Element static-safety-source invalid", - "Required attribute intentAction missing"), - Params( - "ConfigStaticSafetySourceNoProfile", - R.raw.config_static_safety_source_no_profile, - "Element static-safety-source invalid", - "Required attribute profile missing"), - Params( - "ConfigStaticSafetySourceNoTitle", - R.raw.config_static_safety_source_no_title, - "Element static-safety-source invalid", - "Required attribute title missing"), - Params( - "ConfigStaticSafetySourceWithDeduplicationGroups", - R.raw.config_static_safety_source_with_deduplication_groups, - "Element static-safety-source invalid", - "Prohibited attribute deduplicationGroup present", - SdkLevel.isAtLeastU()), - Params( - "ConfigStaticSafetySourceWithDisplay", - R.raw.config_static_safety_source_with_display, - "Element static-safety-source invalid", - "Prohibited attribute initialDisplayState present"), - Params( - "ConfigStaticSafetySourceWithLogging", - R.raw.config_static_safety_source_with_logging, - "Element static-safety-source invalid", - "Prohibited attribute loggingAllowed present"), - Params( - "ConfigStaticSafetySourceWithNotifications", - R.raw.config_static_safety_source_with_notifications, - "Element static-safety-source invalid", - "Prohibited attribute notificationsAllowed present", - SdkLevel.isAtLeastU()), - Params( - "ConfigStaticSafetySourceWithPackage", - R.raw.config_static_safety_source_with_package, - "Element static-safety-source invalid", - "Prohibited attribute packageName present", - !SdkLevel.isAtLeastU()), - Params( - "ConfigStaticSafetySourceWithPackageCertficates", - R.raw.config_static_safety_source_with_package_certs, - "Element static-safety-source invalid", - "Prohibited attribute packageCertificateHashes present", - SdkLevel.isAtLeastU()), - Params( - "ConfigStaticSafetySourceWithPrimaryAndWork", - R.raw.config_static_safety_source_with_primary_and_work, - "Element static-safety-source invalid", - "Prohibited attribute titleForWork present"), - Params( - "ConfigStaticSafetySourceWithRefresh", - R.raw.config_static_safety_source_with_refresh, - "Element static-safety-source invalid", - "Prohibited attribute refreshOnPageOpenAllowed present"), - Params( - "ConfigStaticSafetySourceWithSeverity", - R.raw.config_static_safety_source_with_severity, - "Element static-safety-source invalid", - "Prohibited attribute maxSeverityLevel present"), - Params( - "ConfigStringResourceNameInvalidEmpty", - R.raw.config_string_resource_name_empty, - "Resource name in safety-sources-group.title cannot be empty", - null), - Params( - "ConfigStringResourceNameInvalidNoAt", - R.raw.config_string_resource_name_invalid_no_at, - "Resource name \"com.android.safetycenter.config.tests:string/reference\" in " + - "safety-sources-group.title does not start with @", - null), - Params( - "ConfigStringResourceNameInvalidNoPackage", - R.raw.config_string_resource_name_invalid_no_package, - "Resource name \"@string/reference\" in safety-sources-group.title does not " + - "specify a package", - null), - Params( - "ConfigStringResourceNameInvalidNoType", - R.raw.config_string_resource_name_invalid_no_type, - "Resource name \"@com.android.safetycenter.config.tests:reference\" in " + - "safety-sources-group.title does not specify a type", - null), - Params( - "ConfigStringResourceNameInvalidWrongType", - R.raw.config_string_resource_name_invalid_wrong_type, - "Resource name \"@com.android.safetycenter.config.tests:raw/" + - "config_string_resource_name_invalid_wrong_type\" in " + - "safety-sources-group.title is not a string", - null), - Params( - "ConfigStringResourceNameMissing", - R.raw.config_string_resource_name_missing, - "Resource name \"@com.android.safetycenter.config.tests:string/missing\" in " + - "safety-sources-group.title missing or invalid", - null)) + Params( + "ConfigDynamicSafetySourceAllDisabledNoWork", + R.raw.config_dynamic_safety_source_all_disabled_no_work, + "Element dynamic-safety-source invalid", + "Required attribute titleForWork missing" + ), + Params( + "ConfigDynamicSafetySourceAllHiddenWithSearchNoWork", + R.raw.config_dynamic_safety_source_all_hidden_with_search_no_work, + "Element dynamic-safety-source invalid", + "Required attribute titleForWork missing" + ), + Params( + "ConfigDynamicSafetySourceAllNoWork", + R.raw.config_dynamic_safety_source_all_no_work, + "Element dynamic-safety-source invalid", + "Required attribute titleForWork missing" + ), + Params( + "ConfigDynamicSafetySourceDisabledNoSummary", + R.raw.config_dynamic_safety_source_disabled_no_summary, + "Element dynamic-safety-source invalid", + "Required attribute summary missing" + ), + Params( + "ConfigDynamicSafetySourceDisabledNoTitle", + R.raw.config_dynamic_safety_source_disabled_no_title, + "Element dynamic-safety-source invalid", + "Required attribute title missing" + ), + Params( + "ConfigDynamicSafetySourceDuplicateKey", + R.raw.config_dynamic_safety_source_duplicate_key, + "Element safety-sources-config invalid", + "Duplicate id id among safety sources" + ), + Params( + "ConfigDynamicSafetySourceHiddenWithSearchNoTitle", + R.raw.config_dynamic_safety_source_hidden_with_search_no_title, + "Element dynamic-safety-source invalid", + "Required attribute title missing" + ), + Params( + "ConfigDynamicSafetySourceInvalidDisplay", + R.raw.config_dynamic_safety_source_invalid_display, + "Attribute value \"invalid\" in " + + "dynamic-safety-source.initialDisplayState invalid", + null + ), + Params( + "ConfigDynamicSafetySourceInvalidId", + R.raw.config_dynamic_safety_source_invalid_id, + "Element dynamic-safety-source invalid", + "Attribute id invalid" + ), + Params( + "ConfigDynamicSafetySourceInvalidProfile", + R.raw.config_dynamic_safety_source_invalid_profile, + "Attribute value \"invalid\" in dynamic-safety-source.profile invalid", + null + ), + Params( + "ConfigDynamicSafetySourceNoId", + R.raw.config_dynamic_safety_source_no_id, + "Element dynamic-safety-source invalid", + "Required attribute id missing" + ), + Params( + "ConfigDynamicSafetySourceNoIntent", + R.raw.config_dynamic_safety_source_no_intent, + "Element dynamic-safety-source invalid", + "Required attribute intentAction missing" + ), + Params( + "ConfigDynamicSafetySourceNoPackage", + R.raw.config_dynamic_safety_source_no_package, + "Element dynamic-safety-source invalid", + "Required attribute packageName missing" + ), + Params( + "ConfigDynamicSafetySourceNoProfile", + R.raw.config_dynamic_safety_source_no_profile, + "Element dynamic-safety-source invalid", + "Required attribute profile missing" + ), + Params( + "ConfigDynamicSafetySourceNoSummary", + R.raw.config_dynamic_safety_source_no_summary, + "Element dynamic-safety-source invalid", + "Required attribute summary missing" + ), + Params( + "ConfigDynamicSafetySourceNoTitle", + R.raw.config_dynamic_safety_source_no_title, + "Element dynamic-safety-source invalid", + "Required attribute title missing" + ), + Params( + "ConfigDynamicSafetySourcePrimaryHiddenWithWork", + R.raw.config_dynamic_safety_source_primary_hidden_with_work, + "Element dynamic-safety-source invalid", + "Prohibited attribute titleForWork present" + ), + Params( + "ConfigDynamicSafetySourcePrimaryWithWork", + R.raw.config_dynamic_safety_source_primary_with_work, + "Element dynamic-safety-source invalid", + "Prohibited attribute titleForWork present" + ), + Params( + "ConfigFileCorrupted", + R.raw.config_file_corrupted, + "Exception while parsing the XML resource", + null + ), + Params( + "ConfigIssueOnlySafetySourceDuplicateKey", + R.raw.config_issue_only_safety_source_duplicate_key, + "Element safety-sources-config invalid", + "Duplicate id id among safety sources" + ), + Params( + "ConfigIssueOnlySafetySourceInvalidId", + R.raw.config_issue_only_safety_source_invalid_id, + "Element issue-only-safety-source invalid", + "Attribute id invalid" + ), + Params( + "ConfigIssueOnlySafetySourceInvalidProfile", + R.raw.config_issue_only_safety_source_invalid_profile, + "Attribute value \"invalid\" in issue-only-safety-source.profile invalid", + null + ), + Params( + "ConfigIssueOnlySafetySourceNoId", + R.raw.config_issue_only_safety_source_no_id, + "Element issue-only-safety-source invalid", + "Required attribute id missing" + ), + Params( + "ConfigIssueOnlySafetySourceNoPackage", + R.raw.config_issue_only_safety_source_no_package, + "Element issue-only-safety-source invalid", + "Required attribute packageName missing" + ), + Params( + "ConfigIssueOnlySafetySourceNoProfile", + R.raw.config_issue_only_safety_source_no_profile, + "Element issue-only-safety-source invalid", + "Required attribute profile missing" + ), + Params( + "ConfigIssueOnlySafetySourceWithDisplay", + R.raw.config_issue_only_safety_source_with_display, + "Element issue-only-safety-source invalid", + "Prohibited attribute initialDisplayState present" + ), + Params( + "ConfigIssueOnlySafetySourceWithIntent", + R.raw.config_issue_only_safety_source_with_intent, + "Element issue-only-safety-source invalid", + "Prohibited attribute intentAction present" + ), + Params( + "ConfigIssueOnlySafetySourceWithSearch", + R.raw.config_issue_only_safety_source_with_search, + "Element issue-only-safety-source invalid", + "Prohibited attribute searchTerms present" + ), + Params( + "ConfigIssueOnlySafetySourceWithSummary", + R.raw.config_issue_only_safety_source_with_summary, + "Element issue-only-safety-source invalid", + "Prohibited attribute summary present" + ), + Params( + "ConfigIssueOnlySafetySourceWithTitle", + R.raw.config_issue_only_safety_source_with_title, + "Element issue-only-safety-source invalid", + "Prohibited attribute title present" + ), + Params( + "ConfigIssueOnlySafetySourceWithWork", + R.raw.config_issue_only_safety_source_with_work, + "Element issue-only-safety-source invalid", + "Prohibited attribute titleForWork present" + ), + Params( + "ConfigMixedSafetySourceDuplicateKey", + R.raw.config_mixed_safety_source_duplicate_key, + "Element safety-sources-config invalid", + "Duplicate id id among safety sources" + ), + Params( + "ConfigSafetyCenterConfigMissing", + R.raw.config_safety_center_config_missing, + "Element safety-center-config missing", + null + ), + Params( + "ConfigSafetySourcesConfigEmpty", + R.raw.config_safety_sources_config_empty, + "Element safety-sources-config invalid", + "No safety sources groups present" + ), + Params( + "ConfigSafetySourcesConfigMissing", + R.raw.config_safety_sources_config_missing, + "Element safety-sources-config missing", + null + ), + Params( + "ConfigSafetySourcesGroupDuplicateId", + R.raw.config_safety_sources_group_duplicate_id, + "Element safety-sources-config invalid", + "Duplicate id id among safety sources groups" + ), + Params( + "ConfigSafetySourcesGroupEmpty", + R.raw.config_safety_sources_group_empty, + "Element safety-sources-group invalid", + "Safety sources group empty" + ), + Params( + "ConfigSafetySourcesGroupHiddenWithOnlyDynamic", + R.raw.config_safety_sources_group_hidden_with_only_dynamic, + "Element safety-sources-group invalid", + "Safety sources groups of type hidden can only contain sources of type " + + "issue-only", + SdkLevel.isAtLeastU() + ), + Params( + "ConfigSafetySourcesGroupHiddenWithOnlyStatic", + R.raw.config_safety_sources_group_hidden_with_only_static, + "Element safety-sources-group invalid", + "Safety sources groups of type hidden can only contain sources of type " + + "issue-only", + SdkLevel.isAtLeastU() + ), + Params( + "ConfigSafetySourcesGroupInvalidIcon", + R.raw.config_safety_sources_group_invalid_icon, + "Attribute value \"invalid\" in safety-sources-group.statelessIconType " + + "invalid", + null + ), + Params( + "ConfigSafetySourcesGroupInvalidId", + R.raw.config_safety_sources_group_invalid_id, + "Element safety-sources-group invalid", + "Attribute id invalid" + ), + Params( + "ConfigSafetySourcesGroupNoId", + R.raw.config_safety_sources_group_no_id, + "Element safety-sources-group invalid", + "Required attribute id missing" + ), + Params( + "ConfigSafetySourcesGroupNoTitle", + R.raw.config_safety_sources_group_no_title, + "Element safety-sources-group invalid", + "Required attribute title missing" + ), + Params( + "ConfigSafetySourcesGroupStatefulWithOnlyIssueOnly", + R.raw.config_safety_sources_group_stateful_with_only_issue_only, + "Element safety-sources-group invalid", + "Safety sources groups containing only sources of type issue-only must " + + "be of type hidden", + SdkLevel.isAtLeastU() + ), + Params( + "ConfigSafetySourcesGroupStatelessWithOnlyIssueOnly", + R.raw.config_safety_sources_group_stateless_with_only_issue_only, + "Element safety-sources-group invalid", + "Safety sources groups containing only sources of type issue-only must " + + "be of type hidden", + SdkLevel.isAtLeastU() + ), + Params( + "ConfigStaticSafetySourceDuplicateKey", + R.raw.config_static_safety_source_duplicate_key, + "Element safety-sources-config invalid", + "Duplicate id id among safety sources" + ), + Params( + "ConfigStaticSafetySourceInvalidId", + R.raw.config_static_safety_source_invalid_id, + "Element static-safety-source invalid", + "Attribute id invalid" + ), + Params( + "ConfigStaticSafetySourceInvalidProfile", + R.raw.config_static_safety_source_invalid_profile, + "Attribute value \"invalid\" in static-safety-source.profile invalid", + null + ), + Params( + "ConfigStaticSafetySourceNoId", + R.raw.config_static_safety_source_no_id, + "Element static-safety-source invalid", + "Required attribute id missing" + ), + Params( + "ConfigStaticSafetySourceNoIntent", + R.raw.config_static_safety_source_no_intent, + "Element static-safety-source invalid", + "Required attribute intentAction missing" + ), + Params( + "ConfigStaticSafetySourceNoProfile", + R.raw.config_static_safety_source_no_profile, + "Element static-safety-source invalid", + "Required attribute profile missing" + ), + Params( + "ConfigStaticSafetySourceNoTitle", + R.raw.config_static_safety_source_no_title, + "Element static-safety-source invalid", + "Required attribute title missing" + ), + Params( + "ConfigStaticSafetySourceWithDeduplicationGroups", + R.raw.config_static_safety_source_with_deduplication_groups, + "Element static-safety-source invalid", + "Prohibited attribute deduplicationGroup present", + SdkLevel.isAtLeastU() + ), + Params( + "ConfigStaticSafetySourceWithDisplay", + R.raw.config_static_safety_source_with_display, + "Element static-safety-source invalid", + "Prohibited attribute initialDisplayState present" + ), + Params( + "ConfigStaticSafetySourceWithLogging", + R.raw.config_static_safety_source_with_logging, + "Element static-safety-source invalid", + "Prohibited attribute loggingAllowed present" + ), + Params( + "ConfigStaticSafetySourceWithNotifications", + R.raw.config_static_safety_source_with_notifications, + "Element static-safety-source invalid", + "Prohibited attribute notificationsAllowed present", + SdkLevel.isAtLeastU() + ), + Params( + "ConfigStaticSafetySourceWithPackage", + R.raw.config_static_safety_source_with_package, + "Element static-safety-source invalid", + "Prohibited attribute packageName present", + !SdkLevel.isAtLeastU() + ), + Params( + "ConfigStaticSafetySourceWithPackageCertficates", + R.raw.config_static_safety_source_with_package_certs, + "Element static-safety-source invalid", + "Prohibited attribute packageCertificateHashes present", + SdkLevel.isAtLeastU() + ), + Params( + "ConfigStaticSafetySourceWithPrimaryAndWork", + R.raw.config_static_safety_source_with_primary_and_work, + "Element static-safety-source invalid", + "Prohibited attribute titleForWork present" + ), + Params( + "ConfigStaticSafetySourceWithRefresh", + R.raw.config_static_safety_source_with_refresh, + "Element static-safety-source invalid", + "Prohibited attribute refreshOnPageOpenAllowed present" + ), + Params( + "ConfigStaticSafetySourceWithSeverity", + R.raw.config_static_safety_source_with_severity, + "Element static-safety-source invalid", + "Prohibited attribute maxSeverityLevel present" + ), + Params( + "ConfigStringResourceNameInvalidEmpty", + R.raw.config_string_resource_name_empty, + "Resource name in safety-sources-group.title cannot be empty", + null + ), + Params( + "ConfigStringResourceNameInvalidNoAt", + R.raw.config_string_resource_name_invalid_no_at, + "Resource name " + + "\"com.android.safetycenter.config.tests:string/reference\" in " + + "safety-sources-group.title does not start with @", + null + ), + Params( + "ConfigStringResourceNameInvalidNoPackage", + R.raw.config_string_resource_name_invalid_no_package, + "Resource name \"@string/reference\" in safety-sources-group.title does " + + "not specify a package", + null + ), + Params( + "ConfigStringResourceNameInvalidNoType", + R.raw.config_string_resource_name_invalid_no_type, + "Resource name \"@com.android.safetycenter.config.tests:reference\" in " + + "safety-sources-group.title does not specify a type", + null + ), + Params( + "ConfigStringResourceNameInvalidWrongType", + R.raw.config_string_resource_name_invalid_wrong_type, + "Resource name \"@com.android.safetycenter.config.tests:raw/" + + "config_string_resource_name_invalid_wrong_type\" in " + + "safety-sources-group.title is not a string", + null + ), + Params( + "ConfigStringResourceNameMissing", + R.raw.config_string_resource_name_missing, + "Resource name \"@com.android.safetycenter.config.tests:string/missing\" " + + "in safety-sources-group.title missing or invalid", + null + ) + ) .filter { it.includeCondition } } } diff --git a/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigOverlayTest.kt b/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigOverlayTest.kt index cd0643371..00239ee5b 100644 --- a/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigOverlayTest.kt +++ b/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigOverlayTest.kt @@ -20,9 +20,9 @@ import android.content.Context import androidx.test.core.app.ApplicationProvider.getApplicationContext import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.compatibility.common.util.SystemUtil.runShellCommand -import com.android.safetycenter.config.Coroutines.waitForTestToPass -import com.android.safetycenter.config.Coroutines.waitForWithTimeout import com.android.safetycenter.config.tests.R +import com.android.safetycenter.testing.Coroutines.waitForSuccessWithTimeout +import com.android.safetycenter.testing.Coroutines.waitForWithTimeout import com.google.common.truth.Truth.assertThat import org.junit.AfterClass import org.junit.Assert.assertThrows @@ -35,7 +35,7 @@ class ParserConfigOverlayTest { private val context: Context = getApplicationContext() @Test - fun validNotOverlayableConfig_matchesExpected() = waitForTestToPass { + fun validNotOverlayableConfig_matchesExpected() = waitForSuccessWithTimeout { val inputStream = context.resources.openRawResource(R.raw.config_valid_not_overlayable) val safetyCenterConfig = @@ -69,7 +69,7 @@ class ParserConfigOverlayTest { } @Test - fun validOverlayableConfig_matchesExpected() = waitForTestToPass { + fun validOverlayableConfig_matchesExpected() = waitForSuccessWithTimeout { val inputStream = context.resources.openRawResource(R.raw.config_valid_overlayable) val safetyCenterConfig = @@ -100,7 +100,7 @@ class ParserConfigOverlayTest { } @Test - fun invalidOverlayableConfig_StringResourceNameInvalid_throws() = waitForTestToPass { + fun invalidOverlayableConfig_StringResourceNameInvalid_throws() = waitForSuccessWithTimeout { val inputStream = context.resources.openRawResource(R.raw.config_string_resource_name_invalid_overlayable) @@ -113,7 +113,8 @@ class ParserConfigOverlayTest { .hasMessageThat() .isEqualTo( "Resource name \"@com.android.safetycenter.config.tests:string/reference_overlay" + - "\" in static-safety-source.summary missing or invalid") + "\" in static-safety-source.summary missing or invalid" + ) } companion object { diff --git a/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigValidTest.kt b/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigValidTest.kt index 8bf445b38..b63ccead7 100644 --- a/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigValidTest.kt +++ b/SafetyCenter/Config/tests/java/com/android/safetycenter/config/ParserConfigValidTest.kt @@ -54,7 +54,8 @@ class ParserConfigValidTest { .setSummaryResId(R.string.reference) .setIntentAction("intent") .setProfile(SafetySource.PROFILE_PRIMARY) - .build()) + .build() + ) .addSafetySource( SafetySource.Builder(SafetySource.SAFETY_SOURCE_TYPE_DYNAMIC) .setId("dynamic_all_optional") @@ -77,7 +78,8 @@ class ParserConfigValidTest { addPackageCertificateHash("feed2") } } - .build()) + .build() + ) .addSafetySource( SafetySource.Builder(SafetySource.SAFETY_SOURCE_TYPE_DYNAMIC) .setId("dynamic_all_references") @@ -100,7 +102,8 @@ class ParserConfigValidTest { addPackageCertificateHash("feed2") } } - .build()) + .build() + ) .addSafetySource( SafetySource.Builder(SafetySource.SAFETY_SOURCE_TYPE_DYNAMIC) .setId("dynamic_disabled") @@ -109,14 +112,16 @@ class ParserConfigValidTest { .setSummaryResId(R.string.reference) .setProfile(SafetySource.PROFILE_PRIMARY) .setInitialDisplayState(SafetySource.INITIAL_DISPLAY_STATE_DISABLED) - .build()) + .build() + ) .addSafetySource( SafetySource.Builder(SafetySource.SAFETY_SOURCE_TYPE_DYNAMIC) .setId("dynamic_hidden") .setPackageName("package") .setProfile(SafetySource.PROFILE_ALL) .setInitialDisplayState(SafetySource.INITIAL_DISPLAY_STATE_HIDDEN) - .build()) + .build() + ) .addSafetySource( SafetySource.Builder(SafetySource.SAFETY_SOURCE_TYPE_DYNAMIC) .setId("dynamic_hidden_with_search") @@ -128,8 +133,10 @@ class ParserConfigValidTest { .setProfile(SafetySource.PROFILE_ALL) .setInitialDisplayState(SafetySource.INITIAL_DISPLAY_STATE_HIDDEN) .setSearchTermsResId(R.string.reference) - .build()) - .build()) + .build() + ) + .build() + ) .addSafetySourcesGroup( SafetySourcesGroup.Builder() .setId("static") @@ -140,7 +147,8 @@ class ParserConfigValidTest { .setTitleResId(R.string.reference) .setIntentAction("intent") .setProfile(SafetySource.PROFILE_PRIMARY) - .build()) + .build() + ) .addSafetySource( SafetySource.Builder(SafetySource.SAFETY_SOURCE_TYPE_STATIC) .setId("static_all_optional") @@ -151,8 +159,10 @@ class ParserConfigValidTest { .setIntentAction("intent") .setProfile(SafetySource.PROFILE_ALL) .setSearchTermsResId(R.string.reference) - .build()) - .build()) + .build() + ) + .build() + ) .addSafetySourcesGroup( SafetySourcesGroup.Builder() .setId("issue_only") @@ -161,7 +171,8 @@ class ParserConfigValidTest { .setId("issue_only_barebone") .setPackageName("package") .setProfile(SafetySource.PROFILE_PRIMARY) - .build()) + .build() + ) .addSafetySource( SafetySource.Builder(SafetySource.SAFETY_SOURCE_TYPE_ISSUE_ONLY) .setId("issue_only_all_optional") @@ -178,14 +189,17 @@ class ParserConfigValidTest { addPackageCertificateHash("feed2") } } - .build()) + .build() + ) .addSafetySource( SafetySource.Builder(SafetySource.SAFETY_SOURCE_TYPE_ISSUE_ONLY) .setId("id_test_abcxyz_ABCXYZ_012789") .setPackageName("package") .setProfile(SafetySource.PROFILE_PRIMARY) - .build()) - .build()) + .build() + ) + .build() + ) .addSafetySourcesGroup( SafetySourcesGroup.Builder() .setId("mixed") @@ -198,21 +212,25 @@ class ParserConfigValidTest { .setSummaryResId(R.string.reference) .setIntentAction("intent") .setProfile(SafetySource.PROFILE_PRIMARY) - .build()) + .build() + ) .addSafetySource( SafetySource.Builder(SafetySource.SAFETY_SOURCE_TYPE_ISSUE_ONLY) .setId("mixed_issue_only_barebone") .setPackageName("package") .setProfile(SafetySource.PROFILE_PRIMARY) - .build()) + .build() + ) .addSafetySource( SafetySource.Builder(SafetySource.SAFETY_SOURCE_TYPE_STATIC) .setId("mixed_static_barebone") .setTitleResId(R.string.reference) .setIntentAction("intent") .setProfile(SafetySource.PROFILE_PRIMARY) - .build()) - .build()) + .build() + ) + .build() + ) .apply { if (SdkLevel.isAtLeastU()) { addSafetySourcesGroup( @@ -226,8 +244,10 @@ class ParserConfigValidTest { .setTitleResId(R.string.reference) .setIntentAction("intent") .setProfile(SafetySource.PROFILE_PRIMARY) - .build()) - .build()) + .build() + ) + .build() + ) addSafetySourcesGroup( SafetySourcesGroup.Builder() .setType(SafetySourcesGroup.SAFETY_SOURCES_GROUP_TYPE_STATEFUL) @@ -235,15 +255,18 @@ class ParserConfigValidTest { .setTitleResId(R.string.reference) .setSummaryResId(R.string.reference) .setStatelessIconType( - SafetySourcesGroup.STATELESS_ICON_TYPE_PRIVACY) + SafetySourcesGroup.STATELESS_ICON_TYPE_PRIVACY + ) .addSafetySource( SafetySource.Builder(SafetySource.SAFETY_SOURCE_TYPE_STATIC) .setId("stateful_all_optional_source") .setTitleResId(R.string.reference) .setIntentAction("intent") .setProfile(SafetySource.PROFILE_PRIMARY) - .build()) - .build()) + .build() + ) + .build() + ) addSafetySourcesGroup( SafetySourcesGroup.Builder() .setType(SafetySourcesGroup.SAFETY_SOURCES_GROUP_TYPE_STATELESS) @@ -255,8 +278,10 @@ class ParserConfigValidTest { .setTitleResId(R.string.reference) .setIntentAction("intent") .setProfile(SafetySource.PROFILE_PRIMARY) - .build()) - .build()) + .build() + ) + .build() + ) addSafetySourcesGroup( SafetySourcesGroup.Builder() .setType(SafetySourcesGroup.SAFETY_SOURCES_GROUP_TYPE_STATELESS) @@ -264,15 +289,18 @@ class ParserConfigValidTest { .setTitleResId(R.string.reference) .setSummaryResId(R.string.reference) .setStatelessIconType( - SafetySourcesGroup.STATELESS_ICON_TYPE_PRIVACY) + SafetySourcesGroup.STATELESS_ICON_TYPE_PRIVACY + ) .addSafetySource( SafetySource.Builder(SafetySource.SAFETY_SOURCE_TYPE_STATIC) .setId("stateless_all_optional_source") .setTitleResId(R.string.reference) .setIntentAction("intent") .setProfile(SafetySource.PROFILE_PRIMARY) - .build()) - .build()) + .build() + ) + .build() + ) addSafetySourcesGroup( SafetySourcesGroup.Builder() .setType(SafetySourcesGroup.SAFETY_SOURCES_GROUP_TYPE_HIDDEN) @@ -282,8 +310,10 @@ class ParserConfigValidTest { .setId("hidden_barebone_source") .setPackageName("package") .setProfile(SafetySource.PROFILE_PRIMARY) - .build()) - .build()) + .build() + ) + .build() + ) addSafetySourcesGroup( SafetySourcesGroup.Builder() .setType(SafetySourcesGroup.SAFETY_SOURCES_GROUP_TYPE_HIDDEN) @@ -291,14 +321,17 @@ class ParserConfigValidTest { .setTitleResId(R.string.reference) .setSummaryResId(R.string.reference) .setStatelessIconType( - SafetySourcesGroup.STATELESS_ICON_TYPE_PRIVACY) + SafetySourcesGroup.STATELESS_ICON_TYPE_PRIVACY + ) .addSafetySource( SafetySource.Builder(SafetySource.SAFETY_SOURCE_TYPE_ISSUE_ONLY) .setId("hidden_all_optional_source") .setPackageName("package") .setProfile(SafetySource.PROFILE_PRIMARY) - .build()) - .build()) + .build() + ) + .build() + ) } } .build() diff --git a/SafetyCenter/Config/tests/overlay/Android.bp b/SafetyCenter/Config/tests/overlay/Android.bp index 72b31db1b..65eab02f1 100644 --- a/SafetyCenter/Config/tests/overlay/Android.bp +++ b/SafetyCenter/Config/tests/overlay/Android.bp @@ -20,6 +20,7 @@ package { android_test_helper_app { name: "SafetyCenterConfigTestsOverlay", + defaults: ["mts-target-sdk-version-current"], sdk_version: "current", min_sdk_version: "30", test_suites: [ diff --git a/SafetyCenter/ConfigLintChecker/java/android/safetycenter/lint/ConfigLintCheckerIssueRegistry.kt b/SafetyCenter/ConfigLintChecker/java/android/safetycenter/lint/ConfigLintCheckerIssueRegistry.kt index 8b9148dfb..205809957 100644 --- a/SafetyCenter/ConfigLintChecker/java/android/safetycenter/lint/ConfigLintCheckerIssueRegistry.kt +++ b/SafetyCenter/ConfigLintChecker/java/android/safetycenter/lint/ConfigLintCheckerIssueRegistry.kt @@ -24,10 +24,7 @@ import com.google.auto.service.AutoService @AutoService(IssueRegistry::class) @Suppress("UnstableApiUsage") class ConfigLintCheckerIssueRegistry : IssueRegistry() { - override val issues = listOf( - ConfigSchemaDetector.ISSUE, - ParserExceptionDetector.ISSUE - ) + override val issues = listOf(ConfigSchemaDetector.ISSUE, ParserExceptionDetector.ISSUE) override val api: Int get() = CURRENT_API @@ -35,9 +32,10 @@ class ConfigLintCheckerIssueRegistry : IssueRegistry() { override val minApi: Int get() = 11 - override val vendor = Vendor( - vendorName = "Android", - feedbackUrl = "http://b/issues/new?component=1026964", - contact = "fiscella@google.com" - ) + override val vendor = + Vendor( + vendorName = "Android", + feedbackUrl = "http://b/issues/new?component=1026964", + contact = "fiscella@google.com" + ) } diff --git a/SafetyCenter/ConfigLintChecker/java/android/safetycenter/lint/ConfigSchemaDetector.kt b/SafetyCenter/ConfigLintChecker/java/android/safetycenter/lint/ConfigSchemaDetector.kt index 0b00805c2..456ef1171 100644 --- a/SafetyCenter/ConfigLintChecker/java/android/safetycenter/lint/ConfigSchemaDetector.kt +++ b/SafetyCenter/ConfigLintChecker/java/android/safetycenter/lint/ConfigSchemaDetector.kt @@ -49,7 +49,8 @@ class ConfigSchemaDetector : Detector(), OtherFileScanner { severity = Severity.ERROR, implementation = Implementation(ConfigSchemaDetector::class.java, Scope.OTHER_SCOPE), - androidSpecific = true) + androidSpecific = true + ) } override fun appliesTo(folderType: ResourceFolderType): Boolean { @@ -74,7 +75,8 @@ class ConfigSchemaDetector : Detector(), OtherFileScanner { context.report( ISSUE, Location.create(context.file), - "No schema found for SDK level: $fileSdk, was it deleted?") + "No schema found for SDK level: $fileSdk, was it deleted?" + ) } // Test new schemas for backward compatibility. for (sdk in fileSdk + 1..FileSdk.getMaxSdkVersion()) { @@ -95,12 +97,14 @@ class ConfigSchemaDetector : Detector(), OtherFileScanner { context.report( ISSUE, Location.create(context.file), - "SAXException exception at sdk=$sdk: \"${e.message}\"") + "SAXException exception at sdk=$sdk: \"${e.message}\"" + ) } catch (e: IOException) { context.report( ISSUE, Location.create(context.file), - "IOException exception at sdk=$sdk: \"${e.message}\"") + "IOException exception at sdk=$sdk: \"${e.message}\"" + ) } return true } diff --git a/SafetyCenter/ConfigLintChecker/java/android/safetycenter/lint/ParserExceptionDetector.kt b/SafetyCenter/ConfigLintChecker/java/android/safetycenter/lint/ParserExceptionDetector.kt index 09f074818..d8656f889 100644 --- a/SafetyCenter/ConfigLintChecker/java/android/safetycenter/lint/ParserExceptionDetector.kt +++ b/SafetyCenter/ConfigLintChecker/java/android/safetycenter/lint/ParserExceptionDetector.kt @@ -55,8 +55,10 @@ class ParserExceptionDetector : Detector(), OtherFileScanner, XmlScanner { implementation = Implementation( ParserExceptionDetector::class.java, - EnumSet.of(Scope.RESOURCE_FILE, Scope.OTHER)), - androidSpecific = true) + EnumSet.of(Scope.RESOURCE_FILE, Scope.OTHER) + ), + androidSpecific = true + ) val STRING_MAP_BUILD_PHASE = 1 val CONFIG_PARSE_PHASE = 2 @@ -80,8 +82,10 @@ class ParserExceptionDetector : Detector(), OtherFileScanner, XmlScanner { } override fun visitElement(context: XmlContext, element: Element) { - if (context.driver.phase != STRING_MAP_BUILD_PHASE || - context.resourceFolderType != ResourceFolderType.VALUES) { + if ( + context.driver.phase != STRING_MAP_BUILD_PHASE || + context.resourceFolderType != ResourceFolderType.VALUES + ) { return } val name = element.getAttribute(ATTR_NAME) @@ -100,8 +104,10 @@ class ParserExceptionDetector : Detector(), OtherFileScanner, XmlScanner { /** Implements OtherFileScanner and parses the XML config in the second phase */ override fun run(context: Context) { - if (context.driver.phase != CONFIG_PARSE_PHASE || - context.file.name != "safety_center_config.xml") { + if ( + context.driver.phase != CONFIG_PARSE_PHASE || + context.file.name != "safety_center_config.xml" + ) { return } val minSdk = FileSdk.getSdkQualifier(context.file) @@ -123,13 +129,15 @@ class ParserExceptionDetector : Detector(), OtherFileScanner, XmlScanner { // the target package or on packages that refer to Android global resources. // However, we cannot use a custom linter with the default soong overlay // build rule regardless. - Resources(context.project.`package`, mNameToIndex, mIndexToValue)) + Resources(context.project.`package`, mNameToIndex, mIndexToValue) + ) } catch (e: ParseException) { context.report( ISSUE, Location.create(context.file), "Parser exception at sdk=$sdk: \"${e.message}\", cause: " + - "\"${e.cause?.message}\"") + "\"${e.cause?.message}\"" + ) } } } diff --git a/SafetyCenter/ConfigLintChecker/tests/java/android/safetycenter/lint/test/ConfigSchemaDetectorTest.kt b/SafetyCenter/ConfigLintChecker/tests/java/android/safetycenter/lint/test/ConfigSchemaDetectorTest.kt index 754d1a71f..0931c479b 100644 --- a/SafetyCenter/ConfigLintChecker/tests/java/android/safetycenter/lint/test/ConfigSchemaDetectorTest.kt +++ b/SafetyCenter/ConfigLintChecker/tests/java/android/safetycenter/lint/test/ConfigSchemaDetectorTest.kt @@ -64,7 +64,9 @@ class ConfigSchemaDetectorTest : LintDetectorTest() { </safety-sources-group> </safety-sources-config> </safety-center-config> - """))) + """ + )) + ) .run() .expectClean() } @@ -91,7 +93,9 @@ class ConfigSchemaDetectorTest : LintDetectorTest() { </safety-sources-group> </safety-sources-config> </safety-center-config> - """))) + """ + )) + ) .run() .expectClean() } @@ -105,7 +109,8 @@ class ConfigSchemaDetectorTest : LintDetectorTest() { .expect( "res/raw-v34/safety_center_config.xml: Error: SAXException exception at sdk=34: " + "\"cvc-elt.1.a: Cannot find the declaration of element 'invalid-root'.\" " + - "[InvalidSafetyCenterConfigSchema]\n1 errors, 0 warnings") + "[InvalidSafetyCenterConfigSchema]\n1 errors, 0 warnings" + ) } @Test @@ -120,7 +125,8 @@ class ConfigSchemaDetectorTest : LintDetectorTest() { "[InvalidSafetyCenterConfigSchema]\nres/raw/safety_center_config.xml: " + "Error: SAXException exception at sdk=34: \"cvc-elt.1.a: Cannot find the " + "declaration of element 'invalid-root'.\" " + - "[InvalidSafetyCenterConfigSchema]\n2 errors, 0 warnings") + "[InvalidSafetyCenterConfigSchema]\n2 errors, 0 warnings" + ) } @Test @@ -148,13 +154,16 @@ class ConfigSchemaDetectorTest : LintDetectorTest() { </safety-sources-group> </safety-sources-config> </safety-center-config> - """))) + """ + )) + ) .run() .expect( "res/raw/safety_center_config.xml: Error: SAXException exception at sdk=33: " + "\"cvc-complex-type.3.2.2: Attribute 'notificationsAllowed' is not allowed " + "to appear in element 'dynamic-safety-source'.\" " + - "[InvalidSafetyCenterConfigSchema]\n1 errors, 0 warnings") + "[InvalidSafetyCenterConfigSchema]\n1 errors, 0 warnings" + ) } @Test diff --git a/SafetyCenter/ConfigLintChecker/tests/java/android/safetycenter/lint/test/ParserExceptionDetectorTest.kt b/SafetyCenter/ConfigLintChecker/tests/java/android/safetycenter/lint/test/ParserExceptionDetectorTest.kt index a3030554e..869780eea 100644 --- a/SafetyCenter/ConfigLintChecker/tests/java/android/safetycenter/lint/test/ParserExceptionDetectorTest.kt +++ b/SafetyCenter/ConfigLintChecker/tests/java/android/safetycenter/lint/test/ParserExceptionDetectorTest.kt @@ -48,7 +48,8 @@ class ParserExceptionDetectorTest : LintDetectorTest() { lint() .files( xml("res/raw/safety_center_config.xml", VALID_TIRAMISU_CONFIG), - STRINGS_WITH_REFERENCE_XML) + STRINGS_WITH_REFERENCE_XML + ) .run() .expectClean() } @@ -58,7 +59,8 @@ class ParserExceptionDetectorTest : LintDetectorTest() { lint() .files( xml("res/raw-99/safety_center_config.xml", VALID_TIRAMISU_CONFIG), - STRINGS_WITH_REFERENCE_XML) + STRINGS_WITH_REFERENCE_XML + ) .run() .expectClean() } @@ -72,7 +74,8 @@ class ParserExceptionDetectorTest : LintDetectorTest() { .expect( "res/raw-v34/safety_center_config.xml: Error: Parser exception at sdk=34: " + "\"Element safety-center-config missing\", cause: \"null\" " + - "[InvalidSafetyCenterConfig]\n1 errors, 0 warnings") + "[InvalidSafetyCenterConfig]\n1 errors, 0 warnings" + ) } @Test @@ -87,7 +90,8 @@ class ParserExceptionDetectorTest : LintDetectorTest() { "[InvalidSafetyCenterConfig]\nres/raw/safety_center_config.xml: " + "Error: Parser exception at sdk=34: " + "\"Element safety-center-config missing\", cause: \"null\" " + - "[InvalidSafetyCenterConfig]\n2 errors, 0 warnings") + "[InvalidSafetyCenterConfig]\n2 errors, 0 warnings" + ) } @Test @@ -96,12 +100,14 @@ class ParserExceptionDetectorTest : LintDetectorTest() { lint() .files( xml("res/raw/safety_center_config.xml", VALID_UDC_CONFIG), - STRINGS_WITH_REFERENCE_XML) + STRINGS_WITH_REFERENCE_XML + ) .run() .expect( "res/raw/safety_center_config.xml: Error: Parser exception at sdk=33: " + "\"Unexpected attribute dynamic-safety-source.notificationsAllowed\", cause: " + - "\"null\" [InvalidSafetyCenterConfig]\n1 errors, 0 warnings") + "\"null\" [InvalidSafetyCenterConfig]\n1 errors, 0 warnings" + ) } @Test @@ -122,7 +128,8 @@ class ParserExceptionDetectorTest : LintDetectorTest() { <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="reference" translatable="false">Reference</string> </resources> - """) + """ + ) const val VALID_TIRAMISU_CONFIG = """ diff --git a/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/PersistedSafetyCenterIssueTest.kt b/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/PersistedSafetyCenterIssueTest.kt index 541d26c74..d88100382 100644 --- a/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/PersistedSafetyCenterIssueTest.kt +++ b/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/PersistedSafetyCenterIssueTest.kt @@ -65,7 +65,8 @@ class PersistedSafetyCenterIssueTest { PersistedSafetyCenterIssue.Builder() .setKey(ACTIVE_ISSUE_KEY) .setFirstSeenAt(INSTANT) - .build()) + .build() + ) .addEqualityGroup(DISMISSED_ISSUE) .addEqualityGroup( PersistedSafetyCenterIssue.Builder() @@ -73,28 +74,32 @@ class PersistedSafetyCenterIssueTest { .setFirstSeenAt(INSTANT) .setDismissedAt(INSTANT) .setDismissCount(1) - .build()) + .build() + ) .addEqualityGroup( PersistedSafetyCenterIssue.Builder() .setKey(DISMISSED_ISSUE_KEY) .setFirstSeenAt(Instant.ofEpochMilli(0)) .setDismissedAt(INSTANT) .setDismissCount(1) - .build()) + .build() + ) .addEqualityGroup( PersistedSafetyCenterIssue.Builder() .setKey(DISMISSED_ISSUE_KEY) .setFirstSeenAt(INSTANT) .setDismissedAt(Instant.ofEpochMilli(0)) .setDismissCount(1) - .build()) + .build() + ) .addEqualityGroup( PersistedSafetyCenterIssue.Builder() .setKey(DISMISSED_ISSUE_KEY) .setFirstSeenAt(INSTANT) .setDismissedAt(INSTANT) .setDismissCount(99) - .build()) + .build() + ) .test() } diff --git a/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistenceInvalidTest.kt b/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistenceInvalidTest.kt index 48af9c0ba..766f38fac 100644 --- a/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistenceInvalidTest.kt +++ b/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistenceInvalidTest.kt @@ -62,79 +62,99 @@ class SafetyCenterIssuesPersistenceInvalidTest { "Corrupted", "invalid_file_corrupted.txt", "Failed to read file: ${PATH}invalid_file_corrupted.txt", - null), + null + ), Params( "ExtraAttribute", "invalid_file_extra_attribute.xml", "Unexpected attribute extra", - null), + null + ), Params( "ExtraElement", "invalid_file_extra_element.xml", "Element issue not closed", - null), + null + ), Params( "ExtraRoot", "invalid_file_extra_root.txt", "Unexpected extra root element", - null), + null + ), Params( "InconsistentDismissCount", "invalid_file_inconsistent_dismiss_count.xml", "Element issue invalid", - "dismissCount cannot be 0 if dismissedAt is present"), + "dismissCount cannot be 0 if dismissedAt is present" + ), Params( "InconsistentDismissedAt", "invalid_file_inconsistent_dismissed_at.xml", "Element issue invalid", - "dismissedAt must be present if dismissCount is greater than 0"), + "dismissedAt must be present if dismissCount is greater than 0" + ), Params( "InvalidDismissCount", "invalid_file_invalid_dismiss_count.xml", "Attribute value \"NaN\" for dismiss_count invalid", - null), + null + ), Params( "InvalidDismissedAt", "invalid_file_invalid_dismissed_at.xml", "Attribute value \"NaN\" for dismissed_at_epoch_millis invalid", - null), + null + ), Params( "InvalidFirstSeenAt", "invalid_file_invalid_first_seen_at.xml", "Attribute value \"NaN\" for first_seen_at_epoch_millis invalid", - null), + null + ), Params( "InvalidNotificationDismissedAt", "invalid_file_invalid_notification_dismissed_at.xml", "Attribute value \"NaN\" for notification_dismissed_at_epoch_millis invalid", - null), + null + ), Params( "InvalidVersion", "invalid_file_invalid_version.xml", "Attribute value \"NaN\" for version invalid", - null), + null + ), Params( "MissingFirstSeenAt", "invalid_file_missing_first_seen_at.xml", "Element issue invalid", - "Required attribute firstSeenAt missing"), + "Required attribute firstSeenAt missing" + ), Params( "MissingKey", "invalid_file_missing_key.xml", "Element issue invalid", - "Required attribute key missing"), + "Required attribute key missing" + ), Params( - "MissingVersion", "invalid_file_missing_version.xml", "Missing version", null), + "MissingVersion", + "invalid_file_missing_version.xml", + "Missing version", + null + ), Params( "NegativeDismissCount", "invalid_file_negative_dismiss_count.xml", "Attribute value \"-1\" for dismiss_count invalid", - null), + null + ), Params("WrongRoot", "invalid_file_wrong_root.xml", "Element issues missing", null), Params( "WrongVersion", "invalid_file_wrong_version.xml", "Unsupported version: 99", - null)) + null + ) + ) } } diff --git a/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistenceValidTest.kt b/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistenceValidTest.kt index dd37a6837..7a3d7e102 100644 --- a/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistenceValidTest.kt +++ b/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistenceValidTest.kt @@ -56,7 +56,9 @@ class SafetyCenterIssuesPersistenceValidTest { Params( "ValidV2", "valid_file_v2.xml", - listOf(ISSUE_0, ISSUE_1, ISSUE_2, ISSUE_3, ISSUE_4, ISSUE_5))) + listOf(ISSUE_0, ISSUE_1, ISSUE_2, ISSUE_3, ISSUE_4, ISSUE_5) + ) + ) private val ISSUE_0 = PersistedSafetyCenterIssue.Builder() diff --git a/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistenceWriteTest.kt b/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistenceWriteTest.kt index c5db135f0..b5c6d238a 100644 --- a/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistenceWriteTest.kt +++ b/SafetyCenter/Persistence/tests/java/com/android/safetycenter/persistence/SafetyCenterIssuesPersistenceWriteTest.kt @@ -83,6 +83,9 @@ class SafetyCenterIssuesPersistenceWriteTest { .setKey("key5") .setFirstSeenAt(Instant.ofEpochMilli(1654128000000)) .setNotificationDismissedAt(Instant.ofEpochMilli(1654214400000)) - .build()))) + .build() + ) + ) + ) } } diff --git a/SafetyCenter/Resources/res/raw-v34/safety_center_config.xml b/SafetyCenter/Resources/res/raw-v34/safety_center_config.xml index f4208eedf..94123b2de 100644 --- a/SafetyCenter/Resources/res/raw-v34/safety_center_config.xml +++ b/SafetyCenter/Resources/res/raw-v34/safety_center_config.xml @@ -123,17 +123,10 @@ <static-safety-source id="AndroidAdvancedSecurity" profile="primary_profile_only" - intentAction="com.android.settings.security.SECURITY_ADVANCED_SETTINGS" - title="@com.android.safetycenter.resources:string/advanced_security_title" - summary="@com.android.safetycenter.resources:string/advanced_security_summary" - searchTerms="@com.android.safetycenter.resources:string/advanced_security_search_terms"/> - <static-safety-source - id="AndroidAdvancedPrivacy" - profile="primary_profile_only" - intentAction="android.settings.PRIVACY_ADVANCED_SETTINGS" - title="@com.android.safetycenter.resources:string/advanced_privacy_title" - summary="@com.android.safetycenter.resources:string/advanced_privacy_summary" - searchTerms="@com.android.safetycenter.resources:string/advanced_privacy_search_terms"/> + intentAction="com.android.settings.MORE_SECURITY_PRIVACY_SETTINGS" + title="@com.android.safetycenter.resources:string/more_settings_title" + summary="@com.android.safetycenter.resources:string/more_settings_summary" + searchTerms="@com.android.safetycenter.resources:string/more_settings_search_terms"/> </safety-sources-group> </safety-sources-config> </safety-center-config> diff --git a/SafetyCenter/Resources/res/values-da/strings.xml b/SafetyCenter/Resources/res/values-da/strings.xml index 3f6bf685f..16df659b8 100644 --- a/SafetyCenter/Resources/res/values-da/strings.xml +++ b/SafetyCenter/Resources/res/values-da/strings.xml @@ -20,7 +20,7 @@ <string name="safetyCenterResourcesAppLabel" msgid="4043334186295695930">"Ressourcer i Sikkerhedscenter"</string> <string name="lock_screen_sources_title" msgid="3317906280484627707">"Enhedslås"</string> <string name="lock_screen_sources_summary" msgid="7220439741282516496"></string> - <string name="lock_screen_title" msgid="4069104894527169877">"Skærmlås"</string> + <string name="lock_screen_title" msgid="4069104894527169877">"Skærmlås"</string> <string name="lock_screen_summary_disabled" msgid="354071230916616692">"Der er ingen oplysninger endnu"</string> <string name="lock_screen_search_terms" msgid="2678486357779794826">"Enhedslås, skærmlås, låseskærm, adgangskode, pinkode, mønster"</string> <string name="biometrics_title" msgid="5859504610285212938">"Biometri"</string> @@ -30,7 +30,7 @@ <string name="permission_usage_title" msgid="3633779688945350407">"Privatlivspanel"</string> <string name="permission_usage_summary" msgid="5323079206029964468">"Vis, hvilke apps der har brugt tilladelser for nylig"</string> <string name="permission_usage_search_terms" msgid="3852343592870257104">"Privatliv, privatlivspanel"</string> - <string name="permission_manager_title" msgid="5277347862821255015">"Tilladelsesadministrator"</string> + <string name="permission_manager_title" msgid="5277347862821255015">"Tilladelsesadministrator"</string> <string name="permission_manager_summary" msgid="8099852107340970790">"Administrer appadgang til dine data"</string> <string name="permission_manager_search_terms" msgid="2895147613099694722">"Tilladelser, administration af tilladelser"</string> <string name="privacy_controls_title" msgid="5322875777945432395">"Privatlivsindstillinger"</string> diff --git a/SafetyCenter/Resources/res/values-de/strings.xml b/SafetyCenter/Resources/res/values-de/strings.xml index 2e336574f..8491f5adc 100644 --- a/SafetyCenter/Resources/res/values-de/strings.xml +++ b/SafetyCenter/Resources/res/values-de/strings.xml @@ -20,7 +20,7 @@ <string name="safetyCenterResourcesAppLabel" msgid="4043334186295695930">"Ressourcen für Sicherheitscenter"</string> <string name="lock_screen_sources_title" msgid="3317906280484627707">"Gerätesperre"</string> <string name="lock_screen_sources_summary" msgid="7220439741282516496"></string> - <string name="lock_screen_title" msgid="4069104894527169877">"Displaysperre"</string> + <string name="lock_screen_title" msgid="4069104894527169877">"Displaysperre"</string> <string name="lock_screen_summary_disabled" msgid="354071230916616692">"Noch keine Daten erhalten"</string> <string name="lock_screen_search_terms" msgid="2678486357779794826">"Gerätesperre, Displaysperre, Sperrbildschirm, Lockscreen, Passwort, PIN, Muster"</string> <string name="biometrics_title" msgid="5859504610285212938">"Biometrisches Verfahren"</string> diff --git a/SafetyCenter/Resources/res/values-v34/strings.xml b/SafetyCenter/Resources/res/values-v34/strings.xml index 6db360af5..f3db7632a 100644 --- a/SafetyCenter/Resources/res/values-v34/strings.xml +++ b/SafetyCenter/Resources/res/values-v34/strings.xml @@ -26,5 +26,7 @@ <string name="ads_privacy_summary" description="Ads privacy setting summary">Customize info apps use to show you ads</string> <string name="ads_privacy_search_terms" description="Search keywords of the Ads privacy setting">ads, ad privacy, privacy sandbox, ad topics, app-suggested ads, ad measurement</string> <string name="biometrics_title_for_work" description="The default title of the setting for managing biometric options on the device for work apps">Biometrics for work</string> - + <string name="more_settings_title" description="The title of the entry for More Settings">More settings</string> + <string name="more_settings_summary" description="The summary of the entry for More Settings, which describes the page contents">Encryption, credentials, and more</string> + <string name="more_settings_search_terms" description="Search keywords of the entry for More Settings"><!-- Empty placeholder--></string> </resources>
\ No newline at end of file diff --git a/SafetyCenter/Resources/shared_res/values-af/strings.xml b/SafetyCenter/Resources/shared_res/values-af/strings.xml index 0b191ebf6..74ecafb6c 100644 --- a/SafetyCenter/Resources/shared_res/values-af/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-af/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Gaan tans toestelinstellings na …"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Lyk goed"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Geen probleme gevind nie"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Wenk beskikbaar}other{Wenke beskikbaar}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Handeling uitgevoer}other{Handelinge uitgevoer}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Gaan instellings na"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Gaan instellingslys na"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Toestel is dalk in gevaar"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risiko’s gevind"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Rekening is dalk in gevaar"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Rekening is in gevaar"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# opletberig}other{# opletberigte}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Sien waarskuwing hieronder}other{Sien waarskuwings hieronder}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Kon nie bladsy oopmaak nie"</string> <string name="resolving_action_error" msgid="371968886143262375">"Kon nie opletberig afhandel nie"</string> <string name="refresh_timeout" msgid="251734999692581852">"Kon nie instellings herlaai nie"</string> diff --git a/SafetyCenter/Resources/shared_res/values-am/strings.xml b/SafetyCenter/Resources/shared_res/values-am/strings.xml index 2254f2348..0e123315a 100644 --- a/SafetyCenter/Resources/shared_res/values-am/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-am/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"የመሣሪያ ቅንብሮችን በመፈተሽ ላይ…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"ጥሩ ይመስላል"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"ምንም ችግሮች አልተገኙም"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{ጠቃሚ ምክር ይገኛል}one{ጠቃሚ ምክር ይገኛል}other{ጠቃሚ ምክሮች ይገኛሉ}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{የተወሰደ እርምጃ}one{የተወሰደ እርምጃ}other{የተወሰዱ እርምጃዎች}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"ቅንብሮችን ይከልሱ"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"የቅንብሮች ዝርዝርን ይፈትሹ"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"መሣሪያ አደጋ ላይ ሊሆን ይችላል"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"አደጋዎች ተገኝተዋል"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"መለያ አደጋ ላይ ሊሆን ይችላል"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"መለያ አደጋ ላይ ነው"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# ማንቂያ}one{# ማንቂያ}other{# ማንቂያዎች}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{ማንቂያን ከታች ይመልከቱ}one{ማንቂያን ከታች ይመልከቱ}other{ማንቂያዎችን ከታች ይመልከቱ}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"ገጹን መከፈት አልተቻለም"</string> <string name="resolving_action_error" msgid="371968886143262375">"ማንቂያን መፍታት አልተቻለም"</string> <string name="refresh_timeout" msgid="251734999692581852">"ቅንብሮችን ማደስ አልተቻለም"</string> diff --git a/SafetyCenter/Resources/shared_res/values-ar/strings.xml b/SafetyCenter/Resources/shared_res/values-ar/strings.xml index ee765d979..c83c5d713 100644 --- a/SafetyCenter/Resources/shared_res/values-ar/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ar/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"جارٍ التحقّق من إعدادات الجهاز…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"كل شيء على ما يرام"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"لم يتم العثور على أي مشاكل"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{تتوفّر نصيحة.}zero{تتوفّر نصائح.}two{تتوفّر نصيحتان.}few{تتوفّر نصائح.}many{تتوفّر نصائح.}other{تتوفّر نصائح.}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{الإجراء الذي تم اتخاذه}zero{الإجراءات التي تم اتخاذها}two{الإجراءان اللذان تم اتخاذهما}few{الإجراءات التي تم اتخاذها}many{الإجراءات التي تم اتخاذها}other{الإجراءات التي تم اتخاذها}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"مراجعة الإعدادات"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"الاطّلاع على قائمة الإعدادات"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"الجهاز قد يكون معرّضًا للخطر"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"هناك مخاطر"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"قد يكون الحساب معرّضًا للخطر"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"الحساب معرّض للخطر"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{تنبيه واحد (#)}zero{# تنبيه}two{تنبيهان}few{# تنبيهات}many{# تنبيهًا}other{# تنبيه}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{راجِع التنبيه أدناه.}zero{راجِع التنبيهات أدناه.}two{راجِع التنبيهَين أدناه.}few{راجِع التنبيهات أدناه.}many{راجِع التنبيهات أدناه.}other{راجِع التنبيهات أدناه.}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"تعذَّر فتح الصفحة"</string> <string name="resolving_action_error" msgid="371968886143262375">"تعذَّر التعامل بشكل نهائي مع التنبيه"</string> <string name="refresh_timeout" msgid="251734999692581852">"تعذّر تحديث الإعدادات"</string> diff --git a/SafetyCenter/Resources/shared_res/values-as/strings.xml b/SafetyCenter/Resources/shared_res/values-as/strings.xml index 380e7c3e7..90ae9c5c2 100644 --- a/SafetyCenter/Resources/shared_res/values-as/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-as/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"ডিভাইচৰ ছেটিং পৰীক্ষা কৰি থকা হৈছে…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"ভাল যেন লাগিছে"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"কোনো সমস্যা পোৱা নগ’ল"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{পৰামৰ্শ উপলব্ধ}one{পৰামৰ্শ উপলব্ধ}other{পৰামৰ্শ উপলব্ধ}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{কাৰ্যব্যৱস্থা লোৱা হৈছে}one{কাৰ্যব্যৱস্থা লোৱা হৈছে}other{কাৰ্যব্যৱস্থা লোৱা হৈছে}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"ছেটিং পৰ্যালোচনা কৰক"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"ছেটিঙৰ সূচী পৰীক্ষা কৰক"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"ডিভাইচটোৰ বিপদাশংকা থাকিব পাৰে"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"বিপদাশংকা পোৱা গৈছে"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"একাউণ্টটোত বিপদাশংকা থাকিব পাৰে"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"একাউণ্টৰ বিপদাশংকা আছে"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# টা সতৰ্কবাৰ্তা}one{# সতৰ্কবাৰ্তা}other{# সতৰ্কবাৰ্তা}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{তলত সতৰ্কবাৰ্তা চাওক}one{তলত সতৰ্কবাৰ্তা চাওক}other{তলত সতৰ্কবাৰ্তা চাওক}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"পৃষ্ঠাখন খুলিব পৰা নগ’ল"</string> <string name="resolving_action_error" msgid="371968886143262375">"সতৰ্কবাৰ্তা সমাধান কৰিব পৰা নগ’ল"</string> <string name="refresh_timeout" msgid="251734999692581852">"ছেটিং ৰিফ্ৰেশ্ব কৰিব পৰা নগ’ল"</string> diff --git a/SafetyCenter/Resources/shared_res/values-az/strings.xml b/SafetyCenter/Resources/shared_res/values-az/strings.xml index b62749825..12f0e1a32 100644 --- a/SafetyCenter/Resources/shared_res/values-az/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-az/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Cihaz ayarları yoxlanılır…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Yaxşı görünür"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Heç bir problem tapılmadı"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{İpucu əlçatandır}other{İpucları əlçatandır}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Görülən tədbir}other{Görülən tədbirlər}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Ayarları nəzərdən keçirin"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Ayarlar siyahısını yoxlayın"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Cihaz risk altında ola bilər"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risklər tapıldı"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Hesab risk altında ola bilər"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Hesab risk altındadır"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# siqnal}other{# siqnal}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Aşağıdakı siqnala baxın}other{Aşağıdakı siqnallara baxın}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Səhifəni açmaq mümkün olmadı"</string> <string name="resolving_action_error" msgid="371968886143262375">"Siqnalı həll etmək mümkün olmadı"</string> <string name="refresh_timeout" msgid="251734999692581852">"Ayarları yeniləmək mümkün olmadı"</string> diff --git a/SafetyCenter/Resources/shared_res/values-b+sr+Latn/strings.xml b/SafetyCenter/Resources/shared_res/values-b+sr+Latn/strings.xml index c688a560e..2ce59e648 100644 --- a/SafetyCenter/Resources/shared_res/values-b+sr+Latn/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-b+sr+Latn/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Proveravamo podešavanja uređaja…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Sve je u redu"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Nije pronađen nijedan problem"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Dostupan je savet}one{Dostupni su saveti}few{Dostupni su saveti}other{Dostupni su saveti}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Preduzeta radnja}one{Preduzete radnje}few{Preduzete radnje}other{Preduzete radnje}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Pregledajte podešavanja"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Proverite listu podešavanja"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Uređaj je možda ugrožen"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Pronađeni su rizici"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Nalog je možda ugrožen"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Nalog je ugrožen"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# obaveštenje}one{# obaveštenje}few{# obaveštenja}other{# obaveštenja}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Pogledajte upozorenje ispod}one{Pogledajte upozorenja ispod}few{Pogledajte upozorenja ispod}other{Pogledajte upozorenja ispod}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Otvaranje stranice nije uspelo"</string> <string name="resolving_action_error" msgid="371968886143262375">"Rešavanje obaveštenja nije uspelo"</string> <string name="refresh_timeout" msgid="251734999692581852">"Osvežavanje podešavanja nije uspelo"</string> diff --git a/SafetyCenter/Resources/shared_res/values-be/strings.xml b/SafetyCenter/Resources/shared_res/values-be/strings.xml index ebcc01503..5dfc83cc5 100644 --- a/SafetyCenter/Resources/shared_res/values-be/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-be/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Праверка налад прылады…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Усё ў парадку"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Праблемы не знойдзены"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Скарыстайце параду}one{Скарыстайце парады}few{Скарыстайце парады}many{Скарыстайце парады}other{Скарыстайце парады}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Мера прынята}one{Меры прыняты}few{Меры прыняты}many{Меры прыняты}other{Меры прыняты}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Праглядзець налады"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Праверыць спіс налад"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Прылада можа быць у небяспецы"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Выяўлена небяспека"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Уліковы запіс можа быць у небяспецы"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Уліковы запіс у небяспецы"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# абвестка}one{# абвестка}few{# абвесткі}many{# абвестак}other{# абвесткі}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Глядзіце апавяшчэнне ніжэй}one{Глядзіце апавяшчэнні ніжэй}few{Глядзіце апавяшчэнні ніжэй}many{Глядзіце апавяшчэнні ніжэй}other{Глядзіце апавяшчэнні ніжэй}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Не ўдалося адкрыць старонку"</string> <string name="resolving_action_error" msgid="371968886143262375">"Не ўдалося вырашыць праблему"</string> <string name="refresh_timeout" msgid="251734999692581852">"Не ўдалося абнавіць налады"</string> diff --git a/SafetyCenter/Resources/shared_res/values-bg/strings.xml b/SafetyCenter/Resources/shared_res/values-bg/strings.xml index 7693caae0..74c581599 100644 --- a/SafetyCenter/Resources/shared_res/values-bg/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-bg/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Настройките на устройството се проверяват…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Изглежда добре"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Няма открити проблеми"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Налице е съвет}other{Налице са съвети}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Предприето е действие}other{Предприети са действия}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Преглед на настройките"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Проверка на списъка с настройки"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"У-вото може да е изложено на риск"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Открити са рискове"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Профилът може да е изложен на риск"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Профилът е изложен на риск"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# сигнал}other{# сигнала}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Вижте сигнала по-долу}other{Вижте сигналите по-долу}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Страницата не се отвори"</string> <string name="resolving_action_error" msgid="371968886143262375">"Сигналът не се отстрани"</string> <string name="refresh_timeout" msgid="251734999692581852">"Настройките не бяха опреснени"</string> diff --git a/SafetyCenter/Resources/shared_res/values-bn/strings.xml b/SafetyCenter/Resources/shared_res/values-bn/strings.xml index 4d0a48d77..99a2205b9 100644 --- a/SafetyCenter/Resources/shared_res/values-bn/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-bn/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"ডিভাইস সেটিংস চেক করা হচ্ছে…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"সব ঠিক আছে"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"কোনও সমস্যা পাওয়া যায়নি"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{পরামর্শ উপলভ্য আছে}one{পরামর্শ উপলভ্য আছে}other{পরামর্শ উপলভ্য আছে}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{অ্যাকশন নেওয়া হয়েছে}one{অ্যাকশন নেওয়া হয়েছে}other{অ্যাকশন নেওয়া হয়েছে}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"সেটিংস পর্যালোচনা করুন"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"সেটিংস তালিকা চেক করুন"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"ডিভাইসের নিরাপত্তা বিপন্ন হতে পারে"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"ঝুঁকির বিষয়টি খুঁজে পাওয়া গেছে"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"অ্যাকাউন্টের হয়ত ক্ষতি হতে পারে"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"অ্যাকাউন্টের ক্ষতি হতে পারে"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{#টি সতর্কতা}one{#টি সতর্কতা}other{#টি সতর্কতা}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{নিচে সতর্কতা দেখুন}one{নিচে সতর্কতা দেখুন}other{নিচে সতর্কতা দেখুন}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"পৃষ্ঠা খোলা যায়নি"</string> <string name="resolving_action_error" msgid="371968886143262375">"সতর্কতার সমাধান করা যায়নি"</string> <string name="refresh_timeout" msgid="251734999692581852">"সেটিংস রিফ্রেশ করা যায়নি"</string> diff --git a/SafetyCenter/Resources/shared_res/values-bs/strings.xml b/SafetyCenter/Resources/shared_res/values-bs/strings.xml index b782c2447..3b53a5b00 100644 --- a/SafetyCenter/Resources/shared_res/values-bs/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-bs/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Provjera postavki uređaja…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Izgleda dobro"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Nije pronađen nijedan problem"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Savjet je dostupan}one{Savjeti su dostupni}few{Savjeti su dostupni}other{Savjeti su dostupni}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Poduzeta ja radnja}one{Poduzete su radnje}few{Poduzete su radnje}other{Poduzete su radnje}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Pregledajte postavke"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Provjerite listu postavki"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Uređaj bi mogao biti izložen riziku"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Pronađeni su rizici"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Račun bi mogao biti izložen riziku"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Račun je izložen riziku"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# upozorenje}one{# upozorenje}few{# upozorenja}other{# upozorenja}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Pogledajte upozorenje u nastavku}one{Pogledajte upozorenja u nastavku}few{Pogledajte upozorenja u nastavku}other{Pogledajte upozorenja u nastavku}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Otvaranje stranice nije uspjelo"</string> <string name="resolving_action_error" msgid="371968886143262375">"Rješavanje upozorenja nije uspjelo"</string> <string name="refresh_timeout" msgid="251734999692581852">"Osvježavanje postavki nije uspjelo"</string> diff --git a/SafetyCenter/Resources/shared_res/values-ca/strings.xml b/SafetyCenter/Resources/shared_res/values-ca/strings.xml index efbfe907b..4d93abc51 100644 --- a/SafetyCenter/Resources/shared_res/values-ca/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ca/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"S\'està comprovant la configuració del dispositiu…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Tot correcte"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"No s\'ha trobat cap problema"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Hi ha un consell disponible}many{Hi ha consells disponibles}other{Hi ha consells disponibles}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{S\'ha dut a terme una acció}many{S\'han dut a terme accions}other{S\'han dut a terme accions}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Revisa la configuració"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Comprova la llista de configuració"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"El dispositiu pot estar en perill"</string> @@ -35,11 +37,11 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"S\'han trobat riscos"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"El compte pot estar en perill"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Aquest compte està en perill"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alerta}many{# alerts}other{# alertes}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Consulta l\'alerta següent}many{Consulta les alertes següents}other{Consulta les alertes següents}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"No s\'ha pogut obrir la pàgina"</string> <string name="resolving_action_error" msgid="371968886143262375">"No s\'ha pogut resoldre l\'alerta"</string> <string name="refresh_timeout" msgid="251734999692581852">"No s\'ha pogut actualitzar la configuració"</string> - <string name="refresh_error" msgid="656062128422446177">"{count,plural, =1{No s\'ha pogut comprovar la configuració}many{Couldnt check settings}other{No s\'ha pogut comprovar la configuració}}"</string> + <string name="refresh_error" msgid="656062128422446177">"{count,plural, =1{No s\'ha pogut comprovar la configuració}many{No s\'ha pogut comprovar la configuració}other{No s\'ha pogut comprovar la configuració}}"</string> <string name="work_profile_paused" msgid="7037400224040869079">"El perfil de treball s\'ha posat en pausa"</string> <string name="group_unknown_summary" msgid="6951386960814105641">"Encara no hi ha informació"</string> <string name="notification_channel_group_name" msgid="7155072032524876859">"Seguretat i privadesa"</string> diff --git a/SafetyCenter/Resources/shared_res/values-cs/strings.xml b/SafetyCenter/Resources/shared_res/values-cs/strings.xml index 6da80636e..ef97185fb 100644 --- a/SafetyCenter/Resources/shared_res/values-cs/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-cs/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Kontrola nastavení zařízení…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Všechno v pořádku"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Nebyly nalezeny žádné problémy"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Je k dispozici tip}few{Jsou k dispozici tipy}many{Jsou k dispozici tipy}other{Jsou k dispozici tipy}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Bylo přijato opatření}few{Byla přijata opatření}many{Byla přijata opatření}other{Byla přijata opatření}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Zkontrolujte nastavení"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Zkontrolujte seznam nastavení"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Zařízení může být ohroženo"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Byla nalezena rizika"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Účet může být ohrožen"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Účet je ohrožen"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# upozornění}few{# upozornění}many{# upozornění}other{# upozornění}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Přečtěte si upozornění níže}few{Přečtěte si upozornění níže}many{Přečtěte si upozornění níže}other{Přečtěte si upozornění níže}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Stránku nelze otevřít"</string> <string name="resolving_action_error" msgid="371968886143262375">"Upozornění se nepodařilo vyřešit"</string> <string name="refresh_timeout" msgid="251734999692581852">"Nastavení se nepodařilo obnovit"</string> diff --git a/SafetyCenter/Resources/shared_res/values-da/strings.xml b/SafetyCenter/Resources/shared_res/values-da/strings.xml index 605ffa316..1903c2a23 100644 --- a/SafetyCenter/Resources/shared_res/values-da/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-da/strings.xml @@ -18,9 +18,11 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="scanning_title" msgid="5424849039854311398">"Scanner"</string> - <string name="loading_summary" msgid="3740846439782713910">"Tjekker enhedsindstillinger…"</string> + <string name="loading_summary" msgid="3740846439782713910">"Tjekker enhedsindstillinger…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Det ser fint ud"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Der blev ikke fundet nogen problemer"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Der er et tilgængeligt tip}one{Der er et tilgængeligt tip}other{Der er tilgængelige tips}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{En handling er udført}one{En handling er udført}other{Handlinger er udført}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Gennemgå indstillingerne"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Tjek listen over indstillinger"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Enheden kan være sårbar"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Der blev fundet risici"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Kontoen kan være sårbar"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Kontoen er sårbar"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# underretning}one{# underretning}other{# underretninger}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Se underretningen nedenfor}one{Se underretningen nedenfor}other{Se underretningerne nedenfor}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Siden kunne ikke åbnes"</string> <string name="resolving_action_error" msgid="371968886143262375">"Underretningen kunne ikke behandles"</string> <string name="refresh_timeout" msgid="251734999692581852">"Indstillingerne kunne ikke opdateres"</string> diff --git a/SafetyCenter/Resources/shared_res/values-de/strings.xml b/SafetyCenter/Resources/shared_res/values-de/strings.xml index 148f26786..d3777c6c9 100644 --- a/SafetyCenter/Resources/shared_res/values-de/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-de/strings.xml @@ -18,9 +18,11 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> <string name="scanning_title" msgid="5424849039854311398">"Scan wird ausgeführt"</string> - <string name="loading_summary" msgid="3740846439782713910">"Geräteeinstellungen werden geprüft…"</string> + <string name="loading_summary" msgid="3740846439782713910">"Geräteeinstellungen werden geprüft…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Alles in Ordnung"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Keine Probleme gefunden"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Tipp verfügbar}other{Tipps verfügbar}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Maßnahme ergriffen}other{Maßnahmen ergriffen}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Einstellungen prüfen"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Liste der Einstellungen prüfen"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Gerät ist eventuell gefährdet"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Sicherheitsrisiken gefunden"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Konto eventuell gefährdet"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Konto gefährdet"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# Warnung}other{# Warnungen}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Benachrichtigung unten ansehen}other{Benachrichtigungen unten ansehen}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Seite konnte nicht geöffnet werden"</string> <string name="resolving_action_error" msgid="371968886143262375">"Ursache konnte nicht behoben werden"</string> <string name="refresh_timeout" msgid="251734999692581852">"Einstellungen konnten nicht aktualisiert werden"</string> diff --git a/SafetyCenter/Resources/shared_res/values-el/strings.xml b/SafetyCenter/Resources/shared_res/values-el/strings.xml index 5b2094d47..194ce7b43 100644 --- a/SafetyCenter/Resources/shared_res/values-el/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-el/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Έλεγχος ρυθμίσεων συσκευής…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Όλα εντάξει"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Δεν εντοπίστηκαν προβλήματα"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Διαθέσιμη συμβουλή}other{Διαθέσιμες συμβουλές}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Ενέργεια που εκτελέστηκε}other{Ενέργειες που εκτελέστηκαν}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Έλεγχος ρυθμίσεων"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Έλεγχος λίστας ρυθμίσεων"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Η συσκευή μπορεί να κινδυνεύει"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Εντοπίστηκαν κίνδυνοι"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Ο λογαριασμός μπορεί να κινδυνεύει"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Ο λογαριασμός βρίσκεται σε κίνδυνο"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# ειδοποίηση}other{# ειδοποιήσεις}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Δείτε την παρακάτω ειδοποίηση}other{Δείτε τις παρακάτω ειδοποιήσεις}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Δεν ήταν δυνατό το άνοιγμα της σελίδας"</string> <string name="resolving_action_error" msgid="371968886143262375">"Δεν ήταν δυνατή η επίλυση της ειδοποίησης"</string> <string name="refresh_timeout" msgid="251734999692581852">"Δεν ήταν δυνατή η ανανέωση των ρυθμίσεων"</string> diff --git a/SafetyCenter/Resources/shared_res/values-en-rAU/strings.xml b/SafetyCenter/Resources/shared_res/values-en-rAU/strings.xml index 99408ab64..30a550534 100644 --- a/SafetyCenter/Resources/shared_res/values-en-rAU/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-en-rAU/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Checking device settings…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Looks fine"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"No problems found"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Tip available}other{Tips available}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Action taken}other{Actions taken}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Review settings"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Check settings list"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Device may be at risk"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risks found"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Account may be at risk"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Account is at risk"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alert}other{# alerts}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{See alert below}other{See alerts below}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Couldn\'t open page"</string> <string name="resolving_action_error" msgid="371968886143262375">"Couldn\'t resolve alert"</string> <string name="refresh_timeout" msgid="251734999692581852">"Couldn\'t refresh settings"</string> diff --git a/SafetyCenter/Resources/shared_res/values-en-rCA/strings.xml b/SafetyCenter/Resources/shared_res/values-en-rCA/strings.xml index 98fcbee17..14cb051e1 100644 --- a/SafetyCenter/Resources/shared_res/values-en-rCA/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-en-rCA/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Checking device settings…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Looks good"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"No problems found"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Tip available}other{Tips available}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Action taken}other{Actions taken}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Review settings"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Check settings list"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Device may be at risk"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risks found"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Account may be at risk"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Account is at risk"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alert}other{# alerts}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{See alert below}other{See alerts below}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Couldnt open page"</string> <string name="resolving_action_error" msgid="371968886143262375">"Couldnt resolve alert"</string> <string name="refresh_timeout" msgid="251734999692581852">"Couldnt refresh settings"</string> diff --git a/SafetyCenter/Resources/shared_res/values-en-rGB/strings.xml b/SafetyCenter/Resources/shared_res/values-en-rGB/strings.xml index 99408ab64..30a550534 100644 --- a/SafetyCenter/Resources/shared_res/values-en-rGB/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-en-rGB/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Checking device settings…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Looks fine"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"No problems found"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Tip available}other{Tips available}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Action taken}other{Actions taken}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Review settings"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Check settings list"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Device may be at risk"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risks found"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Account may be at risk"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Account is at risk"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alert}other{# alerts}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{See alert below}other{See alerts below}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Couldn\'t open page"</string> <string name="resolving_action_error" msgid="371968886143262375">"Couldn\'t resolve alert"</string> <string name="refresh_timeout" msgid="251734999692581852">"Couldn\'t refresh settings"</string> diff --git a/SafetyCenter/Resources/shared_res/values-en-rIN/strings.xml b/SafetyCenter/Resources/shared_res/values-en-rIN/strings.xml index 99408ab64..30a550534 100644 --- a/SafetyCenter/Resources/shared_res/values-en-rIN/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-en-rIN/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Checking device settings…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Looks fine"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"No problems found"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Tip available}other{Tips available}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Action taken}other{Actions taken}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Review settings"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Check settings list"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Device may be at risk"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risks found"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Account may be at risk"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Account is at risk"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alert}other{# alerts}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{See alert below}other{See alerts below}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Couldn\'t open page"</string> <string name="resolving_action_error" msgid="371968886143262375">"Couldn\'t resolve alert"</string> <string name="refresh_timeout" msgid="251734999692581852">"Couldn\'t refresh settings"</string> diff --git a/SafetyCenter/Resources/shared_res/values-en-rXC/strings.xml b/SafetyCenter/Resources/shared_res/values-en-rXC/strings.xml index 25a7bdc20..111622cf3 100644 --- a/SafetyCenter/Resources/shared_res/values-en-rXC/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-en-rXC/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Checking device settings…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Looks good"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"No problems found"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Tip available}other{Tips available}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Action taken}other{Actions taken}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Review settings"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Check settings list"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Device may be at risk"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risks found"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Account may be at risk"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Account is at risk"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alert}other{# alerts}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{See alert below}other{See alerts below}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Couldnt open page"</string> <string name="resolving_action_error" msgid="371968886143262375">"Couldnt resolve alert"</string> <string name="refresh_timeout" msgid="251734999692581852">"Couldnt refresh settings"</string> diff --git a/SafetyCenter/Resources/shared_res/values-es-rUS/strings.xml b/SafetyCenter/Resources/shared_res/values-es-rUS/strings.xml index 117605c18..ef0ef2532 100644 --- a/SafetyCenter/Resources/shared_res/values-es-rUS/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-es-rUS/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Verificando la configuración del dispositivo…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Todo en orden"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"No se encontraron problemas"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Sugerencia disponible}many{Sugerencias disponibles}other{Sugerencias disponibles}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Se tomó una medida}many{Se tomaron medidas}other{Se tomaron medidas}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Revisar la configuración"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Verifica la lista de configuración"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"El dispositivo podría estar en riesgo"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Se detectaron riesgos"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"La cuenta podría estar en riesgo"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"La cuenta está en riesgo"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alerta}many{# alertas}other{# alertas}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Ve la alerta a continuación}many{Ve las alertas a continuación}other{Ve las alertas a continuación}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"No se pudo abrir la página"</string> <string name="resolving_action_error" msgid="371968886143262375">"No se pudo resolver la alerta"</string> <string name="refresh_timeout" msgid="251734999692581852">"No se pudo actualizar la configuración"</string> diff --git a/SafetyCenter/Resources/shared_res/values-es/strings.xml b/SafetyCenter/Resources/shared_res/values-es/strings.xml index 9f5d47188..015e7a5aa 100644 --- a/SafetyCenter/Resources/shared_res/values-es/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-es/strings.xml @@ -17,10 +17,12 @@ <resources xmlns:android="http://schemas.android.com/apk/res/android" xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2"> - <string name="scanning_title" msgid="5424849039854311398">"Analizando"</string> + <string name="scanning_title" msgid="5424849039854311398">"Analizan&#173;do"</string> <string name="loading_summary" msgid="3740846439782713910">"Comprobando los ajustes del dispositivo…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Todo correcto"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"No se ha encontrado ningún problema"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Consejo disponible}many{Consejos disponibles}other{Consejos disponibles}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Medida tomada}many{Medidas tomadas}other{Medidas tomadas}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Revisa los ajustes"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Comprueba la lista de ajustes"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"El dispositivo puede estar en riesgo"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Riesgos detectados"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"La cuenta puede estar en riesgo"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"La cuenta está en riesgo"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alerta}many{# alertas}other{# alertas}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Consulta la alerta a continuación}many{Consulta las alertas a continuación}other{Consulta las alertas a continuación}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"No se ha podido abrir la página"</string> <string name="resolving_action_error" msgid="371968886143262375">"No se ha podido resolver la alerta"</string> <string name="refresh_timeout" msgid="251734999692581852">"No se han podido actualizar los ajustes"</string> diff --git a/SafetyCenter/Resources/shared_res/values-et/strings.xml b/SafetyCenter/Resources/shared_res/values-et/strings.xml index 3242bd5d4..c3662a022 100644 --- a/SafetyCenter/Resources/shared_res/values-et/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-et/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Seadme seadete kontrollimine …"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Korras"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Probleeme ei leitud"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Saadaval on nõuanne}other{Saadaval on nõuanded}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Tehti toiming}other{Tehti toimingud}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Vaadake seaded üle"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Kontrollige seadete loendit"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Seade võib olla ohus"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Leiti ohud"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Konto võib olla ohus"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Konto on ohus"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# hoiatus}other{# hoiatust}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Vaadake allolevat hoiatust}other{Vaadake allolevaid hoiatusi}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Lehte ei saanud avada"</string> <string name="resolving_action_error" msgid="371968886143262375">"Hoiatusega seotud probleemi ei saanud lahendada"</string> <string name="refresh_timeout" msgid="251734999692581852">"Seadeid ei saanud värskendada"</string> diff --git a/SafetyCenter/Resources/shared_res/values-eu/strings.xml b/SafetyCenter/Resources/shared_res/values-eu/strings.xml index be52b5cf0..6ceb84df7 100644 --- a/SafetyCenter/Resources/shared_res/values-eu/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-eu/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Gailuaren ezarpenak egiaztatzen…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Ondo dago"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Ez da aurkitu arazorik"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Aholku bat duzu}other{Aholkuak dituzu}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Zerbait egin da}other{Zerbait egin da}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Berrikusi ezarpenak"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Egiaztatu ezarpenen zerrenda"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Baliteke gailua arriskuan egotea"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Arriskuak aurkitu dira"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Baliteke kontua arriskuan egotea"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Kontua arriskuan dago"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alerta}other{# alerta}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Ikusi alerta behean}other{Ikusi alertak behean}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Ezin da ireki orria"</string> <string name="resolving_action_error" msgid="371968886143262375">"Ezin izan da ebatzi alerta"</string> <string name="refresh_timeout" msgid="251734999692581852">"Ezin izan dira freskatu ezarpenak"</string> diff --git a/SafetyCenter/Resources/shared_res/values-fa/strings.xml b/SafetyCenter/Resources/shared_res/values-fa/strings.xml index cf8ae6db4..61f47275d 100644 --- a/SafetyCenter/Resources/shared_res/values-fa/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-fa/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"درحال بررسی تنظیمات دستگاه…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"خوب است"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"مشکلی پیدا نشد"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{نکته دردسترس است}one{نکته دردسترس است}other{نکتههایی دردسترس است}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{اقدام انجام شد}one{اقدام انجام شد}other{اقدامات انجام شد}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"مرور تنظیمات"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"بررسی فهرست تنظیمات"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"دستگاه ممکن است درمعرض خطر باشد"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"خطراتی پیدا شده است"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"ممکن است حساب درمعرض خطر باشد"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"حساب درمعرض خطر است"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# هشدار}one{# هشدار}other{# هشدار}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{دیدن هشدار در زیر}one{دیدن هشدار در زیر}other{دیدن هشدارها در زیر}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"صفحه باز نشد"</string> <string name="resolving_action_error" msgid="371968886143262375">"هشدار رفع نشد"</string> <string name="refresh_timeout" msgid="251734999692581852">"تنظیمات بازآوری نشد"</string> diff --git a/SafetyCenter/Resources/shared_res/values-fi/strings.xml b/SafetyCenter/Resources/shared_res/values-fi/strings.xml index 3010e637f..667b9bef2 100644 --- a/SafetyCenter/Resources/shared_res/values-fi/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-fi/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Tarkistetaan laiteasetuksia…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Hyvältä näyttää"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Ongelmia ei löytynyt"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Vinkki saatavilla}other{Vinkkejä saatavilla}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Tehty toiminto}other{Tehdyt toiminnot}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Tarkista asetukset"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Tarkista asetuslista"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Laite saattaa olla vaarantunut"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Tietoturvariskejä löydetty"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Tili voi olla vaarantunut"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Tili on vaarantunut"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# hälytys}other{# hälytystä}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Katso ilmoitus alla}other{Katso ilmoitukset alla}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Sivun avaaminen epäonnistui"</string> <string name="resolving_action_error" msgid="371968886143262375">"Hälytyksen ratkaiseminen epäonnistui"</string> <string name="refresh_timeout" msgid="251734999692581852">"Asetuksia ei voitu päivittää"</string> diff --git a/SafetyCenter/Resources/shared_res/values-fr-rCA/strings.xml b/SafetyCenter/Resources/shared_res/values-fr-rCA/strings.xml index 214d4933e..4c80652ad 100644 --- a/SafetyCenter/Resources/shared_res/values-fr-rCA/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-fr-rCA/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Vérification des paramètres de l\'appareil en cours…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Tout semble correct"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Aucun problème trouvé"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Conseil proposé}one{Conseil proposé}many{Conseils proposés}other{Conseils proposés}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Mesure prise}one{Mesure prise}many{Mesures prises}other{Mesures prises}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Vérifier les paramètres"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Vérifiez la liste des paramètres"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"L\'appareil pourrait être en danger"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Dangers trouvés"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Le compte pourrait être en danger"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Le compte est en danger"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alerte}one{# alerte}many{# alertes}other{# alertes}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Consultez l\'alerte ci-dessous}one{Consultez l\'alerte ci-dessous}many{Consultez les alertes ci-dessous}other{Consultez les alertes ci-dessous}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Impossible d\'ouvrir la page"</string> <string name="resolving_action_error" msgid="371968886143262375">"Impossible de résoudre l\'alerte"</string> <string name="refresh_timeout" msgid="251734999692581852">"Impossible d\'actualiser les paramètres"</string> diff --git a/SafetyCenter/Resources/shared_res/values-fr/strings.xml b/SafetyCenter/Resources/shared_res/values-fr/strings.xml index 4fe400a29..9a22eaea3 100644 --- a/SafetyCenter/Resources/shared_res/values-fr/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-fr/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Vérification des paramètres de l\'appareil…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Tout semble bon"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Aucun problème détecté"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Conseil disponible}one{Conseil disponible}many{Conseils disponibles}other{Conseils disponibles}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Mesure prise}one{Mesure prise}many{Mesures prises}other{Mesures prises}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Vérifier les paramètres"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Vérifier la liste des paramètres"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Risque potentiel sur l\'appareil"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risques détectés"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Risque potentiel sur le compte"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Risque sur le compte"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alerte}one{# alerte}many{# alertes}other{# alertes}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Voir l\'alerte ci-dessous}one{Voir l\'alerte ci-dessous}many{Voir les alertes ci-dessous}other{Voir les alertes ci-dessous}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Impossible d\'accéder à la page"</string> <string name="resolving_action_error" msgid="371968886143262375">"Impossible de résoudre l\'alerte"</string> <string name="refresh_timeout" msgid="251734999692581852">"Impossible d\'actualiser les paramètres"</string> diff --git a/SafetyCenter/Resources/shared_res/values-gl/strings.xml b/SafetyCenter/Resources/shared_res/values-gl/strings.xml index 0262b2391..eaf924353 100644 --- a/SafetyCenter/Resources/shared_res/values-gl/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-gl/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Comprobando configuración do dispositivo…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Parece que todo está ben"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Non se atoparon problemas"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Consello dispoñible}other{Consellos dispoñibles}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Acción levada a cabo}other{Accións levadas a cabo}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Revisa a configuración"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Revisa a lista de opcións de configuración"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"O dispositivo pode estar en risco"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Atopáronse riscos"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"A conta pode estar en risco"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"A conta está en risco"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alerta}other{# alertas}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Ver a alerta a continuación}other{Ver as alertas a continuación}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Non se puido abrir a páxina"</string> <string name="resolving_action_error" msgid="371968886143262375">"Non se puido resolver a alerta"</string> <string name="refresh_timeout" msgid="251734999692581852">"Non se puido actualizar a configuración"</string> diff --git a/SafetyCenter/Resources/shared_res/values-gu/strings.xml b/SafetyCenter/Resources/shared_res/values-gu/strings.xml index 23ee34b6c..6731ec6dd 100644 --- a/SafetyCenter/Resources/shared_res/values-gu/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-gu/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"ડિવાઇસના સેટિંગ ચેક કરી રહ્યાં છીએ…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"સરસ દેખાય છે"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"કોઈ સમસ્યા મળી નથી"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{ટિપ ઉપલબ્ધ છે}one{ટિપ ઉપલબ્ધ છે}other{ટિપ ઉપલબ્ધ છે}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{લેવાયેલું પગલું}one{લેવાયેલું પગલું}other{લેવાયેલા પગલાં}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"સેટિંગનો રિવ્યૂ કરો"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"સેટિંગની સૂચિ ચેક કરો"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"ડિવાઇસ કદાચ જોખમમાં હોઈ શકે"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"જોખમો મળ્યા"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"એકાઉન્ટ જોખમમાં હોઈ શકે છે"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"એકાઉન્ટ જોખમમાં છે"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# અલર્ટ}one{# અલર્ટ}other{# અલર્ટ}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{નીચે આપેલું અલર્ટ જુઓ}one{નીચે આપેલું અલર્ટ જુઓ}other{નીચે આપેલા અલર્ટ જુઓ}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"પેજ ખોલી શક્યા નથી"</string> <string name="resolving_action_error" msgid="371968886143262375">"અલર્ટનું નિરાકરણ લાવી શક્યા નથી"</string> <string name="refresh_timeout" msgid="251734999692581852">"સેટિંગ રિફ્રેશ કરી શકાયા નથી"</string> diff --git a/SafetyCenter/Resources/shared_res/values-hi/strings.xml b/SafetyCenter/Resources/shared_res/values-hi/strings.xml index 8d2e65132..2df7ef702 100644 --- a/SafetyCenter/Resources/shared_res/values-hi/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-hi/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"डिवाइस सेटिंग की जांच हो रही है…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"डिवाइस सुरक्षित लग रहा है"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"कोई समस्या नहीं मिली"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{सुझाव दिया गया है}one{सुझाव दिया गया है}other{सुझाव दिए गए हैं}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{कार्रवाई की गई है}one{कार्रवाई की गई है}other{कार्रवाइयां की गई हैं}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"सेटिंग देखें"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"सेटिंग की सूची देखें"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"डिवाइस की सुरक्षा शायद खतरे में है"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"खतरे का पता चला"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"खाते की सुरक्षा खतरे में हो सकती है"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"खाते की सुरक्षा खतरे में है"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# चेतावनी}one{# चेतावनी}other{# चेतावनियां}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{यहां चेतावनी देखें}one{यहां चेतावनी देखें}other{यहां चेतावनियां देखें}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"पेज को खोला नहीं जा सका"</string> <string name="resolving_action_error" msgid="371968886143262375">"चेतावनी में बताई गई समस्या को ठीक नहीं किया जा सका"</string> <string name="refresh_timeout" msgid="251734999692581852">"सेटिंग को रीफ़्रेश नहीं किया जा सका"</string> diff --git a/SafetyCenter/Resources/shared_res/values-hr/strings.xml b/SafetyCenter/Resources/shared_res/values-hr/strings.xml index a7ba3fe92..93f7cba6e 100644 --- a/SafetyCenter/Resources/shared_res/values-hr/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-hr/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Provjera postavki uređaja…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Izgleda dobro"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Problemi nisu pronađeni"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Dostupan je savjet}one{Dostupni su savjeti}few{Dostupni su savjeti}other{Dostupni su savjeti}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Poduzeta je radnja}one{Poduzete su radnje}few{Poduzete su radnje}other{Poduzete su radnje}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Pregledajte postavke"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Provjera popisa postavki"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Uređaj je možda ugrožen"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Pronađeni su rizici"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Račun je možda ugrožen"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Račun je ugrožen"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# upozorenje}one{# upozorenje}few{# upozorenja}other{# upozorenja}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Pogledajte upozorenje u nastavku}one{Pogledajte upozorenja u nastavku}few{Pogledajte upozorenja u nastavku}other{Pogledajte upozorenja u nastavku}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Otvaranje stranice nije uspjelo"</string> <string name="resolving_action_error" msgid="371968886143262375">"Razrješavanje upozorenja nije uspjelo"</string> <string name="refresh_timeout" msgid="251734999692581852">"Nije bilo moglo osvježiti postavke"</string> diff --git a/SafetyCenter/Resources/shared_res/values-hu/strings.xml b/SafetyCenter/Resources/shared_res/values-hu/strings.xml index febe925bc..48f6d2d60 100644 --- a/SafetyCenter/Resources/shared_res/values-hu/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-hu/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Eszközbeállítások ellenőrzése…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Jónak tűnik"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Nem találtunk problémát"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Rendelkezésre áll egy tipp}other{Rendelkezésre állnak tippek}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Végrehajtott intézkedés}other{Végrehajtott intézkedések}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Beállítások áttekintése"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Ellenőrizze a beállításlistát"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Az eszközhasználat kockázatos lehet"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Veszélyeket észleltünk"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Fiókja veszélyben lehet"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Fiókja veszélyben van"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# értesítés}other{# értesítés}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Tekintse meg az alábbi értesítést}other{Tekintse meg az alábbi értesítéseket}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Nem sikerült megnyitni az oldalt"</string> <string name="resolving_action_error" msgid="371968886143262375">"Nem sikerült feloldani a figyelmeztetést"</string> <string name="refresh_timeout" msgid="251734999692581852">"Nem sikerült a beállítások frissítése"</string> diff --git a/SafetyCenter/Resources/shared_res/values-hy/strings.xml b/SafetyCenter/Resources/shared_res/values-hy/strings.xml index 2b0f80c20..8f4344a63 100644 --- a/SafetyCenter/Resources/shared_res/values-hy/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-hy/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Սարքի կարգավորումները ստուգվում են…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Ամեն ինչ կարգին է"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Որևէ խնդիր չի հայտնաբերվել"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Հասանելի խորհուրդ}one{Հասանելի խորհուրդ}other{Հասանելի խորհուրդներ}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Ձեռնարկված միջոց}one{Ձեռնարկված միջոց}other{Ձեռնարկված միջոցներ}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Ստուգեք կարգավորումները"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Ստուգեք կարգավորումների ցանկը"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Սարքը կարող է վտանգված լինել"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Ռիսկեր են հայտնաբերվել"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Հաշիվը կարող է վտանգված լինել"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Հաշիվը վտանգված է"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# ծանուցում}one{# ծանուցում}other{# ծանուցում}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Ստորև տեսեք զգուշացումը}one{Ստորև տեսեք զգուշացումը}other{Ստորև տեսեք զգուշացումները}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Չհաջողվեց բացել էջը"</string> <string name="resolving_action_error" msgid="371968886143262375">"Չհաջողվեց լուծել ծանուցումը"</string> <string name="refresh_timeout" msgid="251734999692581852">"Չհաջողվեց թարմացնել կարգավորումները"</string> diff --git a/SafetyCenter/Resources/shared_res/values-in/strings.xml b/SafetyCenter/Resources/shared_res/values-in/strings.xml index d5d70c27b..a85615736 100644 --- a/SafetyCenter/Resources/shared_res/values-in/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-in/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Memeriksa setelan perangkat…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Tidak ada masalah"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Tidak ditemukan masalah"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Tips yang tersedia}other{Tips yang tersedia}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Tindakan yang dilakukan}other{Tindakan yang dilakukan}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Tinjau setelan"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Periksa daftar setelan"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Perangkat mungkin berisiko"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risiko ditemukan"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Akun mungkin berisiko"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Akun berisiko"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# peringatan}other{# peringatan}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Lihat peringatan di bawah ini}other{Lihat peringatan di bawah ini}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Tidak dapat membuka halaman"</string> <string name="resolving_action_error" msgid="371968886143262375">"Tidak dapat menyelesaikan peringatan"</string> <string name="refresh_timeout" msgid="251734999692581852">"Tidak dapat merefresh setelan"</string> diff --git a/SafetyCenter/Resources/shared_res/values-is/strings.xml b/SafetyCenter/Resources/shared_res/values-is/strings.xml index c3048176d..4fc822d62 100644 --- a/SafetyCenter/Resources/shared_res/values-is/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-is/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Athugar stillingar tækis…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Lítur vel út"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Engin vandamál fundust"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Ábending í boði}one{Ábendingar í boði}other{Ábendingar í boði}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Aðgerð sem gripið var til}one{Aðgerðir sem gripið var til}other{Aðgerðir sem gripið var til}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Yfirfara stillingar"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Athuga lista yfir stillingar"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Tækið er hugsanlega í hættu"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Hætta greindist"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Reikningurinn er hugsanlega í hættu"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Reikningurinn er í hættu"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# viðvörun}one{# viðvörun}other{# viðvaranir}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Sjá viðvörun hér að neðan}one{Sjá viðvaranir hér að neðan}other{Sjá viðvaranir hér að neðan}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Ekki tókst að opna síðuna"</string> <string name="resolving_action_error" msgid="371968886143262375">"Ekki tókst að leysa úr viðvöruninni"</string> <string name="refresh_timeout" msgid="251734999692581852">"Ekki tókst að endurnýja stillingar"</string> diff --git a/SafetyCenter/Resources/shared_res/values-it/strings.xml b/SafetyCenter/Resources/shared_res/values-it/strings.xml index 0d0667ec3..049d13632 100644 --- a/SafetyCenter/Resources/shared_res/values-it/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-it/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Controllo delle impostazioni del dispositivo in corso…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Tutto a posto"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Nessun problema rilevato"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Suggerimento disponibile}many{Suggerimenti disponibili}other{Suggerimenti disponibili}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Azione intrapresa}many{Azioni intraprese}other{Azioni intraprese}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Verifica le impostazioni"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Controlla l\'elenco di impostazioni"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Il dispositivo potrebbe essere a rischio"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Rischi rilevati"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"L\'account potrebbe essere a rischio"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"L\'account è a rischio"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# avviso}many{# avvisi}other{# avvisi}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Visualizza l\'avviso qui sotto}many{Visualizza gli avvisi qui sotto}other{Visualizza gli avvisi qui sotto}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Impossibile aprire la pagina"</string> <string name="resolving_action_error" msgid="371968886143262375">"Impossibile risolvere l\'avviso"</string> <string name="refresh_timeout" msgid="251734999692581852">"Impossibile aggiornare le impostazioni"</string> diff --git a/SafetyCenter/Resources/shared_res/values-iw/strings.xml b/SafetyCenter/Resources/shared_res/values-iw/strings.xml index b2ccf90d3..1a3805f1b 100644 --- a/SafetyCenter/Resources/shared_res/values-iw/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-iw/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"הגדרות המכשיר נבדקות…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"נראה טוב"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"לא נמצאו בעיות"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{טיפ זמין}one{טיפים זמינים}two{טיפים זמינים}other{טיפים זמינים}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{פעולה בוצעה}one{פעולות בוצעו}two{פעולות בוצעו}other{פעולות בוצעו}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"בדיקת ההגדרות"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"בדיקה של רשימת ההגדרות"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"המכשיר עלול להיות בסיכון"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"נמצאו סיכונים"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"החשבון עלול להיות בסיכון"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"החשבון בסיכון"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{התראה #}one{# התראות}two{# התראות}other{# התראות}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{הצגת ההתראה בהמשך}one{הצגת ההתראות בהמשך}two{הצגת ההתראות בהמשך}other{הצגת ההתראות בהמשך}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"לא ניתן היה לפתוח את הדף"</string> <string name="resolving_action_error" msgid="371968886143262375">"לא ניתן היה לפתור את הבעיה בהתראה"</string> <string name="refresh_timeout" msgid="251734999692581852">"לא ניתן היה לרענן את ההגדרות"</string> diff --git a/SafetyCenter/Resources/shared_res/values-ja/strings.xml b/SafetyCenter/Resources/shared_res/values-ja/strings.xml index 5d82ded29..9b3a9e708 100644 --- a/SafetyCenter/Resources/shared_res/values-ja/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ja/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"デバイスの設定を確認しています…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"問題はありません"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"問題は見つかりませんでした"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{ヒントをご覧いただけます}other{ヒントをご覧いただけます}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{対処しました}other{対処しました}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"設定の確認"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"設定リストをご確認ください"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"デバイスが危険な可能性があります"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"リスクが検出されました"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"アカウントが危険な可能性があります"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"アカウントが危険です"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# 件のアラート}other{# 件のアラート}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{下記のアラートをご確認ください}other{下記のアラートをご確認ください}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"ページを開けませんでした"</string> <string name="resolving_action_error" msgid="371968886143262375">"アラートを解決できませんでした"</string> <string name="refresh_timeout" msgid="251734999692581852">"設定を更新できませんでした"</string> diff --git a/SafetyCenter/Resources/shared_res/values-ka/strings.xml b/SafetyCenter/Resources/shared_res/values-ka/strings.xml index bd8657d09..7439de354 100644 --- a/SafetyCenter/Resources/shared_res/values-ka/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ka/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"მოწმდება მოწყობილობის პარამეტრები…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"ყველაფერი რიგზეა"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"პრობლემები არ მოიძებნა"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{მინიშნება ხელმისაწვდომია}other{მინიშნებები ხელმისაწვდომია}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{მიღებული ქმედება}other{მიღებული ქმედებები}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"პარამეტრების გადახედვა"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"პარამეტრების სიის შემოწმება"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"მოწყობილობა შესაძლო საფრთხის ქვეშაა"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"აღმოჩენილი რისკები"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"ანგარიშს შესაძლოა საფრთხე ემუქრება"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"ანგარიშს საფრთხე ემუქრება"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# გაფრთხილება}other{# გაფრთხილება}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{იხილეთ გაფრთხილება ქვემოთ}other{იხილეთ გაფრთხილებები ქვემოთ}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"გვერდის გახსნა ვერ მოხერხდა"</string> <string name="resolving_action_error" msgid="371968886143262375">"გაფრთხილება ვერ გადაიჭრა"</string> <string name="refresh_timeout" msgid="251734999692581852">"პარამეტრები ვერ განახლდა"</string> diff --git a/SafetyCenter/Resources/shared_res/values-kk/strings.xml b/SafetyCenter/Resources/shared_res/values-kk/strings.xml index 7689eb4c5..c3420713b 100644 --- a/SafetyCenter/Resources/shared_res/values-kk/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-kk/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Құрылғы параметрлері тексеріліп жатыр…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Бәрі дұрыс"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Ешқандай мәселе табылмады."</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Кеңес бар.}other{Кеңестер бар.}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Әрекет жасалды.}other{Әрекеттер жасалды.}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Параметрлерді қарап шығу"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Параметрлер тізімін тексеру"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Құрылғыға қауіп төнген болуы мүмкін"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Қауіп төніп тұрғаны белгілі болды"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Аккаунтқа қауіп төнген сияқты"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Аккаунтқа қауіп төніп тұр"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# хабарландыру}other{# хабарландыру}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Төмендегі хабарландыруды көріңіз.}other{Төмендегі хабарландыруларды көріңіз.}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Бет ашылмады."</string> <string name="resolving_action_error" msgid="371968886143262375">"Хабарландыруда көрсетілген мәселе шешілмеді."</string> <string name="refresh_timeout" msgid="251734999692581852">"Параметрлер жаңартылмады."</string> diff --git a/SafetyCenter/Resources/shared_res/values-km/strings.xml b/SafetyCenter/Resources/shared_res/values-km/strings.xml index abe11187d..6f0deb271 100644 --- a/SafetyCenter/Resources/shared_res/values-km/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-km/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"កំពុងពិនិត្យមើលការកំណត់ឧបករណ៍…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"គ្មានបញ្ហាអ្វីទេ"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"រកមិនឃើញបញ្ហាទេ"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{មានគន្លឹះ}other{មានគន្លឹះ}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{សកម្មភាពដែលបានធ្វើឡើង}other{សកម្មភាពដែលបានធ្វើឡើង}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"ពិនិត្យមើលការកំណត់"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"ពិនិត្យបញ្ជីការកំណត់"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"ឧបករណ៍អាចប្រឈមនឹងហានិភ័យ"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"រកឃើញហានិភ័យ"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"គណនីអាចប្រឈមនឹងហានិភ័យ"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"គណនីប្រឈមនឹងហានិភ័យ"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{ការជូនដំណឹង #}other{ការជូនដំណឹង #}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{មើលការជូនដំណឹងខាងក្រោម}other{មើលការជូនដំណឹងខាងក្រោម}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"មិនអាចបើកទំព័របានទេ"</string> <string name="resolving_action_error" msgid="371968886143262375">"មិនអាចដោះស្រាយការជូនដំណឹងនេះបានទេ"</string> <string name="refresh_timeout" msgid="251734999692581852">"មិនអាចផ្ទុកការកំណត់ឡើងវិញបានទេ"</string> diff --git a/SafetyCenter/Resources/shared_res/values-kn/strings.xml b/SafetyCenter/Resources/shared_res/values-kn/strings.xml index 08dea1aba..6c6272759 100644 --- a/SafetyCenter/Resources/shared_res/values-kn/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-kn/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"ಸಾಧನ ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"ಸರಿಯಾಗಿದೆ"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"ಯಾವುದೇ ಸಮಸ್ಯೆಗಳು ಕಂಡುಬಂದಿಲ್ಲ"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{ಸಲಹೆ ಲಭ್ಯವಿದೆ}one{ಸಲಹೆಗಳು ಲಭ್ಯವಿವೆ}other{ಸಲಹೆಗಳು ಲಭ್ಯವಿವೆ}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{ಕ್ರಮ ತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ}one{ಕ್ರಮಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ}other{ಕ್ರಮಗಳನ್ನು ತೆಗೆದುಕೊಳ್ಳಲಾಗಿದೆ}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ಪರಿಶೀಲಿಸಿ"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"ಸೆಟ್ಟಿಂಗ್ಗಳ ಪಟ್ಟಿಯನ್ನು ಪರಿಶೀಲಿಸಿ"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"ಸಾಧನವು ಅಪಾಯದಲ್ಲಿರಬಹುದು"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"ಅಪಾಯಗಳು ಕಂಡುಬಂದಿವೆ"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"ಖಾತೆಯು ಅಪಾಯಕ್ಕೀಡಾಗಬಹುದು"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"ಖಾತೆ ಅಪಾಯದಲ್ಲಿದೆ"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# ಅಲರ್ಟ್}one{# ಅಲರ್ಟ್ಗಳು}other{# ಅಲರ್ಟ್ಗಳು}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{ಕೆಳಗಿನ ಎಚ್ಚರಿಕೆಯನ್ನು ನೋಡಿ}one{ಕೆಳಗಿನ ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೋಡಿ}other{ಕೆಳಗಿನ ಎಚ್ಚರಿಕೆಗಳನ್ನು ನೋಡಿ}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"ಪುಟವನ್ನು ತೆರೆಯಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string> <string name="resolving_action_error" msgid="371968886143262375">"ಅಲರ್ಟ್ ಅನ್ನು ಬಗೆಹರಿಸಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string> <string name="refresh_timeout" msgid="251734999692581852">"ಸೆಟ್ಟಿಂಗ್ಗಳನ್ನು ರಿಫ್ರೆಶ್ ಮಾಡಲು ಸಾಧ್ಯವಾಗಲಿಲ್ಲ"</string> diff --git a/SafetyCenter/Resources/shared_res/values-ko/strings.xml b/SafetyCenter/Resources/shared_res/values-ko/strings.xml index 576d9ef04..e92299496 100644 --- a/SafetyCenter/Resources/shared_res/values-ko/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ko/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"기기 설정을 확인하는 중…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"양호"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"문제가 발견되지 않음"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{사용 가능한 팁}other{사용 가능한 팁}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{조치를 취함}other{조치를 취함}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"설정 검토"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"설정 목록 확인"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"기기에 잠재적 위험 발생"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"위험 발견됨"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"계정에 보안 위험이 있을 수 있음"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"계정에 보안 위험이 있음"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{알림 #개}other{알림 #개}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{아래 알림 참고}other{아래 알림 참고}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"페이지를 열 수 없습니다."</string> <string name="resolving_action_error" msgid="371968886143262375">"알림을 해결할 수 없습니다."</string> <string name="refresh_timeout" msgid="251734999692581852">"설정을 새로고침할 수 없습니다."</string> diff --git a/SafetyCenter/Resources/shared_res/values-ky/strings.xml b/SafetyCenter/Resources/shared_res/values-ky/strings.xml index cb0a432e5..6f39c7b06 100644 --- a/SafetyCenter/Resources/shared_res/values-ky/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ky/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Түзмөктүн параметрлери текшерилүүдө…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Жакшы эле окшойт"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Баары жайында!"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Кеңеш бар}other{Кеңештер бар}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Аткарылган аракет}other{Аткарылган аракеттер}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Параметрлерди карап чыгуу"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Параметрлердин тизмесин текшерүү"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Түзмөк коркунучта болушу мүмкүн"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Коркунучтар табылды"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Аккаунт коркунучта болушу мүмкүн"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Аккаунттун коопсуздугу коркунучта"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# эскертүү}other{# эскертүү}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Төмөнкү эскертүүнү көрүү}other{Төмөнкү эскертүүлөрдү көрүү}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Барак ачылган жок"</string> <string name="resolving_action_error" msgid="371968886143262375">"Эскертүү чечилген жок"</string> <string name="refresh_timeout" msgid="251734999692581852">"Параметрлер жаңыртылган жок"</string> diff --git a/SafetyCenter/Resources/shared_res/values-lo/strings.xml b/SafetyCenter/Resources/shared_res/values-lo/strings.xml index 04b8b4530..3da550e9a 100644 --- a/SafetyCenter/Resources/shared_res/values-lo/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-lo/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"ກໍາລັງກວດການຕັ້ງຄ່າອຸປະກອນ…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"ເບິ່ງໃຊ້ໄດ້"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"ບໍ່ພົບບັນຫາໃດໆ"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{ເຄັດລັບທີ່ພ້ອມໃຫ້ນຳໃຊ້}other{ເຄັດລັບທີ່ພ້ອມໃຫ້ນຳໃຊ້}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{ດຳເນີນການແລ້ວ}other{ດຳເນີນການແລ້ວ}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"ກວດເບິ່ງການຕັ້ງຄ່າ"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"ກວດລາຍການການຕັ້ງຄ່າ"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"ອຸປະກອນອາດມີຄວາມສ່ຽງ"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"ພົບຄວາມສ່ຽງ"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"ບັນຊີອາດຕົກຢູ່ໃນຄວາມສ່ຽງ"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"ບັນຊີຕົກຢູ່ໃນຄວາມສ່ຽງ"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# ແຈ້ງເຕືອນ}other{# ແຈ້ງເຕືອນ}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{ເບິ່ງການແຈ້ງເຕືອນລຸ່ມນີ້}other{ເບິ່ງການແຈ້ງເຕືອນລຸ່ມນີ້}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"ບໍ່ສາມາດເປີດໜ້າໄດ້"</string> <string name="resolving_action_error" msgid="371968886143262375">"ບໍ່ສາມາດແກ້ໄຂແຈ້ງເຕືອນໄດ້"</string> <string name="refresh_timeout" msgid="251734999692581852">"ບໍ່ສາມາດໂຫຼດການຕັ້ງຄ່າຄືນໃໝ່"</string> diff --git a/SafetyCenter/Resources/shared_res/values-lt/strings.xml b/SafetyCenter/Resources/shared_res/values-lt/strings.xml index 5e6dd61b8..bdfe7600d 100644 --- a/SafetyCenter/Resources/shared_res/values-lt/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-lt/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Tikrinami įrenginio nustatymai…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Viskas gerai"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Nerasta jokių problemų"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Yra patarimas}one{Yra patarimų}few{Yra patarimų}many{Yra patarimų}other{Yra patarimų}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Veiksmas atliktas}one{Veiksmai atlikti}few{Veiksmai atlikti}many{Veiksmai atlikti}other{Veiksmai atlikti}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Žr. nustatymus"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Tikrinti nustatymų sąrašą"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Įrenginiui gali grėsti pavojus"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Aptikta pavojų"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Paskyrai galėjo kilti pavojus"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Paskyrai kilo pavojus"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# įspėjimas}one{# įspėjimas}few{# įspėjimai}many{# įspėjimo}other{# įspėjimų}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Žr. toliau pateiktą įspėjimą}one{Žr. toliau pateiktus įspėjimus}few{Žr. toliau pateiktus įspėjimus}many{Žr. toliau pateiktus įspėjimus}other{Žr. toliau pateiktus įspėjimus}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Nepavyko atidaryti puslapio"</string> <string name="resolving_action_error" msgid="371968886143262375">"Nepavyko pašalinti įspėjimo"</string> <string name="refresh_timeout" msgid="251734999692581852">"Nepavyko atnaujinti nustatymų"</string> diff --git a/SafetyCenter/Resources/shared_res/values-lv/strings.xml b/SafetyCenter/Resources/shared_res/values-lv/strings.xml index d7808ff24..3563a1b22 100644 --- a/SafetyCenter/Resources/shared_res/values-lv/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-lv/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Notiek ierīces iestatījumu pārbaude…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Viss kārtībā"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Netika atrasta neviena problēma"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Pieejams padoms}zero{Pieejami padomi}one{Pieejami padomi}other{Pieejami padomi}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Veikta darbība}zero{Veiktas darbības}one{Veiktas darbības}other{Veiktas darbības}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Pārskatiet iestatījumus"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Pārbaudiet iestatījumu sarakstu"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Iespējams, ierīce ir apdraudēta"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Konstatēts risks"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Konts var būt apdraudēts"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Konts ir apdraudēts"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# ieteikums vai brīdinājums}zero{# ieteikumu vai brīdinājumu}one{# ieteikums vai brīdinājums}other{# ieteikumi vai brīdinājumi}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Skatiet tālāk norādīto brīdinājumu}zero{Skatiet tālāk norādītos brīdinājumus}one{Skatiet tālāk norādītos brīdinājumus}other{Skatiet tālāk norādītos brīdinājumus}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Nevarēja atvērt lapu"</string> <string name="resolving_action_error" msgid="371968886143262375">"Nevarēja atrisināt ieteikumu vai brīdinājumu"</string> <string name="refresh_timeout" msgid="251734999692581852">"Nevarēja atsvaidzināt iestatījumus"</string> diff --git a/SafetyCenter/Resources/shared_res/values-mk/strings.xml b/SafetyCenter/Resources/shared_res/values-mk/strings.xml index 66dbd7e85..9bced888c 100644 --- a/SafetyCenter/Resources/shared_res/values-mk/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-mk/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Се проверуваат поставките за уредот…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Изгледа добро"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Не се најдени проблеми"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Достапен е совет}one{Достапни се совети}other{Достапни се совети}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Преземено дејство}one{Преземени дејства}other{Преземени дејства}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Прегледајте ги поставките"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Проверете го списокот со поставки"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Уредот можеби е изложен на ризик"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Најдени се ризици"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Сметката можеби е под ризик"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Сметката е под ризик"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# предупредување}one{# предупредување}other{# предупредувања}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Видете го предупредувањето подолу}one{Видете ги предупредувањата подолу}other{Видете ги предупредувањата подолу}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Не можеше да се отвори страницата"</string> <string name="resolving_action_error" msgid="371968886143262375">"Не можеше да се реши предупредувањето"</string> <string name="refresh_timeout" msgid="251734999692581852">"Не можеше да се освежат поставките"</string> diff --git a/SafetyCenter/Resources/shared_res/values-ml/strings.xml b/SafetyCenter/Resources/shared_res/values-ml/strings.xml index f7d1ba4ad..6e666ec16 100644 --- a/SafetyCenter/Resources/shared_res/values-ml/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ml/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"ഉപകരണ ക്രമീകരണം പരിശോധിക്കുന്നു…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"കൊള്ളാം"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"പ്രശ്നങ്ങളൊന്നും കണ്ടെത്തിയില്ല"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{നുറുങ്ങ് ലഭ്യമാണ്}other{നുറുങ്ങുകൾ ലഭ്യമാണ്}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{എടുത്ത നടപടി}other{എടുത്ത നടപടികൾ}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"ക്രമീകരണം അവലോകനം ചെയ്യുക"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"ക്രമീകരണ ലിസ്റ്റ് പരിശോധിക്കുക"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"ഉപകരണം അപകടത്തിലാകാൻ സാധ്യതയുണ്ട്"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"അപകടസാധ്യതകൾ കണ്ടെത്തി"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"അക്കൗണ്ട് അപകടത്തിലായേക്കാം"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"അക്കൗണ്ട് അപകടത്തിലാണ്"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# മുന്നറിയിപ്പ്}other{# മുന്നറിയിപ്പുകൾ}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{താഴെയുള്ള മുന്നറിയിപ്പ് കാണുക}other{താഴെയുള്ള മുന്നറിയിപ്പുകൾ കാണുക}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"പേജ് തുറക്കാനായില്ല"</string> <string name="resolving_action_error" msgid="371968886143262375">"മുന്നറിയിപ്പ് പരിഹരിക്കാനായില്ല"</string> <string name="refresh_timeout" msgid="251734999692581852">"ക്രമീകരണം റീഫ്രഷ് ചെയ്യാനായില്ല"</string> diff --git a/SafetyCenter/Resources/shared_res/values-mn/strings.xml b/SafetyCenter/Resources/shared_res/values-mn/strings.xml index 42e1409e7..76be45d32 100644 --- a/SafetyCenter/Resources/shared_res/values-mn/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-mn/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Төхөөрөмжийн тохиргоог шалгаж байна…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Сайн байна"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Асуудал олдсонгүй"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Зөвлөгөө боломжтой}other{Зөвлөгөөнүүд боломжтой}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Арга хэмжээ авсан}other{Арга хэмжээнүүд авсан}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Тохиргоог шалгах"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Тохиргооны жагсаалтыг шалгах"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Төхөөрөмж эрсдэлд байж магадгүй"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Эрсдэл илэрсэн"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Бүртгэл эрсдэлд байж магадгүй"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Бүртгэл эрсдэлд байна"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# сэрэмжлүүлэг}other{# сэрэмжлүүлэг}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Доорх сэрэмжлүүлгийг харна уу}other{Доорх сэрэмжлүүлгүүдийг харна уу}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Хуудсыг нээж чадсангүй"</string> <string name="resolving_action_error" msgid="371968886143262375">"Сэрэмжлүүлгийг шийдвэрлэж чадсангүй"</string> <string name="refresh_timeout" msgid="251734999692581852">"Тохиргоог сэргээж чадсангүй"</string> diff --git a/SafetyCenter/Resources/shared_res/values-mr/strings.xml b/SafetyCenter/Resources/shared_res/values-mr/strings.xml index fc587a12a..ec145d0f4 100644 --- a/SafetyCenter/Resources/shared_res/values-mr/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-mr/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"डिव्हाइस सेटिंग्ज तपासत आहे…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"चांगले दिसते आहे"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"कोणत्याही समस्या आढळल्या नाहीत"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{टीप उपलब्ध}other{टीपा उपलब्ध}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{कृती केली}other{कृती केल्या}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"सेटिंग्जचे पुनरावलोकन करा"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"सेटिंग्जची सूची तपासा"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"डिव्हाइस धोक्यात असू शकते"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"धोके आढळले"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"खाते धोक्यात असू शकते"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"खाते धोक्यात आहे"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# इशारा}other{# इशारे}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{सूचना खाली पहा}other{सूचना खाली पहा}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"पेज उघडता आले नाही"</string> <string name="resolving_action_error" msgid="371968886143262375">"इशाऱ्याचे निराकरण करता आले नाही"</string> <string name="refresh_timeout" msgid="251734999692581852">"सेटिंग्ज रिफ्रेश करता आली नाही"</string> diff --git a/SafetyCenter/Resources/shared_res/values-ms/strings.xml b/SafetyCenter/Resources/shared_res/values-ms/strings.xml index 44fb26d74..c861da48e 100644 --- a/SafetyCenter/Resources/shared_res/values-ms/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ms/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Menyemak tetapan peranti…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Semuanya baik"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Tiada masalah ditemukan"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Petua tersedia}other{Petua tersedia}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Tindakan diambil}other{Tindakan diambil}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Semak tetapan"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Semak senarai tetapan"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Peranti mungkin berisiko"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risiko ditemukan"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Akaun mungkin berisiko"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Akaun berisiko"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# amaran}other{# amaran}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Lihat amaran di bawah}other{Lihat amaran di bawah}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Tidak dapat membuka halaman"</string> <string name="resolving_action_error" msgid="371968886143262375">"Tidak dapat menyelesaikan amaran"</string> <string name="refresh_timeout" msgid="251734999692581852">"Tidak dapat menyegar semula tetapan"</string> diff --git a/SafetyCenter/Resources/shared_res/values-my/strings.xml b/SafetyCenter/Resources/shared_res/values-my/strings.xml index 773e75157..ddab3b544 100644 --- a/SafetyCenter/Resources/shared_res/values-my/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-my/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"စက်၏ဆက်တင်များကို စစ်ဆေးနေသည်…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"အဆင်ပြေပါသည်"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"ပြဿနာမတွေ့ပါ"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{အကြံပြုချက် ရှိသည်}other{အကြံပြုချက်များ ရှိသည်}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{လုပ်ဆောင်မှု ရှိသည်}other{လုပ်ဆောင်မှုများ ရှိသည်}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"ဆက်တင်များကို စိစစ်ပါ"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"ဆက်တင်များစာရင်းကို စစ်ဆေးပါ"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"စက်တွင် အန္တရာယ်ရှိနိုင်သည်"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"အန္တရာယ် တွေ့ထားသည်"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"အကောင့်တွင် အန္တရာယ်ရှိနိုင်သည်"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"အကောင့်တွင် အန္တရာယ်ရှိသည်"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{သတိပေးချက် # ခု}other{သတိပေးချက် # ခု}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{အောက်ပါ သတိပေးချက်ကို ကြည့်ပါ}other{အောက်ပါ သတိပေးချက်များကို ကြည့်ပါ}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"စာမျက်နှာကို ဖွင့်၍မရပါ"</string> <string name="resolving_action_error" msgid="371968886143262375">"သတိပေးချက်ကို ဖြေရှင်း၍မရပါ"</string> <string name="refresh_timeout" msgid="251734999692581852">"ဆက်တင်များကို ပြန်လည် စတင်၍မရပါ"</string> diff --git a/SafetyCenter/Resources/shared_res/values-nb/strings.xml b/SafetyCenter/Resources/shared_res/values-nb/strings.xml index cc05da47c..02da7c32c 100644 --- a/SafetyCenter/Resources/shared_res/values-nb/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-nb/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Sjekker enhetsinnstillingene …"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Dette ser bra ut"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Fant ingen problemer"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Et tips er tilgjengelig}other{Noen tips er tilgjengelige}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Handlingen er iverksatt}other{Handlingene er iverksatt}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Gå gjennom innstillingene"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Sjekk innstillingslisten"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Enheten kan være i faresonen"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risikoer er registrert"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Kontoen kan være i faresonen"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Kontoen er i faresonen"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# varsel}other{# varsler}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Se varselet nedenfor}other{Se varslene nedenfor}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Kunne ikke åpne siden"</string> <string name="resolving_action_error" msgid="371968886143262375">"Kunne ikke løse varselet"</string> <string name="refresh_timeout" msgid="251734999692581852">"Kunne ikke laste inn innstillingene på nytt"</string> diff --git a/SafetyCenter/Resources/shared_res/values-ne/strings.xml b/SafetyCenter/Resources/shared_res/values-ne/strings.xml index b79f7dae1..7358af100 100644 --- a/SafetyCenter/Resources/shared_res/values-ne/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ne/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"डिभाइसका सेटिङ जाँचिदै छ…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"सबै कुरा ठिकै देखिन्छ"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"कुनै पनि समस्या भेटिएन"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{सुझाव उपलब्ध छ}other{सुझावहरू उपलब्ध छन्}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{कारबाही गरिएको छ}other{कारबाहीहरू गरिएका छन्}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"सेटिङको समीक्षा गर्नुहोस्"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"सेटिङको सूची जाँच्नुहोस्"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"डिभाइस जोखिममा हुन सक्छ"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"जोखिम फेला परे"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"खाता जोखिममा हुन सक्छ"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"खाता जोखिममा छ"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# अलर्ट}other{# वटा अलर्ट}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{तल दिइएको अलर्ट हेर्नुहोस्}other{तल दिइएका अलर्टहरू हेर्नुहोस्}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"पेज खोल्न सकिएन"</string> <string name="resolving_action_error" msgid="371968886143262375">"अलर्ट समाधान गर्न सकिएन"</string> <string name="refresh_timeout" msgid="251734999692581852">"सेटिङ रिफ्रेस गर्न सकिएन"</string> diff --git a/SafetyCenter/Resources/shared_res/values-nl/strings.xml b/SafetyCenter/Resources/shared_res/values-nl/strings.xml index 376a646c9..289ff336b 100644 --- a/SafetyCenter/Resources/shared_res/values-nl/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-nl/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Apparaatinstellingen checken…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Dat ziet er goed uit"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Geen problemen gevonden"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Beschikbare tip}other{Beschikbare tips}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Ondernomen actie}other{Ondernomen acties}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Instellingen checken"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Check de lijst met instellingen"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Apparaat loopt misschien gevaar"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risico\'s gevonden"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Account loopt misschien gevaar"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Account loopt risico"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# melding}other{# meldingen}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Zie onderstaande melding}other{Zie onderstaande meldingen}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Kan de pagina niet openen"</string> <string name="resolving_action_error" msgid="371968886143262375">"Kan melding niet oplossen"</string> <string name="refresh_timeout" msgid="251734999692581852">"Kan instellingen niet vernieuwen"</string> diff --git a/SafetyCenter/Resources/shared_res/values-or/strings.xml b/SafetyCenter/Resources/shared_res/values-or/strings.xml index 8c34f35d5..5760e83a3 100644 --- a/SafetyCenter/Resources/shared_res/values-or/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-or/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"ଡିଭାଇସ ସେଟିଂସ ଯାଞ୍ଚ କରାଯାଉଛି…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"ଠିକ୍ ଥିବା ପରି ଜଣାପଡ଼ୁଛି"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"କୌଣସି ସମସ୍ୟା ମିଳିଲା ନାହିଁ"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{ଉପଲବ୍ଧ ଟିପ}other{ଉପଲବ୍ଧ ଟିପ୍ସ}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{ନିଆଯାଇଥିବା ପଦକ୍ଷେପ}other{ନିଆଯାଇଥିବା ପଦକ୍ଷେପଗୁଡ଼ିକ}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"ସେଟିଂସର ସମୀକ୍ଷା କରନ୍ତୁ"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"ସେଟିଂସ ତାଲିକା ଯାଞ୍ଚ କରନ୍ତୁ"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"ଡିଭାଇସଟି ରିସ୍କରେ ଥାଇପାରେ"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"ବିପଦ ମିଳିଛି"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"ଆକାଉଣ୍ଟ ବିପଦରେ ଥାଇପାରେ"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"ଆକାଉଣ୍ଟ ବିପଦରେ ଅଛି"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{#ଟି ଆଲର୍ଟ}other{#ଟି ଆଲର୍ଟ}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{ନିମ୍ନରେ ଆଲର୍ଟ ଦେଖନ୍ତୁ}other{ନିମ୍ନରେ ଆଲର୍ଟଗୁଡ଼ିକ ଦେଖନ୍ତୁ}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"ପୃଷ୍ଠାକୁ ଖୋଲା ଯାଇପାରିଲା ନାହିଁ"</string> <string name="resolving_action_error" msgid="371968886143262375">"ଆଲର୍ଟର ସମାଧାନ କରାଯାଇପାରିଲା ନାହିଁ"</string> <string name="refresh_timeout" msgid="251734999692581852">"ସେଟିଂସ ରିଫ୍ରେସ କରାଯାଇପାରିଲା ନାହିଁ"</string> diff --git a/SafetyCenter/Resources/shared_res/values-pa/strings.xml b/SafetyCenter/Resources/shared_res/values-pa/strings.xml index 1a34c07f5..022353905 100644 --- a/SafetyCenter/Resources/shared_res/values-pa/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-pa/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"ਡੀਵਾਈਸ ਸੈਟਿੰਗਾਂ ਦੀ ਜਾਂਚ ਕੀਤੀ ਜਾ ਰਹੀ ਹੈ…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"ਸਭ ਕੁਝ ਠੀਕ ਲੱਗ ਰਿਹਾ ਹੈ"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"ਕੋਈ ਸਮੱਸਿਆ ਨਹੀਂ ਮਿਲੀ"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{ਨੁਕਤਾ ਉਪਲਬਧ ਹੈ}one{ਨੁਕਤਾ ਉਪਲਬਧ ਹੈ}other{ਨੁਕਤੇ ਉਪਲਬਧ ਹਨ}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{ਕੀਤੀ ਗਈ ਕਾਰਵਾਈ}one{ਕੀਤੀ ਗਈ ਕਾਰਵਾਈ}other{ਕੀਤੀਆਂ ਗਈਆਂ ਕਾਰਵਾਈਆਂ}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"ਸੈਟਿੰਗਾਂ ਦੀ ਸਮੀਖਿਆ ਕਰੋ"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"ਸੈਟਿੰਗਾਂ ਸੂਚੀ ਦੀ ਜਾਂਚ ਕਰੋ"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"ਡੀਵਾਈਸ ਜੋਖਮ ਵਿੱਚ ਹੋ ਸਕਦਾ ਹੈ"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"ਜੋਖਮਾਂ ਦਾ ਪਤਾ ਲੱਗਿਆ"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"ਖਾਤਾ ਜੋਖਮ ਵਿੱਚ ਹੋ ਸਕਦਾ ਹੈ"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"ਖਾਤਾ ਜੋਖਮ ਵਿੱਚ ਹੈ"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# ਸੁਚੇਤਨਾ}one{# ਸੁਚੇਤਨਾ}other{# ਸੁਚੇਤਨਾਵਾਂ}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{ਹੇਠਾਂ ਸੁਚੇਤਨਾ ਦੇਖੋ}one{ਹੇਠਾਂ ਸੁਚੇਤਨਾ ਦੇਖੋ}other{ਹੇਠਾਂ ਸੁਚੇਤਨਾਵਾਂ ਦੇਖੋ}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"ਪੰਨਾ ਖੋਲ੍ਹਿਆ ਨਹੀਂ ਜਾ ਸਕਿਆ"</string> <string name="resolving_action_error" msgid="371968886143262375">"ਸੁਚੇਤਨਾ ਦਾ ਹੱਲ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string> <string name="refresh_timeout" msgid="251734999692581852">"ਸੈਟਿੰਗਾਂ ਨੂੰ ਰਿਫ੍ਰੈਸ਼ ਨਹੀਂ ਕੀਤਾ ਜਾ ਸਕਿਆ"</string> diff --git a/SafetyCenter/Resources/shared_res/values-pl/strings.xml b/SafetyCenter/Resources/shared_res/values-pl/strings.xml index 4199435f0..23717053e 100644 --- a/SafetyCenter/Resources/shared_res/values-pl/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-pl/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Sprawdzam ustawienia urządzenia…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"OK"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Nie znaleziono problemów"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Dostępna wskazówka}few{Dostępne wskazówki}many{Dostępne wskazówki}other{Dostępne wskazówki}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Podjęliśmy działanie}few{Podjęliśmy działania}many{Podjęliśmy działania}other{Podjęliśmy działania}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Sprawdź ustawienia"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Sprawdź listę ustawień"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Urządzenie może być zagrożone"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Wykryte zagrożenia"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Konto może być zagrożone"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Konto jest zagrożone"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alert}few{# alerty}many{# alertów}other{# alertu}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Zobacz alert poniżej}few{Zobacz alerty poniżej}many{Zobacz alerty poniżej}other{Zobacz alerty poniżej}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Nie udało się otworzyć strony"</string> <string name="resolving_action_error" msgid="371968886143262375">"Nie udało się rozwiązać problemu z alertu"</string> <string name="refresh_timeout" msgid="251734999692581852">"Nie udało się odświeżyć ustawień"</string> diff --git a/SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml b/SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml index daa7107ae..7e9a66ef9 100644 --- a/SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-pt-rBR/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Verificando configurações do dispositivo…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Tudo certo"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Nenhum problema encontrado"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Dica disponível}one{Dica disponível}many{Dicas disponíveis}other{Dicas disponíveis}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Ação realizada}one{Ação realizada}many{Ações realizadas}other{Ações realizadas}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Revisar configurações"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Verificar lista de configurações"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"O dispositivo pode estar em risco"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Riscos encontrados"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"A conta pode estar em risco"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"A conta está em risco"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alerta}one{# alerta}many{# de alertas}other{# alertas}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Conferir alerta abaixo}one{Conferir alerta abaixo}many{Conferir alertas abaixo}other{Conferir alertas abaixo}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Não foi possível abrir a página"</string> <string name="resolving_action_error" msgid="371968886143262375">"Não foi possível resolver o alerta"</string> <string name="refresh_timeout" msgid="251734999692581852">"Não foi possível atualizar as configurações"</string> diff --git a/SafetyCenter/Resources/shared_res/values-pt-rPT/strings.xml b/SafetyCenter/Resources/shared_res/values-pt-rPT/strings.xml index 0021ed269..e7ccb1281 100644 --- a/SafetyCenter/Resources/shared_res/values-pt-rPT/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-pt-rPT/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"A verificar as definições do dispositivo…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Parece estar tudo bem"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Nenhum problema encontrado"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Sugestão disponível}many{Sugestões disponíveis}other{Sugestões disponíveis}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Medida tomada}many{Medidas tomadas}other{Medidas tomadas}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Reveja as definições"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Verifique a lista de definições"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"O dispositivo pode estar em risco"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Riscos encontrados"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"A conta pode estar em risco"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"A conta está em risco"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alerta}many{# alertas}other{# alertas}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Veja o alerta abaixo}many{Veja os alertas abaixo}other{Veja os alertas abaixo}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Não foi possível abrir a página"</string> <string name="resolving_action_error" msgid="371968886143262375">"Não foi possível resolver o alerta"</string> <string name="refresh_timeout" msgid="251734999692581852">"Não foi possível atualizar as definições"</string> diff --git a/SafetyCenter/Resources/shared_res/values-pt/strings.xml b/SafetyCenter/Resources/shared_res/values-pt/strings.xml index daa7107ae..7e9a66ef9 100644 --- a/SafetyCenter/Resources/shared_res/values-pt/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-pt/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Verificando configurações do dispositivo…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Tudo certo"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Nenhum problema encontrado"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Dica disponível}one{Dica disponível}many{Dicas disponíveis}other{Dicas disponíveis}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Ação realizada}one{Ação realizada}many{Ações realizadas}other{Ações realizadas}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Revisar configurações"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Verificar lista de configurações"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"O dispositivo pode estar em risco"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Riscos encontrados"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"A conta pode estar em risco"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"A conta está em risco"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alerta}one{# alerta}many{# de alertas}other{# alertas}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Conferir alerta abaixo}one{Conferir alerta abaixo}many{Conferir alertas abaixo}other{Conferir alertas abaixo}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Não foi possível abrir a página"</string> <string name="resolving_action_error" msgid="371968886143262375">"Não foi possível resolver o alerta"</string> <string name="refresh_timeout" msgid="251734999692581852">"Não foi possível atualizar as configurações"</string> diff --git a/SafetyCenter/Resources/shared_res/values-ro/strings.xml b/SafetyCenter/Resources/shared_res/values-ro/strings.xml index 9899c4825..9ce4e29c2 100644 --- a/SafetyCenter/Resources/shared_res/values-ro/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ro/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Se verifică setările dispozitivului…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Pare în regulă"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Nu s-au găsit probleme"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Sfat disponibil}few{Sfaturi disponibile}other{Sfaturi disponibile}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Măsură luată}few{Măsuri luate}other{Măsuri luate}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Verifică setările"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Verifică lista de setări"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Dispozitivul poate fi expus la risc"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Riscuri descoperite"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Contul poate fi în pericol"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Contul este în pericol"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alertă}few{# alerte}other{# de alerte}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Vezi alerta mai jos}few{Vezi alertele mai jos}other{Vezi alertele mai jos}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Pagina nu s-a putut deschide"</string> <string name="resolving_action_error" msgid="371968886143262375">"Nu s-a putut rezolva alerta"</string> <string name="refresh_timeout" msgid="251734999692581852">"Nu s-au putut actualiza setările"</string> diff --git a/SafetyCenter/Resources/shared_res/values-ru/strings.xml b/SafetyCenter/Resources/shared_res/values-ru/strings.xml index 81ef784ce..9e3906a15 100644 --- a/SafetyCenter/Resources/shared_res/values-ru/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ru/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Проверка настроек устройства…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Всё в порядке"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Угроз не обнаружено"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Доступен совет}one{Доступны советы}few{Доступны советы}many{Доступны советы}other{Доступны советы}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Выполнено действие}one{Выполнены действия}few{Выполнены действия}many{Выполнены действия}other{Выполнены действия}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Проверьте настройки"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Изучите список настроек"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Устройство может быть под угрозой"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Обнаружены риски"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Аккаунт может быть под угрозой"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Аккаунт под угрозой"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# оповещение}one{# оповещение}few{# оповещения}many{# оповещений}other{# оповещения}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Ознакомьтесь с оповещением ниже}one{Ознакомьтесь с оповещениями ниже}few{Ознакомьтесь с оповещениями ниже}many{Ознакомьтесь с оповещениями ниже}other{Ознакомьтесь с оповещениями ниже}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Не удалось открыть страницу."</string> <string name="resolving_action_error" msgid="371968886143262375">"Не удалось устранить проблему."</string> <string name="refresh_timeout" msgid="251734999692581852">"Не удалось обновить настройки"</string> diff --git a/SafetyCenter/Resources/shared_res/values-si/strings.xml b/SafetyCenter/Resources/shared_res/values-si/strings.xml index 28a90207a..f023a038b 100644 --- a/SafetyCenter/Resources/shared_res/values-si/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-si/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"උපාංග සැකසීම් පරීක්ෂා කරමින්…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"හොඳ බව පෙනේ"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"ගැටලු හමු වූයේ නැත"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{ඉඟිය තිබේ}one{ඉඟි තිබේ}other{ඉඟි තිබේ}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{ගත් ක්රියාමාර්ගය}one{ගත් ක්රියාමාර්ග}other{ගත් ක්රියාමාර්ග}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"සැකසීම් සමාලෝචනය කරන්න"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"සැකසීම් ලැයිස්තුව පරීක්ෂා කරන්න"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"උපාංගය අවදානමේ තිබිය හැක"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"අවදානම් හමු විය"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"ගිණුම අවදානමේ තිබිය හැක"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"ගිණුම අවදානමේ පවතී"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# ඇඟවීමක්}one{ඇඟවීම් #ක්}other{ඇඟවීම් #ක්}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{පහත ඇඟවීම බලන්න}one{පහත ඇඟවීම් බලන්න}other{පහත ඇඟවීම් බලන්න}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"පිටුව විවෘත කළ නොහැකි විය"</string> <string name="resolving_action_error" msgid="371968886143262375">"ඇඟවීම විසඳිය නොහැකි විය"</string> <string name="refresh_timeout" msgid="251734999692581852">"සැකසීම් නැවුම් කිරීමට නොහැකි විය"</string> diff --git a/SafetyCenter/Resources/shared_res/values-sk/strings.xml b/SafetyCenter/Resources/shared_res/values-sk/strings.xml index 19333e43c..83dfc416a 100644 --- a/SafetyCenter/Resources/shared_res/values-sk/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-sk/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Kontrolujú sa nastavenia zariadenia…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Je to v poriadku"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Nenašli sa žiadne problémy"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{K dispozícii je tip}few{K dispozícii sú tipy}many{Tips available}other{K dispozícii sú tipy}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Bola vykonaná akcia}few{Boli vykonané akcie}many{Actions taken}other{Boli vykonané akcie}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Kontrola nastavení"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Kontrolný zoznam nastavení"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Zariadenie môže byť ohrozené"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Boli nájdené riziká"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Účet môže byť ohrozený"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Účet je ohrozený"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# upozornenie}few{# upozornenia}many{# alerts}other{# upozornení}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Prečítajte si upozornenie nižšie}few{Prečítajte si upozornenia nižšie}many{See alerts below}other{Prečítajte si upozornenia nižšie}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Stránku sa nepodarilo otvoriť"</string> <string name="resolving_action_error" msgid="371968886143262375">"Upozornenie sa nepodarilo vyriešiť"</string> <string name="refresh_timeout" msgid="251734999692581852">"Nastavenia sa nepodarilo obnoviť"</string> diff --git a/SafetyCenter/Resources/shared_res/values-sl/strings.xml b/SafetyCenter/Resources/shared_res/values-sl/strings.xml index 0bb8948a3..c66bfa02b 100644 --- a/SafetyCenter/Resources/shared_res/values-sl/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-sl/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Preverjanje nastavitev naprave …"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Videti je v redu"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Ni težav."</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Na voljo je nasvet.}one{Na voljo so nasveti.}two{Na voljo so nasveti.}few{Na voljo so nasveti.}other{Na voljo so nasveti.}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Dejanje je bilo izvršeno.}one{Dejanja so bila izvršena.}two{Dejanja so bila izvršena.}few{Dejanja so bila izvršena.}other{Dejanja so bila izvršena.}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Pregled nastavitev"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Seznam za preverjanje nastavitev"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Naprava je morda ogrožena"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Najdena so tveganja"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Račun je morda ogrožen"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Račun je ogrožen"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# opozorilo}one{# opozorilo}two{# opozorili}few{# opozorila}other{# opozoril}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Oglejte si spodnje opozorilo.}one{Oglejte si spodnja opozorila.}two{Oglejte si spodnja opozorila.}few{Oglejte si spodnja opozorila.}other{Oglejte si spodnja opozorila.}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Strani ni bilo mogoče odpreti."</string> <string name="resolving_action_error" msgid="371968886143262375">"Opozorila ni bilo mogoče odpraviti."</string> <string name="refresh_timeout" msgid="251734999692581852">"Nastavitev ni bilo mogoče osvežiti."</string> diff --git a/SafetyCenter/Resources/shared_res/values-sq/strings.xml b/SafetyCenter/Resources/shared_res/values-sq/strings.xml index 03c15227a..99336807a 100644 --- a/SafetyCenter/Resources/shared_res/values-sq/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-sq/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Po kontrollohen cilësimet pajisjes…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Duket mirë"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Nuk u gjetën probleme"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Ofrohet këshillë}other{Ofrohen këshilla}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Masa e marrë}other{Masat e marra}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Rishiko cilësimet"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Kontrollo listën e cilësimeve"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Pajisja mund të jetë në rrezik"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"U gjetën rreziqe"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Llogaria mund të jetë në rrezik"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Llogaria është në rrezik"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# sinjalizim}other{# sinjalizime}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Shiko sinjalizimin më poshtë}other{Shiko sinjalizimet më poshtë}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Faqja nuk mund të hapej"</string> <string name="resolving_action_error" msgid="371968886143262375">"Sinjalizimi nuk mund të zgjidhej"</string> <string name="refresh_timeout" msgid="251734999692581852">"Cilësimet nuk mund të rifreskoheshin"</string> diff --git a/SafetyCenter/Resources/shared_res/values-sr/strings.xml b/SafetyCenter/Resources/shared_res/values-sr/strings.xml index 093e73336..bf82a6785 100644 --- a/SafetyCenter/Resources/shared_res/values-sr/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-sr/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Проверавамо подешавања уређаја…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Све је у реду"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Није пронађен ниједан проблем"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Доступан је савет}one{Доступни су савети}few{Доступни су савети}other{Доступни су савети}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Предузета радња}one{Предузете радње}few{Предузете радње}other{Предузете радње}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Прегледајте подешавања"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Проверите листу подешавања"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Уређај је можда угрожен"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Пронађени су ризици"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Налог је можда угрожен"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Налог је угрожен"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# обавештење}one{# обавештење}few{# обавештења}other{# обавештења}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Погледајте упозорење испод}one{Погледајте упозорења испод}few{Погледајте упозорења испод}other{Погледајте упозорења испод}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Отварање странице није успело"</string> <string name="resolving_action_error" msgid="371968886143262375">"Решавање обавештења није успело"</string> <string name="refresh_timeout" msgid="251734999692581852">"Освежавање подешавања није успело"</string> diff --git a/SafetyCenter/Resources/shared_res/values-sv/strings.xml b/SafetyCenter/Resources/shared_res/values-sv/strings.xml index 3b247301f..f31413a2d 100644 --- a/SafetyCenter/Resources/shared_res/values-sv/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-sv/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Kontrollerar enhetsinställningarna …"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Det ser bra ut"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Inga problem hittades"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Det finns ett tips}other{Det finns tips}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Åtgärd har vidtagits}other{Åtgärder har vidtagits}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Granska inställningarna"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Kontrollera listan med inställningar"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Enheten kan vara i fara"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risker har upptäckts"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Kontot kan vara i fara"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Kontot är i fara"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# varning}other{# varningar}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Se avisering nedan}other{Se aviseringar nedan}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Det gick inte att öppna sidan"</string> <string name="resolving_action_error" msgid="371968886143262375">"Det gick inte att åtgärda varningen"</string> <string name="refresh_timeout" msgid="251734999692581852">"Det gick inte att uppdatera inställningarna"</string> diff --git a/SafetyCenter/Resources/shared_res/values-sw/strings.xml b/SafetyCenter/Resources/shared_res/values-sw/strings.xml index 8f48cfd1e..608d75fa9 100644 --- a/SafetyCenter/Resources/shared_res/values-sw/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-sw/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Inakagua mipangilio ya kifaa…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Kila kitu ni salama"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Haikupata hitilafu yoyote"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Kidokezo kinapatikana}other{Vidokezo vinapatikana}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Hatua imechukuliwa}other{Hatua zimechukuliwa}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Kagua mipangilio"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Kagua orodha ya mipangilio"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Huenda kifaa kikawa hatarini"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Tumegundua hatari"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Huenda akaunti iko hatarini"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Akaunti iko hatarini"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{Arifa #}other{Arifa #}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Angalia arifa hapo chini}other{Angalia arifa hapo chini}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Imeshindwa kufungua ukurasa"</string> <string name="resolving_action_error" msgid="371968886143262375">"Imeshindwa kutia alama kuwa arifa imeshughulikiwa"</string> <string name="refresh_timeout" msgid="251734999692581852">"Tumeshindwa kuonyesha upya mipangilio"</string> diff --git a/SafetyCenter/Resources/shared_res/values-ta/strings.xml b/SafetyCenter/Resources/shared_res/values-ta/strings.xml index 74649ec93..d0081c004 100644 --- a/SafetyCenter/Resources/shared_res/values-ta/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ta/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"சாதன அமைப்புகளைச் சரிபார்க்கிறது…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"எல்லாம் சரியாக உள்ளன"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"சிக்கல்கள் எதுவுமில்லை"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{உதவிக்குறிப்பு உள்ளது}other{உதவிக்குறிப்புகள் உள்ளன}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{எடுக்கப்பட்ட நடவடிக்கை}other{எடுக்கப்பட்ட நடவடிக்கைகள்}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"அமைப்புகளைச் சரிபார்த்தல்"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"அமைப்புகள் பட்டியலைச் சரிபாருங்கள்"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"சாதனம் ஆபத்தில் இருக்கக்கூடும்"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"ஆபத்துகள் கண்டறியப்பட்டுள்ளன"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"கணக்கு ஆபத்தில் இருக்கலாம்"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"கணக்கு ஆபத்தில் உள்ளது"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# எச்சரிக்கை}other{# எச்சரிக்கைகள்}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{கீழுள்ள விழிப்பூட்டலைப் பாருங்கள்}other{கீழுள்ள விழிப்பூட்டல்களைப் பாருங்கள்}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"பக்கத்தைத் திறக்க முடியவில்லை"</string> <string name="resolving_action_error" msgid="371968886143262375">"எச்சரிக்கையைத் தீர்க்க முடியவில்லை"</string> <string name="refresh_timeout" msgid="251734999692581852">"அமைப்புகளைப் புதுப்பிக்க முடியவில்லை"</string> diff --git a/SafetyCenter/Resources/shared_res/values-te/strings.xml b/SafetyCenter/Resources/shared_res/values-te/strings.xml index 9a5b8c611..5dc26fb81 100644 --- a/SafetyCenter/Resources/shared_res/values-te/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-te/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"పరికర సెట్టింగ్లను చెక్ చేస్తోంది…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"అంతా బాగానే ఉంది"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"సమస్యలు ఏవీ కనుగొనబడలేదు"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{చిట్కా అందుబాటులో ఉంది}other{చిట్కాలు అందుబాటులో ఉన్నాయి}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{చర్య తీసుకోబడింది}other{చర్యలు తీసుకొనబడ్డాయి}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"సెట్టింగ్లను రివ్యూ చేయండి"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"సెట్టింగ్ల లిస్ట్ను చెక్ చేయండి"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"పరికరం ప్రమాదంలో ఉండవచ్చు"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"రిస్క్లు కనుగొనబడ్డాయి"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"ఖాతా ప్రమాదంలో ఉండవచ్చు"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"ఖాతా ప్రమాదంలో ఉంది"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# అలర్ట్}other{# అలర్ట్లు}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{కింద అలర్ట్ను చూడండి}other{కింద అలర్ట్లను చూడండి}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"పేజీని తెరవడం సాధ్యపడలేదు"</string> <string name="resolving_action_error" msgid="371968886143262375">"అలర్ట్ను పరిష్కరించడం సాధ్యపడలేదు"</string> <string name="refresh_timeout" msgid="251734999692581852">"సెట్టింగ్లను రిఫ్రెష్ చేయడం సాధ్యపడలేదు"</string> diff --git a/SafetyCenter/Resources/shared_res/values-th/strings.xml b/SafetyCenter/Resources/shared_res/values-th/strings.xml index c335861e1..5ac8eac2f 100644 --- a/SafetyCenter/Resources/shared_res/values-th/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-th/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"กำลังตรวจสอบการตั้งค่าอุปกรณ์…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"ดูดีแล้ว"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"ไม่พบปัญหา"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{เคล็ดลับที่นำไปใช้ได้}other{เคล็ดลับที่นำไปใช้ได้}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{ดำเนินการแล้ว}other{ดำเนินการแล้ว}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"ตรวจสอบการตั้งค่า"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"ตรวจสอบรายการการตั้งค่า"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"อุปกรณ์อาจมีความเสี่ยง"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"พบความเสี่ยง"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"บัญชีอาจมีความเสี่ยง"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"บัญชีมีความเสี่ยง"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{การแจ้งเตือน # รายการ}other{การแจ้งเตือน # รายการ}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{ดูการแจ้งเตือนด้านล่าง}other{ดูการแจ้งเตือนด้านล่าง}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"เปิดหน้าไม่ได้"</string> <string name="resolving_action_error" msgid="371968886143262375">"แก้ไขการแจ้งเตือนไม่ได้"</string> <string name="refresh_timeout" msgid="251734999692581852">"รีเฟรชการตั้งค่าไม่ได้"</string> diff --git a/SafetyCenter/Resources/shared_res/values-tl/strings.xml b/SafetyCenter/Resources/shared_res/values-tl/strings.xml index ff063018c..9426dd435 100644 --- a/SafetyCenter/Resources/shared_res/values-tl/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-tl/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Tinitingnan ang mga setting ng device…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Mukhang ayos"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Walang nakitang problema"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{May available na tip}one{May mga available na tip}other{May mga available na tip}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Ginawang pagkilos}one{Mga ginawang pagkilos}other{Mga ginawang pagkilos}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Suriin ang mga setting"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Tingnan ang listahan ng mga setting"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Posibleng nanganganib ang device"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"May nakitang mga panganib"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Posibleng nanganganib ang account"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Nanganganib ang account"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# alerto}one{# alerto}other{# na alerto}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Tingnan ang alerto sa ibaba}one{Tingnan ang mga alerto sa ibaba}other{Tingnan ang mga alerto sa ibaba}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Hindi mabuksan ang page"</string> <string name="resolving_action_error" msgid="371968886143262375">"Hindi ma-resolve ang alerto"</string> <string name="refresh_timeout" msgid="251734999692581852">"Hindi ma-refresh ang mga setting"</string> diff --git a/SafetyCenter/Resources/shared_res/values-tr/strings.xml b/SafetyCenter/Resources/shared_res/values-tr/strings.xml index 4a629292a..55693a94b 100644 --- a/SafetyCenter/Resources/shared_res/values-tr/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-tr/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Cihaz ayarları kontrol ediliyor…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"İyi görünüyor"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Sorun bulunmadı"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{İpucu mevcut}other{İpuçları mevcut}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Gerçekleştirilen işlem}other{Gerçekleştirilen işlemler}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Ayarları inceleyin"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Ayarlar listesini kontrol edin"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Cihaz risk altında olabilir"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Risk bulundu"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Hesap risk altında olabilir"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Hesap risk altında"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# uyarı}other{# uyarı}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Aşağıdaki uyarıya bakın}other{Aşağıdaki uyarılara bakın}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Sayfa açılamadı"</string> <string name="resolving_action_error" msgid="371968886143262375">"Uyarı sonlandırılamadı"</string> <string name="refresh_timeout" msgid="251734999692581852">"Ayarlar yenilenemedi"</string> diff --git a/SafetyCenter/Resources/shared_res/values-uk/strings.xml b/SafetyCenter/Resources/shared_res/values-uk/strings.xml index fb74a0184..8a9ef7221 100644 --- a/SafetyCenter/Resources/shared_res/values-uk/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-uk/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Перевіряємо налаштування пристрою…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Усе добре"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Проблем не знайдено"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Є порада}one{Є поради}few{Є поради}many{Є поради}other{Є поради}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Вжито захід}one{Вжито заходів}few{Вжито заходів}many{Вжито заходів}other{Вжито заходів}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Перевірте налаштування"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Перегляньте список налаштувань"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Можливо, пристрій під загрозою"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Виявлено загрози безпеці"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Можлива загроза обліковому запису"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Обліковий запис під загрозою"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# сповіщення}one{# сповіщення}few{# сповіщення}many{# сповіщень}other{# сповіщення}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Перегляньте сповіщення нижче}one{Перегляньте сповіщення нижче}few{Перегляньте сповіщення нижче}many{Перегляньте сповіщення нижче}other{Перегляньте сповіщення нижче}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Не вдалося відкрити сторінку"</string> <string name="resolving_action_error" msgid="371968886143262375">"Не вдалося закрити сповіщення"</string> <string name="refresh_timeout" msgid="251734999692581852">"Не вдалось оновити налаштування"</string> diff --git a/SafetyCenter/Resources/shared_res/values-ur/strings.xml b/SafetyCenter/Resources/shared_res/values-ur/strings.xml index fc1215408..27cb60645 100644 --- a/SafetyCenter/Resources/shared_res/values-ur/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-ur/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"آلے کی ترتیبات چیک کی جا رہی ہے…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"ٹھیک لگ رہا ہے"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"کوئی مسئلہ نہیں پایا گيا"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{تجویز دستیاب ہے}other{تجاویز دستیاب ہیں}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{کیا گیا اقدام}other{کیے گئے اقدامات}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"ترتیبات کا جائزہ لیں"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"ترتیبات کی فہرست چیک کریں"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"آلہ خطرے میں ہو سکتا ہے"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"خطرات پائے گئے"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"اکاؤنٹ خطرے میں ہو سکتا ہے"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"اکاؤنٹ خطرے میں ہے"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# الرٹ}other{# الرٹس}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{ذیل میں الرٹ دیکھیں}other{ذیل میں الرٹس دیکھیں}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"صفحہ نہیں کھل سکا"</string> <string name="resolving_action_error" msgid="371968886143262375">"الرٹ حل نہیں ہو سکا"</string> <string name="refresh_timeout" msgid="251734999692581852">"ترتیبات ریفریش نہیں کی جا سکی"</string> diff --git a/SafetyCenter/Resources/shared_res/values-uz/strings.xml b/SafetyCenter/Resources/shared_res/values-uz/strings.xml index 8b42e22be..d01559ead 100644 --- a/SafetyCenter/Resources/shared_res/values-uz/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-uz/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Qurilma sozlamalari tekshirilmoqda…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Hammasi joyida"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Hech qanday muammo topilmadi"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Tavsiya bor}other{Tavsiyalar bor}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Bajarilgan amal}other{Bajarilgan amallar}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Sozlamalarni tekshirish"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Sozlamalar roʻyxatini tekshirish"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Qurilma xavf ostida boʻlishi mumkin"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Xavflar topildi"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Hisob xavf ostida shekilli"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Hisob xavf ostida"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# ta ogohlantirish}other{# ta ogohlantirish}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Ogohlantiruvni ochish}other{Ogohlantiruvlarni ochish}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Sahifa ochilmadi"</string> <string name="resolving_action_error" msgid="371968886143262375">"Ogohlantirish hal qilinmadi"</string> <string name="refresh_timeout" msgid="251734999692581852">"Sozlamalar yangilanmadi"</string> diff --git a/SafetyCenter/Resources/shared_res/values-vi/strings.xml b/SafetyCenter/Resources/shared_res/values-vi/strings.xml index e389c7c6e..fd2a35e69 100644 --- a/SafetyCenter/Resources/shared_res/values-vi/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-vi/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Đang kiểm tra chế độ cài đặt của thiết bị…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Có vẻ ổn"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Không tìm thấy vấn đề nào"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Có mẹo cho bạn}other{Có mẹo cho bạn}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Hành động đã thực hiện}other{Hành động đã thực hiện}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Xem lại các chế độ cài đặt"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Kiểm tra danh sách cài đặt"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Thiết bị có thể gặp rủi ro"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Đã phát hiện rủi ro"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"Tài khoản có thể gặp rủi ro"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"Tài khoản đang gặp rủi ro"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# cảnh báo}other{# cảnh báo}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Xem cảnh báo bên dưới}other{Xem cảnh báo bên dưới}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Không thể mở trang"</string> <string name="resolving_action_error" msgid="371968886143262375">"Không thể giải quyết vấn đề cảnh báo"</string> <string name="refresh_timeout" msgid="251734999692581852">"Không thể làm mới cài đặt"</string> diff --git a/SafetyCenter/Resources/shared_res/values-zh-rCN/strings.xml b/SafetyCenter/Resources/shared_res/values-zh-rCN/strings.xml index c63d16ea5..1ef5efa06 100644 --- a/SafetyCenter/Resources/shared_res/values-zh-rCN/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-zh-rCN/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"正在检查设备设置…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"没问题"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"未发现问题"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{有可用的提示}other{有可用的提示}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{已采取措施}other{已采取措施}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"检查设置"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"请检查设置列表"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"设备可能存在风险"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"发现风险"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"帐号可能存在风险"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"帐号存在风险"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# 条提醒}other{# 条提醒}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{请查看下方提醒}other{请查看下方提醒}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"无法打开页面"</string> <string name="resolving_action_error" msgid="371968886143262375">"无法解决提醒事项"</string> <string name="refresh_timeout" msgid="251734999692581852">"无法刷新设置"</string> diff --git a/SafetyCenter/Resources/shared_res/values-zh-rHK/strings.xml b/SafetyCenter/Resources/shared_res/values-zh-rHK/strings.xml index 1ade2db28..35db195f7 100644 --- a/SafetyCenter/Resources/shared_res/values-zh-rHK/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-zh-rHK/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"正在檢查裝置設定…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"沒有問題"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"未發現問題"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{有可用的提示}other{有可用的提示}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{已採取行動}other{已採取行動}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"檢查設定"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"查看設定清單"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"裝置可能存在風險"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"系統發現風險"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"帳戶可能面臨風險"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"裝置正面臨風險"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# 個警示}other{# 個警示}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{查看下方的警示}other{查看下方的警示}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"無法開啟頁面"</string> <string name="resolving_action_error" msgid="371968886143262375">"無法解除警示"</string> <string name="refresh_timeout" msgid="251734999692581852">"無法重新整理設定"</string> diff --git a/SafetyCenter/Resources/shared_res/values-zh-rTW/strings.xml b/SafetyCenter/Resources/shared_res/values-zh-rTW/strings.xml index 28a8217ad..500a9d4a3 100644 --- a/SafetyCenter/Resources/shared_res/values-zh-rTW/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-zh-rTW/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"正在檢查裝置設定…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"沒有問題"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"未發現問題"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{有可用的提示}other{有可用的提示}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{已採取行動}other{已採取行動}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"查看設定"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"檢查設定清單"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"裝置可能有風險"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"發現風險"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"帳戶可能面臨風險"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"帳戶目前有風險"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{# 個警示}other{# 個警示}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{請查看下方警示}other{請查看下方警示}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"無法開啟網頁"</string> <string name="resolving_action_error" msgid="371968886143262375">"無法解決警示"</string> <string name="refresh_timeout" msgid="251734999692581852">"無法重新整理設定"</string> diff --git a/SafetyCenter/Resources/shared_res/values-zu/strings.xml b/SafetyCenter/Resources/shared_res/values-zu/strings.xml index 2e73c8e68..55588c363 100644 --- a/SafetyCenter/Resources/shared_res/values-zu/strings.xml +++ b/SafetyCenter/Resources/shared_res/values-zu/strings.xml @@ -21,6 +21,8 @@ <string name="loading_summary" msgid="3740846439782713910">"Ihlola amasethingi edivayisi…"</string> <string name="overall_severity_level_ok_title" msgid="2041250138727564565">"Kubukeka kukuhle"</string> <string name="overall_severity_level_ok_summary" msgid="7219520381757200598">"Azikho izinkinga ezitholiwe"</string> + <string name="overall_severity_level_tip_summary" msgid="5582440812368113766">"{count,plural, =1{Ithiphu liyatholakala}one{Amathiphu ayatholakala}other{Amathiphu ayatholakala}}"</string> + <string name="overall_severity_level_action_taken_summary" msgid="8064091657855656545">"{count,plural, =1{Isinyathelo sithathiwe}one{Izinyathelo zithathiwe}other{Izinyathelo zithathiwe}}"</string> <string name="overall_severity_level_ok_review_title" msgid="1494321117696765360">"Buyekeza amasethingi"</string> <string name="overall_severity_level_ok_review_summary" msgid="7743619617413076275">"Hlola uhlu lwamasethingi"</string> <string name="overall_severity_level_device_recommendation_title" msgid="5250040236433061827">"Idivayisi ingaba sengozini"</string> @@ -35,7 +37,7 @@ <string name="overall_severity_level_critical_safety_warning_title" msgid="6666640109779586868">"Izingozi ezitholakele"</string> <string name="overall_severity_level_account_recommendation_title" msgid="2267542168734275090">"I-akhawunti ingaba sengozini"</string> <string name="overall_severity_level_critical_account_warning_title" msgid="4402278408972158353">"I-akhawunti isengcupheni"</string> - <string name="overall_severity_n_alerts_summary" msgid="1105615451561197136">"{count,plural, =1{Isexwayiso esi-#}one{Izexwayiso ezingu-#}other{Izexwayiso ezingu-#}}"</string> + <string name="overall_severity_n_alerts_summary" msgid="6527386677095695234">"{count,plural, =1{Bona isexwayiso ngezansi}one{Bona izexwayiso ngezansi}other{Bona izexwayiso ngezansi}}"</string> <string name="redirecting_error" msgid="8146983632878233202">"Ayikwazanga ukuvula ikhasi"</string> <string name="resolving_action_error" msgid="371968886143262375">"Ayikwazanga ukuxazulula isexwayiso"</string> <string name="refresh_timeout" msgid="251734999692581852">"Ayikwazanga ukuvuselela amasethingi"</string> diff --git a/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt b/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt index 8dc258df4..0294adec7 100644 --- a/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt +++ b/SafetyCenter/ResourcesLib/tests/java/com/android/safetycenter/resources/SafetyCenterResourcesContextTest.kt @@ -65,7 +65,8 @@ class SafetyCenterResourcesContextTest { "/apex/com.android.permission", CONFIG_NAME, 0, - false) + false + ) assertThat(safetyCenterResourcesContext.resourcesApkPkgName).isNull() assertThat(safetyCenterResourcesContext.safetyCenterConfig).isNull() assertThat(safetyCenterResourcesContext.assets).isNull() @@ -82,7 +83,8 @@ class SafetyCenterResourcesContextTest { null, CONFIG_NAME, PackageManager.MATCH_SYSTEM_ONLY, - false) + false + ) assertThat(safetyCenterResourcesContext.resourcesApkPkgName).isNull() assertThat(safetyCenterResourcesContext.safetyCenterConfig).isNull() assertThat(safetyCenterResourcesContext.assets).isNull() @@ -126,9 +128,9 @@ class SafetyCenterResourcesContextTest { val safetyCenterResourcesContext = SafetyCenterResourcesContext(context, RESOURCES_APK_ACTION, null, CONFIG_NAME, 0, true) assertThat(safetyCenterResourcesContext.getDrawableByName("valid_drawable", theme)) - .isNotNull() + .isNotNull() assertThat(safetyCenterResourcesContext.getDrawableByName("invalid_drawable", theme)) - .isNull() + .isNull() } @Test @@ -136,7 +138,7 @@ class SafetyCenterResourcesContextTest { val safetyCenterResourcesContext = SafetyCenterResourcesContext(context, RESOURCES_APK_ACTION, null, CONFIG_NAME, 0, false) assertThat(safetyCenterResourcesContext.getDrawableByName("valid_drawable", theme)) - .isNotNull() + .isNotNull() assertFailsWith(Resources.NotFoundException::class) { safetyCenterResourcesContext.getDrawableByName("invalid_drawable", theme) } diff --git a/ktfmt_includes.txt b/ktfmt_includes.txt index b929b68e7..40d8f07d9 100644 --- a/ktfmt_includes.txt +++ b/ktfmt_includes.txt @@ -1 +1,2 @@ ++SafetyCenter +tests diff --git a/service/Android.bp b/service/Android.bp index a436dca8b..1ec44beee 100644 --- a/service/Android.bp +++ b/service/Android.bp @@ -127,6 +127,12 @@ java_sdk_library { "test_com.android.permission", ], installable: true, + permitted_packages: [ + "com.android.access", + "com.android.permission", + "com.android.role", + "com.android.safetycenter", + ], } genrule { diff --git a/service/java/com/android/safetycenter/ApiLock.java b/service/java/com/android/safetycenter/ApiLock.java new file mode 100644 index 000000000..91466d3d5 --- /dev/null +++ b/service/java/com/android/safetycenter/ApiLock.java @@ -0,0 +1,35 @@ +/* + * 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. + */ + +package com.android.safetycenter; + +import static android.os.Build.VERSION_CODES.TIRAMISU; + +import androidx.annotation.RequiresApi; + +/** + * A class that is used to strongly type the {@link Object} used to synchronize the Safety Center + * APIs. + * + * <p>This lock is instantiated once by the {@link SafetyCenterService} and guards any access to the + * Safety Center mutable state. + * + * @hide + */ +@RequiresApi(TIRAMISU) +public final class ApiLock { + ApiLock() {} +} diff --git a/service/java/com/android/safetycenter/PendingIntentFactory.java b/service/java/com/android/safetycenter/PendingIntentFactory.java index 881127140..fe1e19515 100644 --- a/service/java/com/android/safetycenter/PendingIntentFactory.java +++ b/service/java/com/android/safetycenter/PendingIntentFactory.java @@ -244,7 +244,6 @@ final class PendingIntentFactory { } if (intentResolves(packageContext, intent)) { - // TODO(b/265954624): Write tests for this code path. return intent; } diff --git a/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java b/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java index e64622104..2b5a2c41e 100644 --- a/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java +++ b/service/java/com/android/safetycenter/SafetyCenterBroadcastDispatcher.java @@ -53,7 +53,7 @@ import androidx.annotation.RequiresApi; import com.android.permission.util.PackageUtils; import com.android.safetycenter.SafetyCenterConfigReader.Broadcast; -import com.android.safetycenter.data.SafetySourceDataRepository; +import com.android.safetycenter.data.SafetyCenterDataManager; import java.time.Duration; import java.util.ArrayList; @@ -76,17 +76,17 @@ final class SafetyCenterBroadcastDispatcher { @NonNull private final Context mContext; @NonNull private final SafetyCenterConfigReader mSafetyCenterConfigReader; @NonNull private final SafetyCenterRefreshTracker mSafetyCenterRefreshTracker; - @NonNull private final SafetySourceDataRepository mSafetySourceDataRepository; + @NonNull private final SafetyCenterDataManager mSafetyCenterDataManager; SafetyCenterBroadcastDispatcher( @NonNull Context context, @NonNull SafetyCenterConfigReader safetyCenterConfigReader, @NonNull SafetyCenterRefreshTracker safetyCenterRefreshTracker, - @NonNull SafetySourceDataRepository safetySourceDataRepository) { + @NonNull SafetyCenterDataManager safetyCenterDataManager) { mContext = context; mSafetyCenterConfigReader = safetyCenterConfigReader; mSafetyCenterRefreshTracker = safetyCenterRefreshTracker; - mSafetySourceDataRepository = safetySourceDataRepository; + mSafetyCenterDataManager = safetyCenterDataManager; } /** @@ -405,7 +405,7 @@ final class SafetyCenterBroadcastDispatcher { String sourceId = allSourceIds.get(i); if (pageOpenSourceIds.contains(sourceId) || flagAllowListedSourceIds.contains(sourceId) - || mSafetySourceDataRepository.getSafetySourceDataInternal( + || mSafetyCenterDataManager.getSafetySourceDataInternal( SafetySourceKey.of(sourceId, userId)) == null) { sourceIds.add(sourceId); diff --git a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java index 879a705c0..158845560 100644 --- a/service/java/com/android/safetycenter/SafetyCenterDataFactory.java +++ b/service/java/com/android/safetycenter/SafetyCenterDataFactory.java @@ -49,10 +49,7 @@ import android.util.Log; import androidx.annotation.RequiresApi; import com.android.modules.utils.build.SdkLevel; -import com.android.safetycenter.data.SafetyCenterInFlightIssueActionRepository; -import com.android.safetycenter.data.SafetyCenterIssueDismissalRepository; -import com.android.safetycenter.data.SafetyCenterIssueRepository; -import com.android.safetycenter.data.SafetySourceDataRepository; +import com.android.safetycenter.data.SafetyCenterDataManager; import com.android.safetycenter.internaldata.SafetyCenterEntryId; import com.android.safetycenter.internaldata.SafetyCenterIds; import com.android.safetycenter.internaldata.SafetyCenterIssueActionId; @@ -87,35 +84,19 @@ public final class SafetyCenterDataFactory { @NonNull private final SafetyCenterRefreshTracker mSafetyCenterRefreshTracker; @NonNull private final PendingIntentFactory mPendingIntentFactory; - @NonNull - private final SafetyCenterInFlightIssueActionRepository - mSafetyCenterInFlightIssueActionRepository; - - @NonNull - private final SafetyCenterIssueDismissalRepository mSafetyCenterIssueDismissalRepository; - - @NonNull private final SafetySourceDataRepository mSafetySourceDataRepository; - @NonNull private final SafetyCenterIssueRepository mSafetyCenterIssueRepository; + @NonNull private final SafetyCenterDataManager mSafetyCenterDataManager; SafetyCenterDataFactory( @NonNull SafetyCenterResourcesContext safetyCenterResourcesContext, @NonNull SafetyCenterConfigReader safetyCenterConfigReader, @NonNull SafetyCenterRefreshTracker safetyCenterRefreshTracker, @NonNull PendingIntentFactory pendingIntentFactory, - @NonNull - SafetyCenterInFlightIssueActionRepository - safetyCenterInFlightIssueActionRepository, - @NonNull SafetyCenterIssueDismissalRepository safetyCenterIssueDismissalRepository, - @NonNull SafetySourceDataRepository safetySourceDataRepository, - @NonNull SafetyCenterIssueRepository safetyCenterIssueRepository) { + @NonNull SafetyCenterDataManager safetyCenterDataManager) { mSafetyCenterResourcesContext = safetyCenterResourcesContext; mSafetyCenterConfigReader = safetyCenterConfigReader; mSafetyCenterRefreshTracker = safetyCenterRefreshTracker; mPendingIntentFactory = pendingIntentFactory; - mSafetyCenterInFlightIssueActionRepository = safetyCenterInFlightIssueActionRepository; - mSafetyCenterIssueDismissalRepository = safetyCenterIssueDismissalRepository; - mSafetySourceDataRepository = safetySourceDataRepository; - mSafetyCenterIssueRepository = safetyCenterIssueRepository; + mSafetyCenterDataManager = safetyCenterDataManager; } /** @@ -195,7 +176,7 @@ public final class SafetyCenterDataFactory { } List<SafetySourceIssueInfo> issuesInfo = - mSafetyCenterIssueRepository.getIssuesDedupedSortedDescFor(userProfileGroup); + mSafetyCenterDataManager.getIssuesDedupedSortedDescFor(userProfileGroup); List<SafetyCenterIssue> safetyCenterIssues = new ArrayList<>(); List<SafetyCenterIssue> safetyCenterDismissedIssues = new ArrayList<>(); @@ -211,7 +192,7 @@ public final class SafetyCenterDataFactory { issueInfo.getSafetySourcesGroup(), issueInfo.getSafetyCenterIssueKey()); - if (mSafetyCenterIssueDismissalRepository.isIssueDismissed( + if (mSafetyCenterDataManager.isIssueDismissed( issueInfo.getSafetyCenterIssueKey(), issueInfo.getSafetySourceIssue().getSeverityLevel())) { safetyCenterDismissedIssues.add(safetyCenterIssue); @@ -346,9 +327,7 @@ public final class SafetyCenterDataFactory { safetySourceIssueAction.getLabel(), requireNonNull(issueActionPendingIntent)) .setSuccessMessage(safetySourceIssueAction.getSuccessMessage()) - .setIsInFlight( - mSafetyCenterInFlightIssueActionRepository.actionIsInFlight( - safetyCenterIssueActionId)) + .setIsInFlight(mSafetyCenterDataManager.actionIsInFlight(safetyCenterIssueActionId)) .setWillResolve(safetySourceIssueAction.willResolve()) .build(); } @@ -468,7 +447,7 @@ public final class SafetyCenterDataFactory { SafetySourceKey key = toSafetySourceKey(entry.getId()); SafetySourceData safetySourceData = - mSafetySourceDataRepository.getSafetySourceDataInternal(key); + mSafetyCenterDataManager.getSafetySourceDataInternal(key); boolean hasIssues = safetySourceData != null && !safetySourceData.getIssues().isEmpty(); @@ -486,7 +465,7 @@ public final class SafetyCenterDataFactory { SafetyCenterEntry entry = entries.get(i); SafetySourceKey key = toSafetySourceKey(entry.getId()); - if (mSafetySourceDataRepository.sourceHasError(key)) { + if (mSafetyCenterDataManager.sourceHasError(key)) { errorEntries++; } } @@ -572,7 +551,7 @@ public final class SafetyCenterDataFactory { SafetySourceKey key = SafetySourceKey.of(safetySource.getId(), userId); SafetySourceStatus safetySourceStatus = getSafetySourceStatus( - mSafetySourceDataRepository.getSafetySourceDataInternal(key)); + mSafetyCenterDataManager.getSafetySourceDataInternal(key)); boolean defaultEntryDueToQuietMode = isUserManaged && !isManagedUserRunning; if (safetySourceStatus == null || defaultEntryDueToQuietMode) { int severityLevel = @@ -687,7 +666,7 @@ public final class SafetyCenterDataFactory { safetySource.getTitleForWorkResId()) : mSafetyCenterResourcesContext.getString(safetySource.getTitleResId()); CharSequence summary = - mSafetySourceDataRepository.sourceHasError( + mSafetyCenterDataManager.sourceHasError( SafetySourceKey.of(safetySource.getId(), userId)) ? getRefreshErrorString(1) : mSafetyCenterResourcesContext.getOptionalString( @@ -777,7 +756,7 @@ public final class SafetyCenterDataFactory { return; } boolean hasError = - mSafetySourceDataRepository.sourceHasError( + mSafetyCenterDataManager.sourceHasError( SafetySourceKey.of(safetySource.getId(), userId)); if (hasError) { safetyCenterOverallState.addEntryOverallSeverityLevel( @@ -800,7 +779,7 @@ public final class SafetyCenterDataFactory { SafetySourceKey key = SafetySourceKey.of(safetySource.getId(), userId); SafetySourceStatus safetySourceStatus = getSafetySourceStatus( - mSafetySourceDataRepository.getSafetySourceDataInternal(key)); + mSafetyCenterDataManager.getSafetySourceDataInternal(key)); boolean defaultEntryDueToQuietMode = isUserManaged && !isManagedUserRunning; if (safetySourceStatus != null && !defaultEntryDueToQuietMode) { PendingIntent pendingIntent = safetySourceStatus.getPendingIntent(); @@ -864,7 +843,7 @@ public final class SafetyCenterDataFactory { safetySource.getTitleForWorkResId()) : mSafetyCenterResourcesContext.getString(safetySource.getTitleResId()); CharSequence summary = - mSafetySourceDataRepository.sourceHasError( + mSafetyCenterDataManager.sourceHasError( SafetySourceKey.of(safetySource.getId(), userId)) ? getRefreshErrorString(1) : mSafetyCenterResourcesContext.getOptionalString( diff --git a/service/java/com/android/safetycenter/SafetyCenterNotificationReceiver.java b/service/java/com/android/safetycenter/SafetyCenterNotificationReceiver.java index 0cd6950f6..93b2c7966 100644 --- a/service/java/com/android/safetycenter/SafetyCenterNotificationReceiver.java +++ b/service/java/com/android/safetycenter/SafetyCenterNotificationReceiver.java @@ -30,7 +30,7 @@ import android.util.Log; import androidx.annotation.RequiresApi; import com.android.internal.annotations.GuardedBy; -import com.android.safetycenter.data.SafetyCenterIssueDismissalRepository; +import com.android.safetycenter.data.SafetyCenterDataManager; import com.android.safetycenter.internaldata.SafetyCenterIds; import com.android.safetycenter.internaldata.SafetyCenterIssueActionId; import com.android.safetycenter.internaldata.SafetyCenterIssueKey; @@ -127,21 +127,21 @@ final class SafetyCenterNotificationReceiver extends BroadcastReceiver { @GuardedBy("mApiLock") @NonNull - private final SafetyCenterIssueDismissalRepository mSafetyCenterIssueDismissalRepository; + private final SafetyCenterDataManager mSafetyCenterDataManager; @GuardedBy("mApiLock") @NonNull private final SafetyCenterDataChangeNotifier mSafetyCenterDataChangeNotifier; - @NonNull private final Object mApiLock; + @NonNull private final ApiLock mApiLock; SafetyCenterNotificationReceiver( @NonNull SafetyCenterService service, - @NonNull SafetyCenterIssueDismissalRepository safetyCenterIssueDismissalRepository, + @NonNull SafetyCenterDataManager safetyCenterDataManager, @NonNull SafetyCenterDataChangeNotifier safetyCenterDataChangeNotifier, - @NonNull Object apiLock) { + @NonNull ApiLock apiLock) { mService = service; - mSafetyCenterIssueDismissalRepository = safetyCenterIssueDismissalRepository; + mSafetyCenterDataManager = safetyCenterDataManager; mSafetyCenterDataChangeNotifier = safetyCenterDataChangeNotifier; mApiLock = apiLock; } @@ -194,7 +194,7 @@ final class SafetyCenterNotificationReceiver extends BroadcastReceiver { int userId = issueKey.getUserId(); UserProfileGroup userProfileGroup = UserProfileGroup.from(context, userId); synchronized (mApiLock) { - mSafetyCenterIssueDismissalRepository.dismissNotification(issueKey); + mSafetyCenterDataManager.dismissNotification(issueKey); mSafetyCenterDataChangeNotifier.updateDataConsumers(userProfileGroup, userId); } } diff --git a/service/java/com/android/safetycenter/SafetyCenterNotificationSender.java b/service/java/com/android/safetycenter/SafetyCenterNotificationSender.java index 3123e2d17..7ef4ec3c8 100644 --- a/service/java/com/android/safetycenter/SafetyCenterNotificationSender.java +++ b/service/java/com/android/safetycenter/SafetyCenterNotificationSender.java @@ -38,8 +38,7 @@ import android.util.Log; import androidx.annotation.RequiresApi; import com.android.modules.utils.build.SdkLevel; -import com.android.safetycenter.data.SafetyCenterIssueDismissalRepository; -import com.android.safetycenter.data.SafetyCenterIssueRepository; +import com.android.safetycenter.data.SafetyCenterDataManager; import com.android.safetycenter.internaldata.SafetyCenterIds; import com.android.safetycenter.internaldata.SafetyCenterIssueKey; @@ -96,10 +95,7 @@ final class SafetyCenterNotificationSender { @NonNull private final SafetyCenterNotificationFactory mNotificationFactory; - @NonNull - private final SafetyCenterIssueDismissalRepository mSafetyCenterIssueDismissalRepository; - - @NonNull private final SafetyCenterIssueRepository mSafetyCenterIssueRepository; + @NonNull private final SafetyCenterDataManager mSafetyCenterDataManager; private final ArrayMap<SafetyCenterIssueKey, SafetySourceIssue> mNotifiedIssues = new ArrayMap<>(); @@ -107,12 +103,10 @@ final class SafetyCenterNotificationSender { SafetyCenterNotificationSender( @NonNull Context context, @NonNull SafetyCenterNotificationFactory notificationFactory, - @NonNull SafetyCenterIssueDismissalRepository safetyCenterIssueDismissalRepository, - @NonNull SafetyCenterIssueRepository safetyCenterIssueRepository) { + @NonNull SafetyCenterDataManager safetyCenterDataManager) { mContext = context; mNotificationFactory = notificationFactory; - mSafetyCenterIssueDismissalRepository = safetyCenterIssueDismissalRepository; - mSafetyCenterIssueRepository = safetyCenterIssueRepository; + mSafetyCenterDataManager = safetyCenterDataManager; } /** Updates Safety Center notifications for the given {@link UserProfileGroup}. */ @@ -200,7 +194,7 @@ final class SafetyCenterNotificationSender { @UserIdInt int userId) { ArrayMap<SafetyCenterIssueKey, SafetySourceIssue> result = new ArrayMap<>(); List<SafetySourceIssueInfo> allIssuesInfo = - mSafetyCenterIssueRepository.getIssuesForUser(userId); + mSafetyCenterDataManager.getIssuesForUser(userId); Duration minNotificationsDelay = SafetyCenterFlags.getNotificationsMinDelay(); @@ -214,8 +208,7 @@ final class SafetyCenterNotificationSender { } // TODO(b/266680614): Notification resurfacing - Instant dismissedAt = - mSafetyCenterIssueDismissalRepository.getNotificationDismissedAt(issueKey); + Instant dismissedAt = mSafetyCenterDataManager.getNotificationDismissedAt(issueKey); if (dismissedAt != null) { continue; } @@ -224,8 +217,7 @@ final class SafetyCenterNotificationSender { // corresponding notification, but it is still necessary to check the issue dismissal // status, in addition to the notification dismissal (above) because some issues were // dismissed by an earlier version of the code which lacked this functionality. - if (mSafetyCenterIssueDismissalRepository.isIssueDismissed( - issueKey, issue.getSeverityLevel())) { + if (mSafetyCenterDataManager.isIssueDismissed(issueKey, issue.getSeverityLevel())) { continue; } @@ -236,7 +228,7 @@ final class SafetyCenterNotificationSender { result.put(issueKey, issue); } else if (behavior == NOTIFICATION_BEHAVIOR_INTERNAL_DELAYED) { Instant delayedNotificationTime = - mSafetyCenterIssueDismissalRepository + mSafetyCenterDataManager .getIssueFirstSeenAt(issueKey) .plus(minNotificationsDelay); if (Instant.now().isAfter(delayedNotificationTime)) { diff --git a/service/java/com/android/safetycenter/SafetyCenterService.java b/service/java/com/android/safetycenter/SafetyCenterService.java index e99f93e27..a3761bc12 100644 --- a/service/java/com/android/safetycenter/SafetyCenterService.java +++ b/service/java/com/android/safetycenter/SafetyCenterService.java @@ -73,14 +73,9 @@ import androidx.annotation.RequiresApi; import com.android.internal.annotations.GuardedBy; import com.android.modules.utils.BackgroundThread; -import com.android.modules.utils.build.SdkLevel; import com.android.permission.util.ForegroundThread; import com.android.permission.util.UserUtils; -import com.android.safetycenter.data.SafetyCenterInFlightIssueActionRepository; -import com.android.safetycenter.data.SafetyCenterIssueDeduplicator; -import com.android.safetycenter.data.SafetyCenterIssueDismissalRepository; -import com.android.safetycenter.data.SafetyCenterIssueRepository; -import com.android.safetycenter.data.SafetySourceDataRepository; +import com.android.safetycenter.data.SafetyCenterDataManager; import com.android.safetycenter.internaldata.SafetyCenterIds; import com.android.safetycenter.internaldata.SafetyCenterIssueActionId; import com.android.safetycenter.internaldata.SafetyCenterIssueId; @@ -110,7 +105,7 @@ public final class SafetyCenterService extends SystemService { private static final String TAG = "SafetyCenterService"; - private final Object mApiLock = new Object(); + private final ApiLock mApiLock = new ApiLock(); @GuardedBy("mApiLock") private final SafetyCenterTimeouts mSafetyCenterTimeouts = new SafetyCenterTimeouts(); @@ -127,7 +122,7 @@ public final class SafetyCenterService extends SystemService { @GuardedBy("mApiLock") @NonNull - private final SafetySourceDataRepository mSafetySourceDataRepository; + private final SafetyCenterDataManager mSafetyCenterDataManager; @GuardedBy("mApiLock") @NonNull @@ -147,25 +142,12 @@ public final class SafetyCenterService extends SystemService { @GuardedBy("mApiLock") @NonNull - private final SafetyCenterIssueRepository mSafetyCenterIssueRepository; - - @GuardedBy("mApiLock") - @NonNull - private final SafetyCenterIssueDismissalRepository mSafetyCenterIssueDismissalRepository; - - @GuardedBy("mApiLock") - @NonNull private final SafetyCenterBroadcastDispatcher mSafetyCenterBroadcastDispatcher; @GuardedBy("mApiLock") @NonNull private final SafetyCenterDataChangeNotifier mSafetyCenterDataChangeNotifier; - @GuardedBy("mApiLock") - @NonNull - private final SafetyCenterInFlightIssueActionRepository - mSafetyCenterInFlightIssueActionRepository; - @NonNull private final StatsPullAtomCallback mPullAtomCallback; private final boolean mDeviceSupportsSafetyCenter; @@ -178,38 +160,22 @@ public final class SafetyCenterService extends SystemService { mSafetyCenterConfigReader = new SafetyCenterConfigReader(mSafetyCenterResourcesContext); SafetyCenterStatsdLogger safetyCenterStatsdLogger = new SafetyCenterStatsdLogger(context, mSafetyCenterConfigReader); - mSafetyCenterInFlightIssueActionRepository = - new SafetyCenterInFlightIssueActionRepository(safetyCenterStatsdLogger); mSafetyCenterRefreshTracker = new SafetyCenterRefreshTracker(safetyCenterStatsdLogger); - mSafetyCenterIssueDismissalRepository = - new SafetyCenterIssueDismissalRepository(mApiLock, mSafetyCenterConfigReader); mPendingIntentFactory = new PendingIntentFactory(context, mSafetyCenterResourcesContext); - mSafetySourceDataRepository = - new SafetySourceDataRepository( + mSafetyCenterDataManager = + new SafetyCenterDataManager( context, mSafetyCenterConfigReader, mSafetyCenterRefreshTracker, - mSafetyCenterInFlightIssueActionRepository, - mSafetyCenterIssueDismissalRepository); - mSafetyCenterIssueRepository = - new SafetyCenterIssueRepository( - context, - mSafetySourceDataRepository, - mSafetyCenterConfigReader, - SdkLevel.isAtLeastU() - ? new SafetyCenterIssueDeduplicator( - mSafetyCenterIssueDismissalRepository) - : null); + safetyCenterStatsdLogger, + mApiLock); mSafetyCenterDataFactory = new SafetyCenterDataFactory( mSafetyCenterResourcesContext, mSafetyCenterConfigReader, mSafetyCenterRefreshTracker, mPendingIntentFactory, - mSafetyCenterInFlightIssueActionRepository, - mSafetyCenterIssueDismissalRepository, - mSafetySourceDataRepository, - mSafetyCenterIssueRepository); + mSafetyCenterDataManager); mSafetyCenterListeners = new SafetyCenterListeners(mSafetyCenterDataFactory); mNotificationSender = new SafetyCenterNotificationSender( @@ -218,24 +184,21 @@ public final class SafetyCenterService extends SystemService { context, new SafetyCenterNotificationChannels( mSafetyCenterResourcesContext)), - mSafetyCenterIssueDismissalRepository, - mSafetyCenterIssueRepository); + mSafetyCenterDataManager); mSafetyCenterBroadcastDispatcher = new SafetyCenterBroadcastDispatcher( context, mSafetyCenterConfigReader, mSafetyCenterRefreshTracker, - mSafetySourceDataRepository); + mSafetyCenterDataManager); mPullAtomCallback = new SafetyCenterPullAtomCallback( context, mApiLock, safetyCenterStatsdLogger, mSafetyCenterConfigReader, - mSafetySourceDataRepository, mSafetyCenterDataFactory, - mSafetyCenterIssueDismissalRepository, - mSafetyCenterIssueRepository); + mSafetyCenterDataManager); mSafetyCenterDataChangeNotifier = new SafetyCenterDataChangeNotifier(mNotificationSender, mSafetyCenterListeners); mDeviceSupportsSafetyCenter = @@ -256,11 +219,11 @@ public final class SafetyCenterService extends SystemService { synchronized (mApiLock) { mConfigAvailable = mSafetyCenterConfigReader.loadConfig(); if (mConfigAvailable) { - mSafetyCenterIssueDismissalRepository.loadStateFromFile(); + mSafetyCenterDataManager.loadPersistableDataStateFromFile(); new UserBroadcastReceiver().register(getContext()); new SafetyCenterNotificationReceiver( this, - mSafetyCenterIssueDismissalRepository, + mSafetyCenterDataManager, mSafetyCenterDataChangeNotifier, mApiLock) .register(getContext()); @@ -325,10 +288,9 @@ public final class SafetyCenterService extends SystemService { UserProfileGroup userProfileGroup = UserProfileGroup.from(getContext(), userId); synchronized (mApiLock) { boolean hasUpdate = - mSafetySourceDataRepository.setSafetySourceData( + mSafetyCenterDataManager.setSafetySourceData( safetySourceData, safetySourceId, safetyEvent, packageName, userId); if (hasUpdate) { - mSafetyCenterIssueRepository.updateIssues(userId); mSafetyCenterDataChangeNotifier.updateDataConsumers(userProfileGroup, userId); } } @@ -352,7 +314,7 @@ public final class SafetyCenterService extends SystemService { } synchronized (mApiLock) { - return mSafetySourceDataRepository.getSafetySourceData( + return mSafetyCenterDataManager.getSafetySourceData( safetySourceId, packageName, userId); } } @@ -378,7 +340,7 @@ public final class SafetyCenterService extends SystemService { UserProfileGroup userProfileGroup = UserProfileGroup.from(getContext(), userId); synchronized (mApiLock) { boolean hasUpdate = - mSafetySourceDataRepository.reportSafetySourceError( + mSafetyCenterDataManager.reportSafetySourceError( errorDetails, safetySourceId, packageName, userId); SafetyCenterErrorDetails safetyCenterErrorDetails = null; if (hasUpdate @@ -390,7 +352,6 @@ public final class SafetyCenterService extends SystemService { "resolving_action_error")); } if (hasUpdate) { - mSafetyCenterIssueRepository.updateIssues(userId); mSafetyCenterDataChangeNotifier.updateDataConsumers(userProfileGroup, userId); } if (safetyCenterErrorDetails != null) { @@ -533,7 +494,7 @@ public final class SafetyCenterService extends SystemService { "dismissSafetyCenterIssue", userProfileGroup, safetyCenterIssueKey.getUserId()); synchronized (mApiLock) { SafetySourceIssue safetySourceIssue = - mSafetySourceDataRepository.getSafetySourceIssue(safetyCenterIssueKey); + mSafetyCenterDataManager.getSafetySourceIssue(safetyCenterIssueKey); if (safetySourceIssue == null) { Log.w( TAG, @@ -543,7 +504,7 @@ public final class SafetyCenterService extends SystemService { // button multiple times in a row. return; } - mSafetyCenterIssueDismissalRepository.dismissIssue(safetyCenterIssueKey); + mSafetyCenterDataManager.dismissSafetyCenterIssue(safetyCenterIssueKey); PendingIntent onDismissPendingIntent = safetySourceIssue.getOnDismissPendingIntent(); if (onDismissPendingIntent != null @@ -558,7 +519,6 @@ public final class SafetyCenterService extends SystemService { // the dismissal PendingIntent, since SafetyCenter won't surface this warning // anymore. } - mSafetyCenterIssueRepository.updateIssues(userId); mSafetyCenterDataChangeNotifier.updateDataConsumers(userProfileGroup, userId); } } @@ -786,14 +746,8 @@ public final class SafetyCenterService extends SystemService { if (all || subjects.contains("config")) { mSafetyCenterConfigReader.dump(fout); } - if (all || subjects.contains("repository")) { - mSafetySourceDataRepository.dump(fout); - } - if (all || subjects.contains("issues")) { - mSafetyCenterIssueRepository.dump(fout); - } - if (all || subjects.contains("dismissals")) { - mSafetyCenterIssueDismissalRepository.dump(fd, fout); + if (all || subjects.contains("data")) { + mSafetyCenterDataManager.dump(fd, fout); } if (all || subjects.contains("refresh")) { mSafetyCenterRefreshTracker.dump(fout); @@ -807,9 +761,6 @@ public final class SafetyCenterService extends SystemService { if (all || subjects.contains("notifications")) { mNotificationSender.dump(fout); } - if (all || subjects.contains("inflight")) { - mSafetyCenterInFlightIssueActionRepository.dump(fout); - } } } @@ -919,10 +870,9 @@ public final class SafetyCenterService extends SystemService { SafetyCenterFlags.getShowErrorEntriesOnTimeout(); if (showErrorEntriesOnTimeout) { for (int i = 0; i < stillInFlight.size(); i++) { - mSafetySourceDataRepository.setSafetySourceError(stillInFlight.valueAt(i)); + mSafetyCenterDataManager.setSafetySourceError(stillInFlight.valueAt(i)); } } - mSafetyCenterIssueRepository.updateIssues(mUserProfileGroup); mSafetyCenterDataChangeNotifier.updateDataConsumers(mUserProfileGroup); if (!showErrorEntriesOnTimeout) { mSafetyCenterListeners.deliverErrorForUserProfileGroup( @@ -968,14 +918,13 @@ public final class SafetyCenterService extends SystemService { synchronized (mApiLock) { mSafetyCenterTimeouts.remove(this); SafetySourceIssue safetySourceIssue = - mSafetySourceDataRepository.getSafetySourceIssue( + mSafetyCenterDataManager.getSafetySourceIssue( mSafetyCenterIssueActionId.getSafetyCenterIssueKey()); boolean safetyCenterDataHasChanged = - mSafetyCenterInFlightIssueActionRepository - .unmarkSafetyCenterIssueActionInFlight( - mSafetyCenterIssueActionId, - safetySourceIssue, - SAFETY_CENTER_SYSTEM_EVENT_REPORTED__RESULT__TIMEOUT); + mSafetyCenterDataManager.unmarkSafetyCenterIssueActionInFlight( + mSafetyCenterIssueActionId, + safetySourceIssue, + SAFETY_CENTER_SYSTEM_EVENT_REPORTED__RESULT__TIMEOUT); if (!safetyCenterDataHasChanged) { return; } @@ -1064,10 +1013,7 @@ public final class SafetyCenterService extends SystemService { mSafetyCenterRefreshTracker.clearRefreshForUser(userId); if (clearDataPermanently) { - mSafetySourceDataRepository.clearForUser(userId); - mSafetyCenterInFlightIssueActionRepository.clearForUser(userId); - mSafetyCenterIssueDismissalRepository.clearForUser(userId); - mSafetyCenterIssueRepository.updateIssues(userId); + mSafetyCenterDataManager.clearForUser(userId); mSafetyCenterDataChangeNotifier.updateDataConsumers(userProfileGroup, userId); } else { mSafetyCenterListeners.deliverDataForUserProfileGroup(userProfileGroup); @@ -1086,7 +1032,7 @@ public final class SafetyCenterService extends SystemService { @Nullable List<String> selectedSafetySourceIds) { UserProfileGroup userProfileGroup = UserProfileGroup.from(getContext(), userId); synchronized (mApiLock) { - mSafetySourceDataRepository.clearSafetySourceErrors(userProfileGroup); + mSafetyCenterDataManager.clearSafetySourceErrors(userProfileGroup); String refreshBroadcastId = mSafetyCenterBroadcastDispatcher.sendRefreshSafetySources( @@ -1126,8 +1072,7 @@ public final class SafetyCenterService extends SystemService { @Nullable Integer taskId) { synchronized (mApiLock) { SafetySourceIssue.Action safetySourceIssueAction = - mSafetySourceDataRepository.getSafetySourceIssueAction( - safetyCenterIssueActionId); + mSafetyCenterDataManager.getSafetySourceIssueAction(safetyCenterIssueActionId); if (safetySourceIssueAction == null) { Log.w( @@ -1161,7 +1106,7 @@ public final class SafetyCenterService extends SystemService { return; } if (safetySourceIssueAction.willResolve()) { - mSafetyCenterInFlightIssueActionRepository.markSafetyCenterIssueActionInFlight( + mSafetyCenterDataManager.markSafetyCenterIssueActionInFlight( safetyCenterIssueActionId); ResolvingActionTimeout resolvingActionTimeout = new ResolvingActionTimeout(safetyCenterIssueActionId, userProfileGroup); @@ -1184,13 +1129,10 @@ public final class SafetyCenterService extends SystemService { @GuardedBy("mApiLock") private void clearDataLocked() { - mSafetySourceDataRepository.clear(); - mSafetyCenterInFlightIssueActionRepository.clear(); - mSafetyCenterIssueDismissalRepository.clear(); + mSafetyCenterDataManager.clear(); mSafetyCenterTimeouts.clear(); mSafetyCenterRefreshTracker.clearRefresh(); mNotificationSender.cancelAllNotifications(); - mSafetyCenterIssueRepository.clear(); } /** Dumps state for debugging purposes. */ diff --git a/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java b/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java new file mode 100644 index 000000000..9d9febaec --- /dev/null +++ b/service/java/com/android/safetycenter/data/SafetyCenterDataManager.java @@ -0,0 +1,422 @@ +/* + * 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. + */ + +package com.android.safetycenter.data; + +import static android.os.Build.VERSION_CODES.TIRAMISU; + +import android.annotation.NonNull; +import android.annotation.Nullable; +import android.annotation.UserIdInt; +import android.content.Context; +import android.safetycenter.SafetyCenterData; +import android.safetycenter.SafetyEvent; +import android.safetycenter.SafetySourceData; +import android.safetycenter.SafetySourceErrorDetails; +import android.safetycenter.SafetySourceIssue; +import android.safetycenter.config.SafetyCenterConfig; + +import androidx.annotation.RequiresApi; + +import com.android.modules.utils.build.SdkLevel; +import com.android.safetycenter.ApiLock; +import com.android.safetycenter.SafetyCenterConfigReader; +import com.android.safetycenter.SafetyCenterRefreshTracker; +import com.android.safetycenter.SafetySourceIssueInfo; +import com.android.safetycenter.SafetySourceKey; +import com.android.safetycenter.UserProfileGroup; +import com.android.safetycenter.internaldata.SafetyCenterIssueActionId; +import com.android.safetycenter.internaldata.SafetyCenterIssueKey; +import com.android.safetycenter.logging.SafetyCenterStatsdLogger; + +import java.io.FileDescriptor; +import java.io.PrintWriter; +import java.time.Instant; +import java.util.List; + +import javax.annotation.concurrent.NotThreadSafe; + +/** + * Manages updates and access to all data in the data subpackage. + * + * <p>Data entails what safety sources reported to safety center, including issues, entries, + * dismissals, errors, in-flight actions, etc. + * + * @hide + */ +@RequiresApi(TIRAMISU) +@NotThreadSafe +public final class SafetyCenterDataManager { + + @NonNull private final SafetySourceDataRepository mSafetySourceDataRepository; + + @NonNull + private final SafetyCenterIssueDismissalRepository mSafetyCenterIssueDismissalRepository; + + @NonNull private final SafetyCenterIssueRepository mSafetyCenterIssueRepository; + + @NonNull + private final SafetyCenterInFlightIssueActionRepository + mSafetyCenterInFlightIssueActionRepository; + + /** Creates an instance of {@link SafetyCenterDataManager}. */ + public SafetyCenterDataManager( + @NonNull Context context, + @NonNull SafetyCenterConfigReader safetyCenterConfigReader, + @NonNull SafetyCenterRefreshTracker safetyCenterRefreshTracker, + @NonNull SafetyCenterStatsdLogger safetyCenterStatsdLogger, + @NonNull ApiLock apiLock) { + mSafetyCenterInFlightIssueActionRepository = + new SafetyCenterInFlightIssueActionRepository(safetyCenterStatsdLogger); + mSafetyCenterIssueDismissalRepository = + new SafetyCenterIssueDismissalRepository(apiLock, safetyCenterConfigReader); + mSafetySourceDataRepository = + new SafetySourceDataRepository( + context, + safetyCenterConfigReader, + safetyCenterRefreshTracker, + mSafetyCenterInFlightIssueActionRepository, + mSafetyCenterIssueDismissalRepository); + mSafetyCenterIssueRepository = + new SafetyCenterIssueRepository( + context, + mSafetySourceDataRepository, + safetyCenterConfigReader, + SdkLevel.isAtLeastU() + ? new SafetyCenterIssueDeduplicator( + mSafetyCenterIssueDismissalRepository) + : null); + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////// STATE UPDATES //////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Sets the latest {@link SafetySourceData} for the given {@code safetySourceId}, {@link + * SafetyEvent}, {@code packageName} and {@code userId}, and returns whether there was a change + * to the underlying {@link SafetyCenterData}. + * + * <p>Throws if the request is invalid based on the {@link SafetyCenterConfig}: the given {@code + * safetySourceId}, {@code packageName} and/or {@code userId} are unexpected; or the {@link + * SafetySourceData} does not respect all constraints defined in the config. + * + * <p>Setting a {@code null} {@link SafetySourceData} evicts the current {@link + * SafetySourceData} entry and clears the {@link SafetyCenterIssueDismissalRepository} for the + * source. + * + * <p>This method may modify the {@link SafetyCenterIssueDismissalRepository}. + */ + public boolean setSafetySourceData( + @Nullable SafetySourceData safetySourceData, + @NonNull String safetySourceId, + @NonNull SafetyEvent safetyEvent, + @NonNull String packageName, + @UserIdInt int userId) { + boolean dataUpdated = + mSafetySourceDataRepository.setSafetySourceData( + safetySourceData, safetySourceId, safetyEvent, packageName, userId); + if (dataUpdated) { + mSafetyCenterIssueRepository.updateIssues(userId); + } + + return dataUpdated; + } + + /** + * Marks the issue with the given key as dismissed. + * + * <p>That issue's notification (if any) is also marked as dismissed. + */ + public void dismissSafetyCenterIssue(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + mSafetyCenterIssueDismissalRepository.dismissIssue(safetyCenterIssueKey); + mSafetyCenterIssueRepository.updateIssues(safetyCenterIssueKey.getUserId()); + } + + /** + * Marks the notification (if any) of the issue with the given key as dismissed. + * + * <p>The issue itself is <strong>not</strong> marked as dismissed and its warning card can + * still appear in the Safety Center UI. + */ + public void dismissNotification(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + mSafetyCenterIssueDismissalRepository.dismissNotification(safetyCenterIssueKey); + mSafetyCenterIssueRepository.updateIssues(safetyCenterIssueKey.getUserId()); + } + + /** + * Reports the given {@link SafetySourceErrorDetails} for the given {@code safetySourceId} and + * {@code userId}, and returns whether there was a change to the underlying {@link + * SafetyCenterData}. + * + * <p>Throws if the request is invalid based on the {@link SafetyCenterConfig}: the given {@code + * safetySourceId}, {@code packageName} and/or {@code userId} are unexpected. + */ + public boolean reportSafetySourceError( + @NonNull SafetySourceErrorDetails safetySourceErrorDetails, + @NonNull String safetySourceId, + @NonNull String packageName, + @UserIdInt int userId) { + boolean dataUpdated = + mSafetySourceDataRepository.reportSafetySourceError( + safetySourceErrorDetails, safetySourceId, packageName, userId); + if (dataUpdated) { + mSafetyCenterIssueRepository.updateIssues(userId); + } + + return dataUpdated; + } + + /** + * Marks the given {@link SafetySourceKey} as having errored-out and returns whether there was a + * change to the underlying {@link SafetyCenterData}. + */ + public boolean setSafetySourceError(@NonNull SafetySourceKey safetySourceKey) { + boolean dataUpdated = mSafetySourceDataRepository.setSafetySourceError(safetySourceKey); + if (dataUpdated) { + mSafetyCenterIssueRepository.updateIssues(safetySourceKey.getUserId()); + } + + return dataUpdated; + } + + /** + * Clears all safety source errors received so far for the given {@link UserProfileGroup}, this + * is useful e.g. when starting a new broadcast. + */ + public void clearSafetySourceErrors(@NonNull UserProfileGroup userProfileGroup) { + mSafetySourceDataRepository.clearSafetySourceErrors(userProfileGroup); + mSafetyCenterIssueRepository.updateIssues(userProfileGroup); + } + + /** Marks the given {@link SafetyCenterIssueActionId} as in-flight. */ + public void markSafetyCenterIssueActionInFlight( + @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { + mSafetyCenterInFlightIssueActionRepository.markSafetyCenterIssueActionInFlight( + safetyCenterIssueActionId); + mSafetyCenterIssueRepository.updateIssues( + safetyCenterIssueActionId.getSafetyCenterIssueKey().getUserId()); + } + + /** + * Unmarks the given {@link SafetyCenterIssueActionId} as in-flight, logs that event to statsd + * with the given {@code result} value, and returns {@code true} if the underlying {@link + * SafetyCenterData} changed. + */ + public boolean unmarkSafetyCenterIssueActionInFlight( + @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId, + @NonNull SafetySourceIssue safetySourceIssue, + @SafetyCenterStatsdLogger.SystemEventResult int result) { + boolean dataUpdated = + mSafetyCenterInFlightIssueActionRepository.unmarkSafetyCenterIssueActionInFlight( + safetyCenterIssueActionId, safetySourceIssue, result); + if (dataUpdated) { + mSafetyCenterIssueRepository.updateIssues( + safetyCenterIssueActionId.getSafetyCenterIssueKey().getUserId()); + } + + return dataUpdated; + } + + /** Clears all data related to the given {@code userId}. */ + public void clearForUser(@UserIdInt int userId) { + mSafetySourceDataRepository.clearForUser(userId); + mSafetyCenterInFlightIssueActionRepository.clearForUser(userId); + mSafetyCenterIssueDismissalRepository.clearForUser(userId); + mSafetyCenterIssueRepository.clearForUser(userId); + } + + /** Clears all stored data. */ + public void clear() { + mSafetySourceDataRepository.clear(); + mSafetyCenterIssueDismissalRepository.clear(); + mSafetyCenterInFlightIssueActionRepository.clear(); + mSafetyCenterIssueRepository.clear(); + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////// SafetyCenterIssueDismissalRepository ///////////////////////////////// + /////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Returns {@code true} if the issue with the given key and severity level is currently + * dismissed. + * + * <p>An issue which is dismissed at one time may become "un-dismissed" later, after the + * resurface delay (which depends on severity level) has elapsed. + * + * <p>If the given issue key is not found in the repository this method returns {@code false}. + */ + public boolean isIssueDismissed( + @NonNull SafetyCenterIssueKey safetyCenterIssueKey, + @SafetySourceData.SeverityLevel int safetySourceIssueSeverityLevel) { + return mSafetyCenterIssueDismissalRepository.isIssueDismissed( + safetyCenterIssueKey, safetySourceIssueSeverityLevel); + } + + /** + * Returns the {@link Instant} when the notification for the issue with the given key was last + * dismissed. + */ + @Nullable + public Instant getNotificationDismissedAt(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + return mSafetyCenterIssueDismissalRepository.getNotificationDismissedAt( + safetyCenterIssueKey); + } + + /** + * Load available persisted data state into memory. + * + * <p>Note: only some pieces of the data can be persisted, the rest won't be loaded. + */ + public void loadPersistableDataStateFromFile() { + mSafetyCenterIssueDismissalRepository.loadStateFromFile(); + } + + /** + * Returns the {@link Instant} when the issue with the given key was first reported to Safety + * Center. + */ + @Nullable + public Instant getIssueFirstSeenAt(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + return mSafetyCenterIssueDismissalRepository.getIssueFirstSeenAt(safetyCenterIssueKey); + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////// SafetyCenterIssueRepository ///////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Fetches a list of issues related to the given {@link UserProfileGroup}. + * + * <p>Issues in the list are sorted in descending order and deduplicated (if applicable, only on + * Android U+). + * + * <p>Only includes issues related to active/running {@code userId}s in the given {@link + * UserProfileGroup}. + */ + @NonNull + public List<SafetySourceIssueInfo> getIssuesDedupedSortedDescFor( + @NonNull UserProfileGroup userProfileGroup) { + return mSafetyCenterIssueRepository.getIssuesDedupedSortedDescFor(userProfileGroup); + } + + /** + * Counts the total number of issues from loggable sources, in the given {@link + * UserProfileGroup}. + * + * <p>Only includes issues related to active/running {@code userId}s in the given {@link + * UserProfileGroup}. + */ + public int countLoggableIssuesFor(@NonNull UserProfileGroup userProfileGroup) { + return mSafetyCenterIssueRepository.countLoggableIssuesFor(userProfileGroup); + } + + /** Gets an unmodifiable list of all issues for the given {@code userId}. */ + @NonNull + public List<SafetySourceIssueInfo> getIssuesForUser(@UserIdInt int userId) { + return mSafetyCenterIssueRepository.getIssuesForUser(userId); + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////// SafetyCenterInFlightIssueActionRepository //////////////////////////// + /////////////////////////////////////////////////////////////////////////////////////////////// + + /** Returns {@code true} if the given issue action is in flight. */ + public boolean actionIsInFlight(@NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { + return mSafetyCenterInFlightIssueActionRepository.actionIsInFlight( + safetyCenterIssueActionId); + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + ////////////////////// SafetySourceDataRepository /////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////////////////////// + + /** + * Returns the latest {@link SafetySourceData} that was set by {@link #setSafetySourceData} for + * the given {@code safetySourceId}, {@code packageName} and {@code userId}. + * + * <p>Throws if the request is invalid based on the {@link SafetyCenterConfig}: the given {@code + * safetySourceId}, {@code packageName} and/or {@code userId} are unexpected. + * + * <p>Returns {@code null} if it was never set since boot, or if the entry was evicted using + * {@link #setSafetySourceData} with a {@code null} value. + */ + @Nullable + public SafetySourceData getSafetySourceData( + @NonNull String safetySourceId, @NonNull String packageName, @UserIdInt int userId) { + return mSafetySourceDataRepository.getSafetySourceData(safetySourceId, packageName, userId); + } + + /** + * Returns the latest {@link SafetySourceData} that was set by {@link #setSafetySourceData} for + * the given {@link SafetySourceKey}. + * + * <p>This method does not perform any validation, {@link #getSafetySourceData(String, String, + * int)} should be called wherever validation is required. + * + * <p>Returns {@code null} if it was never set since boot, or if the entry was evicted using + * {@link #setSafetySourceData} with a {@code null} value. + */ + @Nullable + public SafetySourceData getSafetySourceDataInternal(@NonNull SafetySourceKey safetySourceKey) { + return mSafetySourceDataRepository.getSafetySourceDataInternal(safetySourceKey); + } + + /** Returns {@code true} if the given source has an error. */ + public boolean sourceHasError(@NonNull SafetySourceKey safetySourceKey) { + return mSafetySourceDataRepository.sourceHasError(safetySourceKey); + } + + /** + * Returns the {@link SafetySourceIssue} associated with the given {@link SafetyCenterIssueKey}. + * + * <p>Returns {@code null} if there is no such {@link SafetySourceIssue}, or if it's been + * dismissed. + */ + @Nullable + public SafetySourceIssue getSafetySourceIssue( + @NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + return mSafetySourceDataRepository.getSafetySourceIssue(safetyCenterIssueKey); + } + + /** + * Returns the {@link SafetySourceIssue.Action} associated with the given {@link + * SafetyCenterIssueActionId}. + * + * <p>Returns {@code null} if there is no associated {@link SafetySourceIssue}, or if it's been + * dismissed. + * + * <p>Returns {@code null} if the {@link SafetySourceIssue.Action} is currently in flight. + */ + @Nullable + public SafetySourceIssue.Action getSafetySourceIssueAction( + @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { + return mSafetySourceDataRepository.getSafetySourceIssueAction(safetyCenterIssueActionId); + } + + /////////////////////////////////////////////////////////////////////////////////////////////// + //////////////////////////// Other ///////////////////////////////////////////////////////// + /////////////////////////////////////////////////////////////////////////////////////////////// + + /** Dumps state for debugging purposes. */ + public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter fout) { + mSafetySourceDataRepository.dump(fout); + mSafetyCenterIssueDismissalRepository.dump(fd, fout); + mSafetyCenterInFlightIssueActionRepository.dump(fout); + mSafetyCenterIssueRepository.dump(fout); + } +} diff --git a/service/java/com/android/safetycenter/data/SafetyCenterInFlightIssueActionRepository.java b/service/java/com/android/safetycenter/data/SafetyCenterInFlightIssueActionRepository.java index 9be9ef2c3..cf5c894fa 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterInFlightIssueActionRepository.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterInFlightIssueActionRepository.java @@ -41,14 +41,10 @@ import java.util.List; import javax.annotation.concurrent.NotThreadSafe; -/** - * Maintains data about in-flight issue actions. - * - * @hide - */ +/** Maintains data about in-flight issue actions. */ @RequiresApi(TIRAMISU) @NotThreadSafe -public final class SafetyCenterInFlightIssueActionRepository { +final class SafetyCenterInFlightIssueActionRepository { private static final String TAG = "SafetyCenterInFlight"; @@ -58,13 +54,13 @@ public final class SafetyCenterInFlightIssueActionRepository { new ArrayMap<>(); /** Constructs a new instance of {@link SafetyCenterInFlightIssueActionRepository}. */ - public SafetyCenterInFlightIssueActionRepository( + SafetyCenterInFlightIssueActionRepository( @NonNull SafetyCenterStatsdLogger safetyCenterStatsdLogger) { mSafetyCenterStatsdLogger = safetyCenterStatsdLogger; } /** Marks the given {@link SafetyCenterIssueActionId} as in-flight. */ - public void markSafetyCenterIssueActionInFlight( + void markSafetyCenterIssueActionInFlight( @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { mSafetyCenterIssueActionsInFlight.put( safetyCenterIssueActionId, SystemClock.elapsedRealtime()); @@ -75,7 +71,7 @@ public final class SafetyCenterInFlightIssueActionRepository { * with the given {@code result} value, and returns {@code true} if the underlying {@link * SafetyCenterData} changed. */ - public boolean unmarkSafetyCenterIssueActionInFlight( + boolean unmarkSafetyCenterIssueActionInFlight( @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId, @NonNull SafetySourceIssue safetySourceIssue, @SafetyCenterStatsdLogger.SystemEventResult int result) { @@ -110,7 +106,7 @@ public final class SafetyCenterInFlightIssueActionRepository { } /** Returns {@code true} if the given issue action is in flight. */ - public boolean actionIsInFlight(@NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { + boolean actionIsInFlight(@NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { return mSafetyCenterIssueActionsInFlight.containsKey(safetyCenterIssueActionId); } @@ -141,7 +137,7 @@ public final class SafetyCenterInFlightIssueActionRepository { } /** Dumps in-flight action data for debugging purposes. */ - public void dump(@NonNull PrintWriter fout) { + void dump(@NonNull PrintWriter fout) { int actionInFlightCount = mSafetyCenterIssueActionsInFlight.size(); fout.println("ACTIONS IN FLIGHT (" + actionInFlightCount + ")"); for (int i = 0; i < actionInFlightCount; i++) { @@ -154,12 +150,12 @@ public final class SafetyCenterInFlightIssueActionRepository { } /** Clears all in-flight action data. */ - public void clear() { + void clear() { mSafetyCenterIssueActionsInFlight.clear(); } /** Clears in-flight action data for given {@code userId}. */ - public void clearForUser(@UserIdInt int userId) { + void clearForUser(@UserIdInt int userId) { // Loop in reverse index order to be able to remove entries while iterating. for (int i = mSafetyCenterIssueActionsInFlight.size() - 1; i >= 0; i--) { SafetyCenterIssueActionId issueActionId = mSafetyCenterIssueActionsInFlight.keyAt(i); diff --git a/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java b/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java index d9b712fdc..51b356778 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterIssueDeduplicator.java @@ -36,19 +36,15 @@ import java.util.Objects; import javax.annotation.concurrent.NotThreadSafe; -/** - * Deduplicates issues based on deduplication info provided by the source and the issue. - * - * @hide - */ +/** Deduplicates issues based on deduplication info provided by the source and the issue. */ @RequiresApi(UPSIDE_DOWN_CAKE) @NotThreadSafe -public final class SafetyCenterIssueDeduplicator { +final class SafetyCenterIssueDeduplicator { @NonNull private final SafetyCenterIssueDismissalRepository mSafetyCenterIssueDismissalRepository; - public SafetyCenterIssueDeduplicator( + SafetyCenterIssueDeduplicator( @NonNull SafetyCenterIssueDismissalRepository safetyCenterIssueDismissalRepository) { this.mSafetyCenterIssueDismissalRepository = safetyCenterIssueDismissalRepository; } diff --git a/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java b/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java index 88b2c67f7..d4c67f3f7 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterIssueDismissalRepository.java @@ -34,6 +34,7 @@ import android.util.Log; import androidx.annotation.RequiresApi; import com.android.modules.utils.BackgroundThread; +import com.android.safetycenter.ApiLock; import com.android.safetycenter.SafetyCenterConfigReader; import com.android.safetycenter.SafetyCenterFlags; import com.android.safetycenter.internaldata.SafetyCenterIds; @@ -65,12 +66,10 @@ import javax.annotation.concurrent.NotThreadSafe; * stored in the file. * * <p>This class isn't thread safe. Thread safety must be handled by the caller. - * - * @hide */ @RequiresApi(TIRAMISU) @NotThreadSafe -public final class SafetyCenterIssueDismissalRepository { +final class SafetyCenterIssueDismissalRepository { private static final String TAG = "SafetyCenterIssueDis"; @@ -85,15 +84,15 @@ public final class SafetyCenterIssueDismissalRepository { private final Handler mWriteHandler = BackgroundThread.getHandler(); - @NonNull private final Object mApiLock; + @NonNull private final ApiLock mApiLock; @NonNull private final SafetyCenterConfigReader mSafetyCenterConfigReader; private final ArrayMap<SafetyCenterIssueKey, IssueData> mIssues = new ArrayMap<>(); private boolean mWriteStateToFileScheduled = false; - public SafetyCenterIssueDismissalRepository( - @NonNull Object apiLock, @NonNull SafetyCenterConfigReader safetyCenterConfigReader) { + SafetyCenterIssueDismissalRepository( + @NonNull ApiLock apiLock, @NonNull SafetyCenterConfigReader safetyCenterConfigReader) { mApiLock = apiLock; mSafetyCenterConfigReader = safetyCenterConfigReader; } @@ -107,7 +106,7 @@ public final class SafetyCenterIssueDismissalRepository { * * <p>If the given issue key is not found in the repository this method returns {@code false}. */ - public boolean isIssueDismissed( + boolean isIssueDismissed( @NonNull SafetyCenterIssueKey safetyCenterIssueKey, @SafetySourceData.SeverityLevel int safetySourceIssueSeverityLevel) { IssueData issueData = getOrWarn(safetyCenterIssueKey, "checking if dismissed"); @@ -144,7 +143,7 @@ public final class SafetyCenterIssueDismissalRepository { * * <p>That issue's notification (if any) is also marked as dismissed. */ - public void dismissIssue(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + void dismissIssue(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { IssueData issueData = getOrWarn(safetyCenterIssueKey, "dismissing"); if (issueData == null) { return; @@ -162,7 +161,7 @@ public final class SafetyCenterIssueDismissalRepository { * <p>This will align dismissal state of these issues, unless issues are of different * severities, in which case they can potentially differ in resurface times. */ - public void copyDismissalData( + void copyDismissalData( @NonNull SafetyCenterIssueKey keyFrom, @NonNull SafetyCenterIssueKey keyTo) { IssueData dataFrom = getOrWarn(keyFrom, "copying dismissed data"); IssueData dataTo = getOrWarn(keyTo, "copying dismissed data"); @@ -181,7 +180,7 @@ public final class SafetyCenterIssueDismissalRepository { * <p>The issue itself is <strong>not</strong> marked as dismissed and its warning card can * still appear in the Safety Center UI. */ - public void dismissNotification(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + void dismissNotification(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { IssueData issueData = getOrWarn(safetyCenterIssueKey, "dismissing notification"); if (issueData == null) { return; @@ -195,7 +194,7 @@ public final class SafetyCenterIssueDismissalRepository { * Center. */ @Nullable - public Instant getIssueFirstSeenAt(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + Instant getIssueFirstSeenAt(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { IssueData issueData = getOrWarn(safetyCenterIssueKey, "getting first seen"); if (issueData == null) { return null; @@ -209,7 +208,7 @@ public final class SafetyCenterIssueDismissalRepository { */ // TODO(b/261429824): Handle mNotificationDismissedAt w.r.t. issue deduplication @Nullable - public Instant getNotificationDismissedAt(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + Instant getNotificationDismissedAt(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { IssueData issueData = getOrWarn(safetyCenterIssueKey, "getting notification dismissed"); if (issueData == null) { return null; @@ -308,7 +307,7 @@ public final class SafetyCenterIssueDismissalRepository { } /** Clears all the data in the repository for the given user. */ - public void clearForUser(@UserIdInt int userId) { + void clearForUser(@UserIdInt int userId) { boolean someDataChanged = false; // Loop in reverse index order to be able to remove entries while iterating. for (int i = mIssues.size() - 1; i >= 0; i--) { @@ -324,7 +323,7 @@ public final class SafetyCenterIssueDismissalRepository { } /** Dumps state for debugging purposes. */ - public void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter fout) { + void dump(@NonNull FileDescriptor fd, @NonNull PrintWriter fout) { int issueRepositoryCount = mIssues.size(); fout.println( "ISSUE DISMISSAL REPOSITORY (" @@ -394,7 +393,7 @@ public final class SafetyCenterIssueDismissalRepository { } /** Read the contents of the file and load them into this class. */ - public void loadStateFromFile() { + void loadStateFromFile() { List<PersistedSafetyCenterIssue> persistedSafetyCenterIssues = new ArrayList<>(); try { diff --git a/service/java/com/android/safetycenter/data/SafetyCenterIssueRepository.java b/service/java/com/android/safetycenter/data/SafetyCenterIssueRepository.java index 1d08601b2..55c7297f4 100644 --- a/service/java/com/android/safetycenter/data/SafetyCenterIssueRepository.java +++ b/service/java/com/android/safetycenter/data/SafetyCenterIssueRepository.java @@ -52,12 +52,10 @@ import javax.annotation.concurrent.NotThreadSafe; * Contains issue related data. * * <p>Responsible for generating lists of issues and deduplication of issues. - * - * @hide */ @RequiresApi(TIRAMISU) @NotThreadSafe -public final class SafetyCenterIssueRepository { +final class SafetyCenterIssueRepository { private static final SafetySourceIssuesInfoBySeverityDescending SAFETY_SOURCE_ISSUES_INFO_BY_SEVERITY_DESCENDING = @@ -74,7 +72,7 @@ public final class SafetyCenterIssueRepository { private final SparseArray<List<SafetySourceIssueInfo>> mUserIdToIssuesInfo = new SparseArray<>(); - public SafetyCenterIssueRepository( + SafetyCenterIssueRepository( @NonNull Context context, @NonNull SafetySourceDataRepository safetySourceDataRepository, @NonNull SafetyCenterConfigReader safetyCenterConfigReader, @@ -89,7 +87,7 @@ public final class SafetyCenterIssueRepository { * Updates the class as per the current state of issues. Should be called after any state update * that can affect issues. */ - public void updateIssues(@NonNull UserProfileGroup userProfileGroup) { + void updateIssues(@NonNull UserProfileGroup userProfileGroup) { updateIssues(userProfileGroup.getProfileParentUserId(), /* isManagedProfile= */ false); int[] managedProfileUserIds = userProfileGroup.getManagedProfilesUserIds(); @@ -102,7 +100,7 @@ public final class SafetyCenterIssueRepository { * Updates the class as per the current state of issues. Should be called after any state update * that can affect issues. */ - public void updateIssues(@UserIdInt int userId) { + void updateIssues(@UserIdInt int userId) { updateIssues(userId, UserUtils.isManagedProfile(userId, mContext)); } @@ -123,7 +121,7 @@ public final class SafetyCenterIssueRepository { * UserProfileGroup}. */ @NonNull - public List<SafetySourceIssueInfo> getIssuesDedupedSortedDescFor( + List<SafetySourceIssueInfo> getIssuesDedupedSortedDescFor( @NonNull UserProfileGroup userProfileGroup) { List<SafetySourceIssueInfo> issuesInfo = getIssuesFor(userProfileGroup); issuesInfo.sort(SAFETY_SOURCE_ISSUES_INFO_BY_SEVERITY_DESCENDING); @@ -137,7 +135,7 @@ public final class SafetyCenterIssueRepository { * <p>Only includes issues related to active/running {@code userId}s in the given {@link * UserProfileGroup}. */ - public int countLoggableIssuesFor(@NonNull UserProfileGroup userProfileGroup) { + int countLoggableIssuesFor(@NonNull UserProfileGroup userProfileGroup) { List<SafetySourceIssueInfo> relevantIssues = getIssuesFor(userProfileGroup); int issueCount = 0; for (int i = 0; i < relevantIssues.size(); i++) { @@ -151,7 +149,7 @@ public final class SafetyCenterIssueRepository { /** Gets an unmodifiable list of all issues for the given {@code userId}. */ @NonNull - public List<SafetySourceIssueInfo> getIssuesForUser(@UserIdInt int userId) { + List<SafetySourceIssueInfo> getIssuesForUser(@UserIdInt int userId) { return mUserIdToIssuesInfo.get(userId, emptyList()); } @@ -255,7 +253,7 @@ public final class SafetyCenterIssueRepository { } /** Dumps state for debugging purposes. */ - public void dump(@NonNull PrintWriter fout) { + void dump(@NonNull PrintWriter fout) { fout.println("ISSUE REPOSITORY"); for (int i = 0; i < mUserIdToIssuesInfo.size(); i++) { List<SafetySourceIssueInfo> issues = mUserIdToIssuesInfo.valueAt(i); @@ -268,7 +266,12 @@ public final class SafetyCenterIssueRepository { } /** Clears all the data from the repository. */ - public void clear() { + void clear() { mUserIdToIssuesInfo.clear(); } + + /** Clears all data related to the given {@code userId}. */ + void clearForUser(@UserIdInt int userId) { + mUserIdToIssuesInfo.delete(userId); + } } diff --git a/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java b/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java index d774eebf9..e2b2cc6a7 100644 --- a/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java +++ b/service/java/com/android/safetycenter/data/SafetySourceDataRepository.java @@ -63,12 +63,10 @@ import javax.annotation.concurrent.NotThreadSafe; * SafetySourceErrorDetails}. * * <p>This class isn't thread safe. Thread safety must be handled by the caller. - * - * @hide */ @RequiresApi(TIRAMISU) @NotThreadSafe -public final class SafetySourceDataRepository { +final class SafetySourceDataRepository { private static final String TAG = "SafetySourceDataRepo"; @@ -90,7 +88,7 @@ public final class SafetySourceDataRepository { @NonNull private final PackageManager mPackageManager; - public SafetySourceDataRepository( + SafetySourceDataRepository( @NonNull Context context, @NonNull SafetyCenterConfigReader safetyCenterConfigReader, @NonNull SafetyCenterRefreshTracker safetyCenterRefreshTracker, @@ -121,7 +119,7 @@ public final class SafetySourceDataRepository { * * <p>This method may modify the {@link SafetyCenterIssueDismissalRepository}. */ - public boolean setSafetySourceData( + boolean setSafetySourceData( @Nullable SafetySourceData safetySourceData, @NonNull String safetySourceId, @NonNull SafetyEvent safetyEvent, @@ -167,7 +165,7 @@ public final class SafetySourceDataRepository { * {@link #setSafetySourceData} with a {@code null} value. */ @Nullable - public SafetySourceData getSafetySourceData( + SafetySourceData getSafetySourceData( @NonNull String safetySourceId, @NonNull String packageName, @UserIdInt int userId) { if (!validateRequest(null, safetySourceId, packageName, userId)) { return null; @@ -186,7 +184,7 @@ public final class SafetySourceDataRepository { * {@link #setSafetySourceData} with a {@code null} value. */ @Nullable - public SafetySourceData getSafetySourceDataInternal(@NonNull SafetySourceKey safetySourceKey) { + SafetySourceData getSafetySourceDataInternal(@NonNull SafetySourceKey safetySourceKey) { return mSafetySourceDataForKey.get(safetySourceKey); } @@ -198,7 +196,7 @@ public final class SafetySourceDataRepository { * <p>Throws if the request is invalid based on the {@link SafetyCenterConfig}: the given {@code * safetySourceId}, {@code packageName} and/or {@code userId} are unexpected. */ - public boolean reportSafetySourceError( + boolean reportSafetySourceError( @NonNull SafetySourceErrorDetails safetySourceErrorDetails, @NonNull String safetySourceId, @NonNull String packageName, @@ -222,8 +220,11 @@ public final class SafetySourceDataRepository { return safetyEventChangedSafetyCenterData || safetySourceErrorChangedSafetyCenterData; } - /** Marks the given {@link SafetySourceKey} as having errored-out. */ - public boolean setSafetySourceError(@NonNull SafetySourceKey safetySourceKey) { + /** + * Marks the given {@link SafetySourceKey} as having errored-out and returns whether there was a + * change to the underlying {@link SafetyCenterData}. + */ + boolean setSafetySourceError(@NonNull SafetySourceKey safetySourceKey) { boolean removingSafetySourceDataChangedSafetyCenterData = mSafetySourceDataForKey.remove(safetySourceKey) != null; boolean addingSafetySourceErrorChangedSafetyCenterData = @@ -236,7 +237,7 @@ public final class SafetySourceDataRepository { * Clears all safety source errors received so far for the given {@link UserProfileGroup}, this * is useful e.g. when starting a new broadcast. */ - public void clearSafetySourceErrors(@NonNull UserProfileGroup userProfileGroup) { + void clearSafetySourceErrors(@NonNull UserProfileGroup userProfileGroup) { // Loop in reverse index order to be able to remove entries while iterating. for (int i = mSafetySourceErrors.size() - 1; i >= 0; i--) { SafetySourceKey sourceKey = mSafetySourceErrors.valueAt(i); @@ -253,8 +254,7 @@ public final class SafetySourceDataRepository { * dismissed. */ @Nullable - public SafetySourceIssue getSafetySourceIssue( - @NonNull SafetyCenterIssueKey safetyCenterIssueKey) { + SafetySourceIssue getSafetySourceIssue(@NonNull SafetyCenterIssueKey safetyCenterIssueKey) { SafetySourceKey key = SafetySourceKey.of( safetyCenterIssueKey.getSafetySourceId(), safetyCenterIssueKey.getUserId()); @@ -295,7 +295,7 @@ public final class SafetySourceDataRepository { * <p>Returns {@code null} if the {@link SafetySourceIssue.Action} is currently in flight. */ @Nullable - public SafetySourceIssue.Action getSafetySourceIssueAction( + SafetySourceIssue.Action getSafetySourceIssueAction( @NonNull SafetyCenterIssueActionId safetyCenterIssueActionId) { SafetySourceIssue safetySourceIssue = getSafetySourceIssue(safetyCenterIssueActionId.getSafetyCenterIssueKey()); @@ -309,7 +309,7 @@ public final class SafetySourceDataRepository { } /** Clears all {@link SafetySourceData}, errors, issues and in flight actions for all users. */ - public void clear() { + void clear() { mSafetySourceDataForKey.clear(); mSafetySourceErrors.clear(); } @@ -318,7 +318,7 @@ public final class SafetySourceDataRepository { * Clears all {@link SafetySourceData}, errors, issues and in flight actions, for the given * user. */ - public void clearForUser(@UserIdInt int userId) { + void clearForUser(@UserIdInt int userId) { // Loop in reverse index order to be able to remove entries while iterating. for (int i = mSafetySourceDataForKey.size() - 1; i >= 0; i--) { SafetySourceKey sourceKey = mSafetySourceDataForKey.keyAt(i); @@ -336,7 +336,7 @@ public final class SafetySourceDataRepository { } /** Dumps state for debugging purposes. */ - public void dump(@NonNull PrintWriter fout) { + void dump(@NonNull PrintWriter fout) { int dataCount = mSafetySourceDataForKey.size(); fout.println("SOURCE DATA (" + dataCount + ")"); for (int i = 0; i < dataCount; i++) { @@ -356,7 +356,7 @@ public final class SafetySourceDataRepository { } /** Returns {@code true} if the given source has an error. */ - public boolean sourceHasError(@NonNull SafetySourceKey safetySourceKey) { + boolean sourceHasError(@NonNull SafetySourceKey safetySourceKey) { return mSafetySourceErrors.contains(safetySourceKey); } diff --git a/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java b/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java index ed9de2369..bc520fd5c 100644 --- a/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java +++ b/service/java/com/android/safetycenter/logging/SafetyCenterPullAtomCallback.java @@ -41,15 +41,14 @@ import androidx.annotation.RequiresApi; import com.android.internal.annotations.GuardedBy; import com.android.modules.utils.build.SdkLevel; import com.android.permission.PermissionStatsLog; +import com.android.safetycenter.ApiLock; import com.android.safetycenter.SafetyCenterConfigReader; import com.android.safetycenter.SafetyCenterDataFactory; import com.android.safetycenter.SafetyCenterFlags; import com.android.safetycenter.SafetySourceKey; import com.android.safetycenter.SafetySources; import com.android.safetycenter.UserProfileGroup; -import com.android.safetycenter.data.SafetyCenterIssueDismissalRepository; -import com.android.safetycenter.data.SafetyCenterIssueRepository; -import com.android.safetycenter.data.SafetySourceDataRepository; +import com.android.safetycenter.data.SafetyCenterDataManager; import com.android.safetycenter.internaldata.SafetyCenterIssueKey; import java.util.List; @@ -70,7 +69,7 @@ public final class SafetyCenterPullAtomCallback implements StatsPullAtomCallback private static final String TAG = "SafetyCenterPullAtom"; @NonNull private final Context mContext; - @NonNull private final Object mApiLock; + @NonNull private final ApiLock mApiLock; @GuardedBy("mApiLock") @NonNull @@ -82,37 +81,25 @@ public final class SafetyCenterPullAtomCallback implements StatsPullAtomCallback @GuardedBy("mApiLock") @NonNull - private final SafetySourceDataRepository mSafetySourceDataRepository; - - @GuardedBy("mApiLock") - @NonNull private final SafetyCenterDataFactory mSafetyCenterDataFactory; @GuardedBy("mApiLock") @NonNull - private final SafetyCenterIssueDismissalRepository mSafetyCenterIssueDismissalRepository; - - @GuardedBy("mApiLock") - @NonNull - private final SafetyCenterIssueRepository mSafetyCenterIssueRepository; + private final SafetyCenterDataManager mSafetyCenterDataManager; public SafetyCenterPullAtomCallback( @NonNull Context context, - @NonNull Object apiLock, + @NonNull ApiLock apiLock, @NonNull SafetyCenterStatsdLogger safetyCenterStatsdLogger, @NonNull SafetyCenterConfigReader safetyCenterConfigReader, - @NonNull SafetySourceDataRepository safetySourceDataRepository, @NonNull SafetyCenterDataFactory safetyCenterDataFactory, - @NonNull SafetyCenterIssueDismissalRepository safetyCenterIssueDismissalRepository, - @NonNull SafetyCenterIssueRepository safetyCenterIssueRepository) { + @NonNull SafetyCenterDataManager safetyCenterDataManager) { mContext = context; mApiLock = apiLock; mSafetyCenterStatsdLogger = safetyCenterStatsdLogger; mSafetyCenterConfigReader = safetyCenterConfigReader; - mSafetySourceDataRepository = safetySourceDataRepository; mSafetyCenterDataFactory = safetyCenterDataFactory; - mSafetyCenterIssueDismissalRepository = safetyCenterIssueDismissalRepository; - mSafetyCenterIssueRepository = safetyCenterIssueRepository; + mSafetyCenterDataManager = safetyCenterDataManager; } @Override @@ -170,8 +157,7 @@ public final class SafetyCenterPullAtomCallback implements StatsPullAtomCallback return loggableData.getDismissedIssues().size(); } long openIssuesCount = loggableData.getIssues().size(); - return mSafetyCenterIssueRepository.countLoggableIssuesFor(userProfileGroup) - - openIssuesCount; + return mSafetyCenterDataManager.countLoggableIssuesFor(userProfileGroup) - openIssuesCount; } @GuardedBy("mApiLock") @@ -214,7 +200,7 @@ public final class SafetyCenterPullAtomCallback implements StatsPullAtomCallback @NonNull SafetySource safetySource, @UserIdInt int userId, boolean isUserManaged) { SafetySourceKey key = SafetySourceKey.of(safetySource.getId(), userId); SafetySourceData safetySourceData = - mSafetySourceDataRepository.getSafetySourceDataInternal(key); + mSafetyCenterDataManager.getSafetySourceDataInternal(key); SafetySourceStatus safetySourceStatus = safetySourceData == null ? null : safetySourceData.getStatus(); List<SafetySourceIssue> safetySourceIssues = @@ -236,7 +222,7 @@ public final class SafetyCenterPullAtomCallback implements StatsPullAtomCallback .setUserId(userId) .build(); - if (mSafetyCenterIssueDismissalRepository.isIssueDismissed( + if (mSafetyCenterDataManager.isIssueDismissed( safetyCenterIssueKey, safetySourceIssue.getSeverityLevel())) { dismissedIssuesCount++; } else { diff --git a/tests/cts/safetycenter/src/android/safetycenter/cts/testing/TestNotificationListener.kt b/tests/cts/safetycenter/src/android/safetycenter/cts/testing/TestNotificationListener.kt index 624ec8461..6e1f65454 100644 --- a/tests/cts/safetycenter/src/android/safetycenter/cts/testing/TestNotificationListener.kt +++ b/tests/cts/safetycenter/src/android/safetycenter/cts/testing/TestNotificationListener.kt @@ -288,7 +288,7 @@ class TestNotificationListener : NotificationListenerService() { // and that race makes tests flaky because the dismissal status of the previous // notification is not well defined. fun dumpIssueDismissalsRepositoryState(): String = - SystemUtil.runShellCommand("dumpsys safety_center dismissals") + SystemUtil.runShellCommand("dumpsys safety_center data") try { waitForWithTimeout { dumpIssueDismissalsRepositoryState() diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt index a95a28b8b..c0c26cf52 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/SafetyCenterManagerTest.kt @@ -16,7 +16,9 @@ package android.safetycenter.functional +import android.app.PendingIntent import android.content.Context +import android.content.Intent import android.os.Build import android.os.Build.VERSION_CODES.TIRAMISU import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE @@ -52,21 +54,27 @@ import android.safetycenter.SafetySourceData.SEVERITY_LEVEL_RECOMMENDATION import android.safetycenter.SafetySourceData.SEVERITY_LEVEL_UNSPECIFIED import android.safetycenter.SafetySourceErrorDetails import android.safetycenter.SafetySourceIssue +import android.safetycenter.config.SafetyCenterConfig +import android.safetycenter.config.SafetySource +import android.safetycenter.config.SafetySource.SAFETY_SOURCE_TYPE_DYNAMIC import androidx.test.core.app.ApplicationProvider.getApplicationContext import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SdkSuppress import com.android.compatibility.common.preconditions.ScreenLockHelper +import com.android.safetycenter.internaldata.SafetyCenterIds import com.android.safetycenter.resources.SafetyCenterResourcesContext import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG import com.android.safetycenter.testing.Coroutines.TIMEOUT_SHORT import com.android.safetycenter.testing.Coroutines.waitForWithTimeout import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.dismissSafetyCenterIssueWithPermission +import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.getSafetyCenterConfigWithPermission import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.getSafetyCenterDataWithPermission import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.refreshSafetySourcesWithPermission import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.reportSafetySourceErrorWithPermission import com.android.safetycenter.testing.SafetyCenterFlags import com.android.safetycenter.testing.SafetyCenterFlags.deviceSupportsSafetyCenter import com.android.safetycenter.testing.SafetyCenterTestConfigs +import com.android.safetycenter.testing.SafetyCenterTestConfigs.Companion.ACTION_TEST_ACTIVITY_EXPORTED import com.android.safetycenter.testing.SafetyCenterTestConfigs.Companion.ANDROID_LOCK_SCREEN_SOURCES_GROUP_ID import com.android.safetycenter.testing.SafetyCenterTestConfigs.Companion.DYNAMIC_ALL_OPTIONAL_ID import com.android.safetycenter.testing.SafetyCenterTestConfigs.Companion.DYNAMIC_BAREBONE_ID @@ -111,6 +119,8 @@ import com.android.safetycenter.testing.SafetySourceTestData.Companion.CRITICAL_ import com.android.safetycenter.testing.SafetySourceTestData.Companion.EVENT_SOURCE_STATE_CHANGED import com.android.safetycenter.testing.SafetySourceTestData.Companion.INFORMATION_ISSUE_ID import com.android.safetycenter.testing.SafetySourceTestData.Companion.RECOMMENDATION_ISSUE_ID +import com.android.safetycenter.testing.SettingsPackage.getSettingsPackageName +import com.android.safetycenter.testing.ShellPermissions.callWithShellPermissionIdentity import com.google.common.base.Preconditions.checkState import com.google.common.truth.Truth.assertThat import java.time.Duration @@ -795,6 +805,28 @@ class SafetyCenterManagerTest { } @Test + fun getSafetyCenterData_withoutDataImplicitIntentConfig_defaultEntryHasImplicitIntent() { + safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.implicitIntentSingleSourceConfig) + + val apiSafetyCenterData = safetyCenterManager.getSafetyCenterDataWithPermission() + + val implicitPendingIntentCreatedByCts = + PendingIntent.getActivity( + context, + 0 /* requestCode */, + Intent(ACTION_TEST_ACTIVITY_EXPORTED), + PendingIntent.FLAG_IMMUTABLE + ) + val defaultEntryPendingIntent = + apiSafetyCenterData.entriesOrGroups.firstOrNull()?.entry?.pendingIntent + val defaultEntryIntentFilterEqualsToImplicitIntent = + callWithShellPermissionIdentity("android.permission.GET_INTENT_SENDER_INTENT") { + implicitPendingIntentCreatedByCts.intentFilterEquals(defaultEntryPendingIntent) + } + assertThat(defaultEntryIntentFilterEqualsToImplicitIntent).isTrue() + } + + @Test fun getSafetyCenterData_withComplexConfigWithoutDataProvided_returnsDataFromConfig() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.complexConfig) @@ -3177,6 +3209,44 @@ class SafetyCenterManagerTest { } @Test + fun refreshSafetySources_forSettingsSources_providesDataToSafetyCenter() { + val settingsSourcesWithEntries = + safetyCenterManager.getSafetyCenterConfigWithPermission().getDynamicSettingsSources() + assumeFalse(settingsSourcesWithEntries.isEmpty()) + val listener = safetyCenterTestHelper.addListener() + + safetyCenterManager.refreshSafetySourcesWithPermission(REFRESH_REASON_RESCAN_BUTTON_CLICK) + + // Wait until some data is provided by all the Settings sources that have a user-visible + // entry. This will exclude the hidden-by-default entries (unless some data ends up being + // provided for them). + waitForWithTimeout { + val data = listener.receiveSafetyCenterData() + val entries = + data.entriesOrGroups.flatMap { + val entry = it.entry + if (entry != null) { + listOf(entry) + } else { + it.entryGroup!!.entries + } + } + val visibleSettingsEntries = + settingsSourcesWithEntries.mapNotNull { settingsSource -> + entries.find { entry -> + val entrySourceId = + SafetyCenterIds.entryIdFromString(entry.id).safetySourceId + entrySourceId == settingsSource.id + } + } + val visibleSettingEntriesHaveData = + visibleSettingsEntries.all { it.severityLevel != ENTRY_SEVERITY_LEVEL_UNKNOWN } + + visibleSettingEntriesHaveData + } + } + + @Test fun lockScreenSource_withoutReplaceLockScreenIconActionFlag_doesntReplace() { // Must have a screen lock for the icon action to be set assumeTrue(ScreenLockHelper.isDeviceSecure(context)) @@ -3219,6 +3289,18 @@ class SafetyCenterManagerTest { private fun SafetyCenterData.getGroup(groupId: String): SafetyCenterEntryGroup = entriesOrGroups.first { it.entryGroup?.id == groupId }.entryGroup!! + private fun SafetyCenterConfig?.getDynamicSettingsSources(): List<SafetySource> { + if (this == null) { + return emptyList() + } + return safetySourcesGroups + .flatMap { it.safetySources } + .filter { + it.type == SAFETY_SOURCE_TYPE_DYNAMIC && + it.packageName == context.getSettingsPackageName() + } + } + companion object { private val RESURFACE_DELAY = Duration.ofMillis(500) // Wait 1.5 times the RESURFACE_DELAY before asserting whether an issue has or has not diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt index 8f086c394..34ff5f4da 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterActivityTest.kt @@ -53,8 +53,9 @@ import com.android.safetycenter.testing.SafetySourceReceiver import com.android.safetycenter.testing.SafetySourceTestData import com.android.safetycenter.testing.SafetySourceTestData.Companion.CRITICAL_ISSUE_ID import com.android.safetycenter.testing.SafetySourceTestData.Companion.RECOMMENDATION_ISSUE_ID +import com.android.safetycenter.testing.UiTestHelper.MORE_ISSUES_LABEL import com.android.safetycenter.testing.UiTestHelper.RESCAN_BUTTON_LABEL -import com.android.safetycenter.testing.UiTestHelper.expandMoreIssuesCard +import com.android.safetycenter.testing.UiTestHelper.clickMoreIssuesCard import com.android.safetycenter.testing.UiTestHelper.resetRotation import com.android.safetycenter.testing.UiTestHelper.rotate import com.android.safetycenter.testing.UiTestHelper.setAnimationsEnabled @@ -472,6 +473,16 @@ class SafetyCenterActivityTest { } @Test + fun entryListWithSingleSource_clickingDefaultEntryImplicitIntent_redirectsToDifferentScreen() { + safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.implicitIntentSingleSourceConfig) + + context.launchSafetyCenterActivity { + waitDisplayed(By.text("OK")) { it.click() } + waitButtonDisplayed("Exit test activity") { it.click() } + } + } + + @Test fun entryListWithSingleSource_clickingTheUpdatedEntry_redirectsToDifferentScreen() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, safetySourceTestData.information) @@ -861,7 +872,7 @@ class SafetyCenterActivityTest { bundle.putBoolean(EXPAND_ISSUE_GROUP_QS_FRAGMENT_KEY, true) context.launchSafetyCenterActivity(bundle) { // Verify cards expanded - waitAllTextNotDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) waitSourceIssueDisplayed(safetySourceTestData.recommendationGeneralIssue) waitSourceIssueDisplayed(safetySourceTestData.informationIssue) @@ -886,7 +897,7 @@ class SafetyCenterActivityTest { bundle.putString(EXTRA_SAFETY_SOURCE_ISSUE_ID, CRITICAL_ISSUE_ID) context.launchSafetyCenterActivity(bundle) { waitSourceIssueDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) - waitAllTextDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueNotDisplayed(safetySourceTestData.recommendationGeneralIssue) waitSourceIssueNotDisplayed(safetySourceTestData.informationIssue) } @@ -910,7 +921,7 @@ class SafetyCenterActivityTest { bundle.putString(EXTRA_SAFETY_SOURCE_ISSUE_ID, CRITICAL_ISSUE_ID) context.launchSafetyCenterActivity(bundle) { waitSourceIssueDisplayed(safetySourceTestData.criticalRedirectingIssue) - waitAllTextDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueNotDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) waitSourceIssueNotDisplayed(safetySourceTestData.informationIssue) } @@ -935,7 +946,7 @@ class SafetyCenterActivityTest { context.launchSafetyCenterActivity(bundle) { waitSourceIssueDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) waitSourceIssueDisplayed(safetySourceTestData.recommendationGeneralIssue) - waitAllTextDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueNotDisplayed(safetySourceTestData.informationIssue) } } @@ -958,7 +969,7 @@ class SafetyCenterActivityTest { bundle.putString(EXTRA_SAFETY_SOURCE_ISSUE_ID, CRITICAL_ISSUE_ID) context.launchSafetyCenterActivity(bundle) { waitSourceIssueDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) - waitAllTextDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueNotDisplayed(safetySourceTestData.recommendationGeneralIssue) waitSourceIssueNotDisplayed(safetySourceTestData.informationIssue) } @@ -974,7 +985,7 @@ class SafetyCenterActivityTest { context.launchSafetyCenterActivity { waitSourceIssueDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) - waitAllTextNotDisplayed("See all alerts") + waitAllTextNotDisplayed(MORE_ISSUES_LABEL) } } @@ -993,7 +1004,7 @@ class SafetyCenterActivityTest { context.launchSafetyCenterActivity { waitSourceIssueDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) - waitAllTextDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueNotDisplayed(safetySourceTestData.recommendationGeneralIssue) waitSourceIssueNotDisplayed(safetySourceTestData.informationIssue) } @@ -1015,10 +1026,10 @@ class SafetyCenterActivityTest { context.launchSafetyCenterActivity { waitSourceIssueDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) - expandMoreIssuesCard() + clickMoreIssuesCard() // Verify cards expanded - waitAllTextNotDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) waitSourceIssueDisplayed(safetySourceTestData.recommendationGeneralIssue) waitSourceIssueDisplayed(safetySourceTestData.informationIssue) @@ -1039,13 +1050,13 @@ class SafetyCenterActivityTest { safetyCenterTestHelper.setData(SOURCE_ID_3, safetySourceTestData.informationWithIssue) context.launchSafetyCenterActivity { - expandMoreIssuesCard() + clickMoreIssuesCard() val uiDevice = getUiDevice() uiDevice.waitForIdle() // Verify cards initially expanded - waitAllTextNotDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) waitSourceIssueDisplayed(safetySourceTestData.recommendationGeneralIssue) waitSourceIssueDisplayed(safetySourceTestData.informationIssue) @@ -1054,7 +1065,7 @@ class SafetyCenterActivityTest { uiDevice.rotate() // Verify cards remain expanded - waitAllTextNotDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) waitSourceIssueDisplayed(safetySourceTestData.recommendationGeneralIssue) waitSourceIssueDisplayed(safetySourceTestData.informationIssue) @@ -1080,13 +1091,13 @@ class SafetyCenterActivityTest { context.launchSafetyCenterActivity(bundle) { waitSourceIssueDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) waitSourceIssueDisplayed(safetySourceTestData.recommendationGeneralIssue) - waitAllTextDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueNotDisplayed(safetySourceTestData.informationIssue) - expandMoreIssuesCard() + clickMoreIssuesCard() // Verify cards expanded - waitAllTextNotDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueDisplayed(safetySourceTestData.criticalResolvingGeneralIssue) waitSourceIssueDisplayed(safetySourceTestData.recommendationGeneralIssue) waitSourceIssueDisplayed(safetySourceTestData.informationIssue) diff --git a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt index 5f761f59c..a42deb6f7 100644 --- a/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt +++ b/tests/functional/safetycenter/singleuser/src/android/safetycenter/functional/ui/SafetyCenterSubpagesTest.kt @@ -47,7 +47,8 @@ import com.android.safetycenter.testing.SafetySourceIntentHandler.Request import com.android.safetycenter.testing.SafetySourceIntentHandler.Response import com.android.safetycenter.testing.SafetySourceReceiver import com.android.safetycenter.testing.SafetySourceTestData -import com.android.safetycenter.testing.UiTestHelper.expandMoreIssuesCard +import com.android.safetycenter.testing.UiTestHelper.MORE_ISSUES_LABEL +import com.android.safetycenter.testing.UiTestHelper.clickMoreIssuesCard import com.android.safetycenter.testing.UiTestHelper.resetRotation import com.android.safetycenter.testing.UiTestHelper.rotate import com.android.safetycenter.testing.UiTestHelper.waitAllTextDisplayed @@ -571,19 +572,135 @@ class SafetyCenterSubpagesTest { context.launchSafetyCenterActivity { openPageAndExit(context.getString(sourcesGroup.titleResId)) { waitSourceIssueDisplayed(firstSourceData.issues[0]) - waitAllTextDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueNotDisplayed(secondSourceData.issues[0]) - expandMoreIssuesCard() + clickMoreIssuesCard() waitSourceIssueDisplayed(firstSourceData.issues[0]) - waitAllTextNotDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueDisplayed(secondSourceData.issues[0]) } } } @Test + fun dismissedIssuesCard_expandWithOnlyDismissedIssues_showsAdditionalCard() { + val sourceData = safetySourceTestData.criticalWithIssueWithAttributionTitle + safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) + safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, sourceData) + val sourcesGroup = safetyCenterTestConfigs.singleSourceConfig.safetySourcesGroups.first() + val issue = sourceData.issues[0] + + context.launchSafetyCenterActivity { + openPageAndExit(context.getString(sourcesGroup.titleResId)) { + waitSourceIssueDisplayed(issue) + waitDisplayed(By.desc("Dismiss")) { it.click() } + waitAllTextDisplayed("Dismiss this alert?") + waitButtonDisplayed("Dismiss") { it.click() } + waitSourceIssueNotDisplayed(issue) + + waitDisplayed(By.text("Dismissed alerts")) { it.click() } + + waitAllTextDisplayed("Dismissed alerts") + waitSourceIssueDisplayed(issue) + } + } + } + + @Test + fun dismissedIssuesCard_collapseWithOnlyDismissedIssues_hidesAdditionalCard() { + val sourceData = safetySourceTestData.criticalWithIssueWithAttributionTitle + safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) + safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, sourceData) + val sourcesGroup = safetyCenterTestConfigs.singleSourceConfig.safetySourcesGroups.first() + val issue = sourceData.issues[0] + + context.launchSafetyCenterActivity { + openPageAndExit(context.getString(sourcesGroup.titleResId)) { + waitSourceIssueDisplayed(issue) + waitDisplayed(By.desc("Dismiss")) { it.click() } + waitAllTextDisplayed("Dismiss this alert?") + waitButtonDisplayed("Dismiss") { it.click() } + waitSourceIssueNotDisplayed(issue) + waitDisplayed(By.text("Dismissed alerts")) { it.click() } + waitSourceIssueDisplayed(issue) + + waitDisplayed(By.text("Dismissed alerts")) { it.click() } + + waitSourceIssueNotDisplayed(issue) + } + } + } + + @Test + fun moreIssuesCard_expandWithDismissedIssues_showsAdditionalCards() { + safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesInSingleGroupConfig) + + val firstSourceData = safetySourceTestData.criticalWithIssueWithAttributionTitle + val secondSourceData = safetySourceTestData.informationWithIssueWithAttributionTitle + val thirdSourceData = safetySourceTestData.informationWithIssueWithAttributionTitle + + safetyCenterTestHelper.setData(SOURCE_ID_1, firstSourceData) + safetyCenterTestHelper.setData(SOURCE_ID_2, secondSourceData) + safetyCenterTestHelper.setData(SOURCE_ID_3, thirdSourceData) + + val sourcesGroup = + safetyCenterTestConfigs.multipleSourcesInSingleGroupConfig.safetySourcesGroups.first() + val issue = firstSourceData.issues[0] + + context.launchSafetyCenterActivity { + openPageAndExit(context.getString(sourcesGroup.titleResId)) { + waitSourceIssueDisplayed(issue) + waitDisplayed(By.desc("Dismiss")) { it.click() } + waitAllTextDisplayed("Dismiss this alert?") + waitButtonDisplayed("Dismiss") { it.click() } + waitSourceIssueNotDisplayed(issue) + + clickMoreIssuesCard() + + waitAllTextDisplayed(MORE_ISSUES_LABEL) + waitAllTextDisplayed("Dismissed alerts") + waitSourceIssueDisplayed(issue) + } + } + } + + @Test + fun moreIssuesCard_collapseWithDismissedIssues_hidesAdditionalCards() { + safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.multipleSourcesInSingleGroupConfig) + + val firstSourceData = safetySourceTestData.criticalWithIssueWithAttributionTitle + val secondSourceData = safetySourceTestData.informationWithIssueWithAttributionTitle + val thirdSourceData = safetySourceTestData.informationWithIssueWithAttributionTitle + + safetyCenterTestHelper.setData(SOURCE_ID_1, firstSourceData) + safetyCenterTestHelper.setData(SOURCE_ID_2, secondSourceData) + safetyCenterTestHelper.setData(SOURCE_ID_3, thirdSourceData) + + val sourcesGroup = + safetyCenterTestConfigs.multipleSourcesInSingleGroupConfig.safetySourcesGroups.first() + val issue = firstSourceData.issues[0] + + context.launchSafetyCenterActivity { + openPageAndExit(context.getString(sourcesGroup.titleResId)) { + waitSourceIssueDisplayed(issue) + waitDisplayed(By.desc("Dismiss")) { it.click() } + waitButtonDisplayed("Dismiss") { it.click() } + waitSourceIssueNotDisplayed(issue) + clickMoreIssuesCard() + waitSourceIssueDisplayed(issue) + + clickMoreIssuesCard() + + waitAllTextDisplayed(MORE_ISSUES_LABEL) + waitAllTextNotDisplayed("Dismissed alerts") + waitSourceIssueNotDisplayed(issue) + } + } + } + + @Test fun brandChip_openSubpageFromHomepage_homepageReopensOnClick() { safetyCenterTestHelper.setConfig(safetyCenterTestConfigs.singleSourceConfig) safetyCenterTestHelper.setData(SINGLE_SOURCE_ID, safetySourceTestData.information) @@ -686,13 +803,13 @@ class SafetyCenterSubpagesTest { context.launchSafetyCenterActivity(extras) { waitSourceIssueDisplayed(firstSourceData.issues[0]) - waitAllTextDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueNotDisplayed(secondSourceData.issues[0]) - expandMoreIssuesCard() + clickMoreIssuesCard() waitSourceIssueDisplayed(firstSourceData.issues[0]) - waitAllTextNotDisplayed("See all alerts") + waitAllTextDisplayed(MORE_ISSUES_LABEL) waitSourceIssueDisplayed(secondSourceData.issues[0]) } } @@ -737,6 +854,44 @@ class SafetyCenterSubpagesTest { } } + @Test + fun settingsSearch_openWithGenericIntentExtra_showsGenericSubpage() { + val config = safetyCenterTestConfigs.multipleSourcesConfig + safetyCenterTestHelper.setConfig(config) + val sourcesGroup = config.safetySourcesGroups.first() + val source = sourcesGroup.safetySources.first() + val preferenceKey = "${source.id}_personal" + val extras = Bundle() + extras.putString(EXTRA_SETTINGS_FRAGMENT_ARGS_KEY, preferenceKey) + + context.launchSafetyCenterActivity(extras) { + waitDisplayed(By.desc(context.getString(sourcesGroup.titleResId))) + waitAllTextDisplayed( + context.getString(source.titleResId), + context.getString(source.summaryResId) + ) + } + } + + @Test + fun settingsSearch_openWithPrivacyIntentExtra_showsPrivacySubpage() { + val config = safetyCenterTestConfigs.privacySubpageConfig + val sourcesGroup = safetyCenterTestConfigs.singleSourceConfig.safetySourcesGroups.first() + val source: SafetySource = sourcesGroup.safetySources.first() + safetyCenterTestHelper.setConfig(config) + val extras = Bundle() + extras.putString(EXTRA_SETTINGS_FRAGMENT_ARGS_KEY, "privacy_camera_toggle") + + context.launchSafetyCenterActivity(extras) { + waitAllTextDisplayed( + context.getString(source.titleResId), + context.getString(source.summaryResId), + "Controls", + "Data", + ) + } + } + private fun openPageAndExit(entryPoint: String, block: () -> Unit) { val uiDevice = UiAutomatorUtils2.getUiDevice() uiDevice.waitForIdle() @@ -761,5 +916,6 @@ class SafetyCenterSubpagesTest { private const val SAFETY_SOURCE_2_SUMMARY = "Safety Source 2 Summary" private const val SAFETY_SOURCE_3_TITLE = "Safety Source 3 Title" private const val SAFETY_SOURCE_3_SUMMARY = "Safety Source 3 Summary" + private const val EXTRA_SETTINGS_FRAGMENT_ARGS_KEY = ":settings:fragment_args_key" } } diff --git a/tests/utils/safetycenter/Android.bp b/tests/utils/safetycenter/Android.bp index 66bc6dc48..1c76dc775 100644 --- a/tests/utils/safetycenter/Android.bp +++ b/tests/utils/safetycenter/Android.bp @@ -20,7 +20,7 @@ package { android_library { name: "safety-center-test-util-lib", sdk_version: "test_current", - min_sdk_version: "30", + min_sdk_version: "29", srcs: [ "java/**/*.kt", ], @@ -41,4 +41,8 @@ android_library { "test_com.android.permission", ], installable: false, + visibility: [ + "//packages/modules/Permission:__subpackages__", + "//vendor:__subpackages__", + ], } diff --git a/tests/utils/safetycenter/AndroidManifest.xml b/tests/utils/safetycenter/AndroidManifest.xml index 63eaf82bf..7729bff0e 100644 --- a/tests/utils/safetycenter/AndroidManifest.xml +++ b/tests/utils/safetycenter/AndroidManifest.xml @@ -16,6 +16,10 @@ --> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.safetycenter.testing"> + <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> + <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/> + <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/> + <application> <receiver android:name=".SafetySourceReceiver" android:exported="false"> @@ -38,9 +42,14 @@ <category android:name="android.intent.category.DEFAULT"/> </intent-filter> </activity> - </application> - <uses-permission android:name="android.permission.FOREGROUND_SERVICE"/> - <uses-permission android:name="android.permission.FOREGROUND_SERVICE_DATA_SYNC"/> - <uses-permission android:name="android.permission.QUERY_ALL_PACKAGES"/> + <activity-alias android:name=".TestActivityExported" + android:targetActivity=".TestActivity" + android:exported="true"> + <intent-filter> + <action android:name="com.android.safetycenter.testing.action.TEST_ACTIVITY_EXPORTED"/> + <category android:name="android.intent.category.DEFAULT"/> + </intent-filter> + </activity-alias> + </application> </manifest> diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/Coroutines.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/Coroutines.kt index 1e0959318..44c0686e2 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/Coroutines.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/Coroutines.kt @@ -16,6 +16,7 @@ package com.android.safetycenter.testing +import android.util.Log import java.time.Duration import kotlinx.coroutines.DEBUG_PROPERTY_NAME import kotlinx.coroutines.DEBUG_PROPERTY_VALUE_AUTO @@ -26,9 +27,14 @@ import kotlinx.coroutines.withTimeout import kotlinx.coroutines.withTimeoutOrNull /** A class that facilitates interacting with coroutines. */ -// TODO(b/228823159) Consolidate with other Coroutines helper functions object Coroutines { + /** A long timeout, to be used for actions that are expected to complete. */ + val TIMEOUT_LONG: Duration = Duration.ofSeconds(25) + + /** A short timeout, to be used for actions that are expected not to complete. */ + val TIMEOUT_SHORT: Duration = Duration.ofSeconds(1) + /** Shorthand for [runBlocking] combined with [withTimeout]. */ fun <T> runBlockingWithTimeout(timeout: Duration = TIMEOUT_LONG, block: suspend () -> T): T = runBlocking { @@ -50,24 +56,23 @@ object Coroutines { runBlockingWithTimeout(timeout) { waitFor(checkPeriod, condition) } } - /** Check a condition using coroutines. */ - private suspend fun waitFor(checkPeriod: Duration = CHECK_PERIOD, condition: () -> Boolean) { - while (!condition()) { - delay(checkPeriod.toMillis()) + /** Retries a [fallibleAction] until no errors are thrown or a timeout occurs. */ + fun waitForSuccessWithTimeout( + timeout: Duration = TIMEOUT_LONG, + checkPeriod: Duration = CHECK_PERIOD, + fallibleAction: () -> Unit + ) { + waitForWithTimeout(timeout, checkPeriod) { + try { + fallibleAction() + true + } catch (ex: Throwable) { + Log.w(TAG, "Encountered failure, retrying until timeout: $ex") + false + } } } - /** A medium period, to be used for conditions that are expected to change. */ - private val CHECK_PERIOD = Duration.ofMillis(250) - - /** A long timeout, to be used for actions that are expected to complete. */ - val TIMEOUT_LONG: Duration = Duration.ofSeconds(25) - - /** A short timeout, to be used for actions that are expected not to complete. */ - val TIMEOUT_SHORT: Duration = Duration.ofSeconds(1) - - private val debugMode = System.getProperty(DEBUG_PROPERTY_NAME, DEBUG_PROPERTY_VALUE_AUTO) - /** * Enables debug mode for coroutines, in particular this enables stack traces in case of * failures. @@ -80,4 +85,19 @@ object Coroutines { fun resetDebugging() { System.setProperty(DEBUG_PROPERTY_NAME, debugMode) } + + /** Check a condition using coroutines. */ + private suspend fun waitFor(checkPeriod: Duration = CHECK_PERIOD, condition: () -> Boolean) { + while (!condition()) { + delay(checkPeriod.toMillis()) + } + } + + private const val TAG: String = "Coroutines" + + /** A medium period, to be used for conditions that are expected to change. */ + private val CHECK_PERIOD: Duration = Duration.ofMillis(250) + + private val debugMode: String? = + System.getProperty(DEBUG_PROPERTY_NAME, DEBUG_PROPERTY_VALUE_AUTO) } diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterActivityLauncher.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterActivityLauncher.kt index 9b144a7a0..ded3470bd 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterActivityLauncher.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterActivityLauncher.kt @@ -24,11 +24,14 @@ import android.content.Intent.ACTION_SAFETY_CENTER import android.content.Intent.ACTION_VIEW_SAFETY_CENTER_QS import android.content.Intent.FLAG_ACTIVITY_CLEAR_TASK import android.content.Intent.FLAG_ACTIVITY_NEW_TASK +import android.os.Build.VERSION_CODES.TIRAMISU import android.os.Bundle +import androidx.annotation.RequiresApi import com.android.compatibility.common.util.UiAutomatorUtils2.getUiDevice import com.android.safetycenter.testing.ShellPermissions.callWithShellPermissionIdentity /** A class that provides a way to launch the SafetyCenter activity in tests. */ +@RequiresApi(TIRAMISU) object SafetyCenterActivityLauncher { /** diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterApisWithShellPermissions.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterApisWithShellPermissions.kt index 01a31f321..961d03c47 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterApisWithShellPermissions.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterApisWithShellPermissions.kt @@ -19,6 +19,7 @@ package com.android.safetycenter.testing import android.Manifest.permission.MANAGE_SAFETY_CENTER import android.Manifest.permission.READ_SAFETY_CENTER_STATUS import android.Manifest.permission.SEND_SAFETY_CENTER_UPDATE +import android.os.Build.VERSION_CODES.TIRAMISU import android.safetycenter.SafetyCenterData import android.safetycenter.SafetyCenterManager import android.safetycenter.SafetyCenterManager.OnSafetyCenterDataChangedListener @@ -26,6 +27,7 @@ import android.safetycenter.SafetyEvent import android.safetycenter.SafetySourceData import android.safetycenter.SafetySourceErrorDetails import android.safetycenter.config.SafetyCenterConfig +import androidx.annotation.RequiresApi import com.android.safetycenter.testing.ShellPermissions.callWithShellPermissionIdentity import java.util.concurrent.Executor @@ -33,6 +35,7 @@ import java.util.concurrent.Executor * Extension methods for [SafetyCenterManager] that delegate to the relevant implementation, but * making each call with the appropriate permission. */ +@RequiresApi(TIRAMISU) object SafetyCenterApisWithShellPermissions { /** diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterEnabledChangedReceiver.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterEnabledChangedReceiver.kt index 1722a1241..b948dc52c 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterEnabledChangedReceiver.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterEnabledChangedReceiver.kt @@ -21,7 +21,9 @@ import android.content.BroadcastReceiver import android.content.Context import android.content.Intent import android.content.IntentFilter +import android.os.Build.VERSION_CODES.TIRAMISU import android.safetycenter.SafetyCenterManager.ACTION_SAFETY_CENTER_ENABLED_CHANGED +import androidx.annotation.RequiresApi import com.android.compatibility.common.util.SystemUtil import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG import com.android.safetycenter.testing.Coroutines.runBlockingWithTimeout @@ -29,6 +31,7 @@ import com.android.safetycenter.testing.ShellPermissions.callWithShellPermission import java.time.Duration /** Broadcast receiver used for testing broadcasts sent when the SafetyCenter flag changes. */ +@RequiresApi(TIRAMISU) class SafetyCenterEnabledChangedReceiver(private val context: Context) : BroadcastReceiver() { private val mSafetySourceIntentHandler = SafetySourceIntentHandler() diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestConfigs.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestConfigs.kt index 79d0e1115..c0e3eaf09 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestConfigs.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestConfigs.kt @@ -21,6 +21,7 @@ import android.content.pm.PackageManager.GET_SIGNING_CERTIFICATES import android.content.pm.PackageManager.PackageInfoFlags import android.content.res.Resources import android.os.Build +import android.os.Build.VERSION_CODES.TIRAMISU import android.safetycenter.SafetySourceData import android.safetycenter.config.SafetyCenterConfig import android.safetycenter.config.SafetySource @@ -37,10 +38,12 @@ import java.security.MessageDigest * A class that provides [SafetyCenterConfig] objects and associated constants to facilitate setting * up safety sources for testing. */ +@RequiresApi(TIRAMISU) class SafetyCenterTestConfigs(private val context: Context) { /** The certificate hash signing the current package. */ val packageCertHash = - MessageDigest.getInstance("SHA256")!!.digest( + MessageDigest.getInstance("SHA256") + .digest( context.packageManager .getPackageInfo( context.packageName, @@ -64,6 +67,22 @@ class SafetyCenterTestConfigs(private val context: Context) { dynamicSafetySourceBuilder(SINGLE_SOURCE_ID).setIntentAction("stub").build() ) + /** + * Same as [singleSourceConfig] but with an `intentAction` that will resolve implicitly; i.e. + * the source's `packageName` does not own the activity resolved by the `intentAction`. + */ + val implicitIntentSingleSourceConfig = + singleSourceConfig( + dynamicSafetySourceBuilder(SINGLE_SOURCE_ID) + // A valid package name that is *not* CTS. + .setPackageName(context.packageManager.permissionControllerPackageName) + // Exported activity that lives in the CTS package. The PC package does + // implement this intent action so the activity has to resolve + // implicitly. + .setIntentAction(ACTION_TEST_ACTIVITY_EXPORTED) + .build() + ) + /** A simple [SafetyCenterConfig] for tests with a source max severity level of 0. */ val severityZeroConfig = singleSourceConfig( @@ -168,6 +187,18 @@ class SafetyCenterTestConfigs(private val context: Context) { ) .build() + /** A simple [SafetyCenterConfig] with multiple sources in a single [SafetySourcesGroup]. */ + val multipleSourcesInSingleGroupConfig = + SafetyCenterConfig.Builder() + .addSafetySourcesGroup( + safetySourcesGroupBuilder(MULTIPLE_SOURCES_GROUP_ID_1) + .addSafetySource(dynamicSafetySource(SOURCE_ID_1)) + .addSafetySource(dynamicSafetySource(SOURCE_ID_2)) + .addSafetySource(dynamicSafetySource(SOURCE_ID_3)) + .build() + ) + .build() + /** A simple [SafetyCenterConfig] for tests with multiple sources with deduplication info. */ val multipleSourcesWithDeduplicationInfoConfig: SafetyCenterConfig @RequiresApi(Build.VERSION_CODES.UPSIDE_DOWN_CAKE) @@ -734,10 +765,17 @@ class SafetyCenterTestConfigs(private val context: Context) { /** ID of a source not used in any config. */ const val SAMPLE_SOURCE_ID = "test_sample_source_id" - /** Activity action: Launch the [TestActivity] used to check redirects in tests. */ + /** Activity action: Launches the [TestActivity] used to check redirects in tests. */ const val ACTION_TEST_ACTIVITY = "com.android.safetycenter.testing.action.TEST_ACTIVITY" /** + * Activity action: Launches the [TestActivity] used to check redirects in tests, but with + * an exported activity alias. + */ + const val ACTION_TEST_ACTIVITY_EXPORTED = + "com.android.safetycenter.testing.action.TEST_ACTIVITY_EXPORTED" + + /** * ID of the only source provided in [singleSourceConfig], [severityZeroConfig] and * [noPageOpenConfig]. */ diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt index ea5bfe183..c603a533b 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestData.kt @@ -19,6 +19,7 @@ package com.android.safetycenter.testing import android.app.PendingIntent import android.content.Context import android.icu.text.MessageFormat +import android.os.Build.VERSION_CODES.TIRAMISU import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.os.Bundle import android.os.UserHandle @@ -62,6 +63,7 @@ import java.util.Locale * A class that provides [SafetyCenterData] objects and associated constants to facilitate asserting * on specific Safety Center states in SafetyCenter for testing. */ +@RequiresApi(TIRAMISU) class SafetyCenterTestData(context: Context) { private val safetyCenterResourcesContext = SafetyCenterResourcesContext.forTests(context) diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestHelper.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestHelper.kt index 55eb9349b..73c15b158 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestHelper.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestHelper.kt @@ -19,11 +19,13 @@ package com.android.safetycenter.testing import android.Manifest.permission.READ_SAFETY_CENTER_STATUS import android.Manifest.permission.SEND_SAFETY_CENTER_UPDATE import android.content.Context +import android.os.Build.VERSION_CODES.TIRAMISU import android.safetycenter.SafetyCenterManager import android.safetycenter.SafetyEvent import android.safetycenter.SafetySourceData import android.safetycenter.config.SafetyCenterConfig import android.safetycenter.config.SafetySource.SAFETY_SOURCE_TYPE_STATIC +import androidx.annotation.RequiresApi import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.addOnSafetyCenterDataChangedListenerWithPermission import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.clearAllSafetySourceDataForTestsWithPermission import com.android.safetycenter.testing.SafetyCenterApisWithShellPermissions.clearSafetyCenterConfigForTestsWithPermission @@ -38,6 +40,7 @@ import com.android.safetycenter.testing.ShellPermissions.callWithShellPermission import com.google.common.util.concurrent.MoreExecutors.directExecutor /** A class that facilitates settings up Safety Center in tests. */ +@RequiresApi(TIRAMISU) class SafetyCenterTestHelper(private val context: Context) { private val safetyCenterManager = context.getSystemService(SafetyCenterManager::class.java)!! diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestListener.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestListener.kt index 7d032ec1d..727305070 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestListener.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetyCenterTestListener.kt @@ -16,9 +16,11 @@ package com.android.safetycenter.testing +import android.os.Build.VERSION_CODES.TIRAMISU import android.safetycenter.SafetyCenterData import android.safetycenter.SafetyCenterErrorDetails import android.safetycenter.SafetyCenterManager.OnSafetyCenterDataChangedListener +import androidx.annotation.RequiresApi import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG import com.android.safetycenter.testing.Coroutines.runBlockingWithTimeout import java.time.Duration @@ -28,6 +30,7 @@ import kotlinx.coroutines.channels.Channel * An [OnSafetyCenterDataChangedListener] that facilitates receiving updates from SafetyCenter in * tests. */ +@RequiresApi(TIRAMISU) class SafetyCenterTestListener : OnSafetyCenterDataChangedListener { private val dataChannel = Channel<SafetyCenterData>(Channel.UNLIMITED) private val errorChannel = Channel<SafetyCenterErrorDetails>(Channel.UNLIMITED) diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceIntentHandler.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceIntentHandler.kt index 1db07e5b0..7f579d24b 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceIntentHandler.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceIntentHandler.kt @@ -18,6 +18,7 @@ package com.android.safetycenter.testing import android.content.Context import android.content.Intent +import android.os.Build.VERSION_CODES.TIRAMISU import android.os.UserHandle import android.safetycenter.SafetyCenterManager import android.safetycenter.SafetyCenterManager.ACTION_REFRESH_SAFETY_SOURCES @@ -33,6 +34,7 @@ import android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_RESOLVING_ACTION_FAILE import android.safetycenter.SafetyEvent.SAFETY_EVENT_TYPE_RESOLVING_ACTION_SUCCEEDED import android.safetycenter.SafetySourceData import android.safetycenter.SafetySourceErrorDetails +import androidx.annotation.RequiresApi import com.android.safetycenter.testing.SafetySourceTestData.Companion.EVENT_SOURCE_STATE_CHANGED import javax.annotation.concurrent.GuardedBy import kotlinx.coroutines.channels.Channel @@ -46,6 +48,7 @@ import kotlinx.coroutines.sync.withLock * * This is meant to emulate how Safety Sources will typically react to Safety Center intents. */ +@RequiresApi(TIRAMISU) class SafetySourceIntentHandler { private val refreshSafetySourcesChannel = Channel<String>(UNLIMITED) diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceReceiver.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceReceiver.kt index ac0bd6182..2499606db 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceReceiver.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceReceiver.kt @@ -25,10 +25,12 @@ import android.app.Service import android.content.BroadcastReceiver import android.content.Context import android.content.Intent +import android.os.Build.VERSION_CODES.TIRAMISU import android.os.IBinder import android.os.UserManager import android.safetycenter.SafetyCenterManager import android.safetycenter.SafetyCenterManager.ACTION_SAFETY_CENTER_ENABLED_CHANGED +import androidx.annotation.RequiresApi import androidx.test.core.app.ApplicationProvider import com.android.compatibility.common.util.SystemUtil import com.android.safetycenter.testing.Coroutines.TIMEOUT_LONG @@ -46,6 +48,7 @@ import kotlinx.coroutines.Job import kotlinx.coroutines.launch /** Broadcast receiver used for testing broadcasts sent to safety sources. */ +@RequiresApi(TIRAMISU) class SafetySourceReceiver : BroadcastReceiver() { override fun onReceive(context: Context, intent: Intent?) { val userManager = context.getSystemService(UserManager::class.java)!! diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceTestData.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceTestData.kt index b9f2723ad..5a62b3750 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceTestData.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SafetySourceTestData.kt @@ -21,6 +21,7 @@ import android.content.Context import android.content.Intent import android.content.Intent.FLAG_RECEIVER_FOREGROUND import android.content.pm.PackageManager.ResolveInfoFlags +import android.os.Build.VERSION_CODES.TIRAMISU import android.os.Build.VERSION_CODES.UPSIDE_DOWN_CAKE import android.safetycenter.SafetyEvent import android.safetycenter.SafetySourceData @@ -49,6 +50,7 @@ import kotlin.math.max * A class that provides [SafetySourceData] objects and associated constants to facilitate setting * up specific states in SafetyCenter for testing. */ +@RequiresApi(TIRAMISU) class SafetySourceTestData(private val context: Context) { /** A [PendingIntent] that redirects to the [TestActivity] page. */ diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SettingsPackage.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SettingsPackage.kt index 537d00ce2..2ba127f4e 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/SettingsPackage.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/SettingsPackage.kt @@ -19,19 +19,26 @@ package com.android.safetycenter.testing import android.content.Context import android.content.Intent import android.content.pm.PackageManager +import android.content.pm.PackageManager.ResolveInfoFlags +import android.os.Build.VERSION_CODES.TIRAMISU import android.provider.Settings +import androidx.annotation.RequiresApi /** A class that knows the Settings app package name. */ object SettingsPackage { /** Returns the Settings app package name. */ + @RequiresApi(TIRAMISU) // For call to resolveActivity with ResolveInfoFlags. fun Context.getSettingsPackageName() = packageManager .resolveActivity( Intent(Settings.ACTION_SETTINGS), - PackageManager.MATCH_DEFAULT_ONLY or - PackageManager.MATCH_DIRECT_BOOT_AWARE or - PackageManager.MATCH_DIRECT_BOOT_UNAWARE + ResolveInfoFlags.of( + (PackageManager.MATCH_DEFAULT_ONLY or + PackageManager.MATCH_DIRECT_BOOT_AWARE or + PackageManager.MATCH_DIRECT_BOOT_UNAWARE) + .toLong() + ) )!! .activityInfo .packageName diff --git a/tests/utils/safetycenter/java/com/android/safetycenter/testing/UiTestHelper.kt b/tests/utils/safetycenter/java/com/android/safetycenter/testing/UiTestHelper.kt index 899bed775..81c255cf3 100644 --- a/tests/utils/safetycenter/java/com/android/safetycenter/testing/UiTestHelper.kt +++ b/tests/utils/safetycenter/java/com/android/safetycenter/testing/UiTestHelper.kt @@ -16,10 +16,12 @@ package com.android.safetycenter.testing +import android.os.Build.VERSION_CODES.TIRAMISU import android.os.SystemClock import android.safetycenter.SafetySourceData import android.safetycenter.SafetySourceIssue import android.util.Log +import androidx.annotation.RequiresApi import androidx.test.uiautomator.By import androidx.test.uiautomator.BySelector import androidx.test.uiautomator.StaleObjectException @@ -38,6 +40,8 @@ object UiTestHelper { /** The label of the rescan button. */ const val RESCAN_BUTTON_LABEL = "Scan device" + /** The title of collapsible card that controls the visibility of additional issue cards. */ + const val MORE_ISSUES_LABEL = "More alerts" private val WAIT_TIMEOUT = Duration.ofSeconds(25) private val NOT_DISPLAYED_TIMEOUT = Duration.ofMillis(500) @@ -92,6 +96,7 @@ object UiTestHelper { * * This includes its UI entry and its issues. */ + @RequiresApi(TIRAMISU) fun waitSourceDataDisplayed(sourceData: SafetySourceData) { waitAllTextDisplayed(sourceData.status?.title, sourceData.status?.summary) @@ -101,6 +106,7 @@ object UiTestHelper { } /** Waits for most of the [SafetySourceIssue] information to be displayed. */ + @RequiresApi(TIRAMISU) fun waitSourceIssueDisplayed(sourceIssue: SafetySourceIssue) { waitAllTextDisplayed(sourceIssue.title, sourceIssue.subtitle, sourceIssue.summary) @@ -110,13 +116,14 @@ object UiTestHelper { } /** Waits for most of the [SafetySourceIssue] information not to be displayed. */ + @RequiresApi(TIRAMISU) fun waitSourceIssueNotDisplayed(sourceIssue: SafetySourceIssue) { waitAllTextNotDisplayed(sourceIssue.title) } - /** Expands the more issues card button. */ - fun expandMoreIssuesCard() { - waitDisplayed(By.text("See all alerts")) { it.click() } + /** Clicks the more issues card button to show or hide additional issues. */ + fun clickMoreIssuesCard() { + waitDisplayed(By.text(MORE_ISSUES_LABEL)) { it.click() } } /** Enables or disables animations based on [enabled]. */ |