diff options
112 files changed, 1666 insertions, 661 deletions
diff --git a/core/res/res/layout/shutdown_dialog.xml b/core/res/res/layout/shutdown_dialog.xml index ec67aa86bcc9..726c25540e6f 100644 --- a/core/res/res/layout/shutdown_dialog.xml +++ b/core/res/res/layout/shutdown_dialog.xml @@ -40,7 +40,7 @@ android:fontFamily="@string/config_headlineFontFamily"/> <TextView - android:id="@+id/text2" + android:id="@id/text2" android:layout_width="wrap_content" android:layout_height="32sp" android:text="@string/shutdown_progress" diff --git a/core/res/res/values/config_telephony.xml b/core/res/res/values/config_telephony.xml index fd7418542a2b..84209348b26a 100644 --- a/core/res/res/values/config_telephony.xml +++ b/core/res/res/values/config_telephony.xml @@ -167,9 +167,4 @@ true, routing from the android emergency number database will be ignored. --> <bool name="ignore_emergency_number_routing_from_db">false</bool> <java-symbol type="bool" name="ignore_emergency_number_routing_from_db" /> - - <!-- Whether "Virtual DSDA", i.e. in-call IMS connectivity can be provided on both subs with - only single logical modem, by using its data connection in addition to cellular IMS. --> - <bool name="config_enable_virtual_dsda">false</bool> - <java-symbol type="bool" name="config_enable_virtual_dsda" /> </resources> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index f35e32b126ba..261086e87f15 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -5019,6 +5019,7 @@ <java-symbol type="bool" name="config_batteryStatsResetOnUnplugHighBatteryLevel" /> <java-symbol type="bool" name="config_batteryStatsResetOnUnplugAfterSignificantCharge" /> + <java-symbol name="materialColorOnSecondaryFixedVariant" type="attr"/> <java-symbol name="materialColorOnTertiaryFixedVariant" type="attr"/> <java-symbol name="materialColorSurfaceContainerLowest" type="attr"/> diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/DynamicSummary.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/DynamicSummary.java index c9d9b57c7170..5b7899b1e3af 100644 --- a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/DynamicSummary.java +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/DynamicSummary.java @@ -16,7 +16,7 @@ package com.android.settingslib.drawer; -/** Interface for {@link SwitchController} whose instances support dynamic summary */ +/** Interface for {@link EntryController} whose instances support dynamic summary */ public interface DynamicSummary { /** @return the dynamic summary text */ String getDynamicSummary(); diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/DynamicTitle.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/DynamicTitle.java index af711ddd59c2..cb157734aa6a 100644 --- a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/DynamicTitle.java +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/DynamicTitle.java @@ -16,7 +16,7 @@ package com.android.settingslib.drawer; -/** Interface for {@link SwitchController} whose instances support dynamic title */ +/** Interface for {@link EntryController} whose instances support dynamic title */ public interface DynamicTitle { /** @return the dynamic title text */ String getDynamicTitle(); diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/EntriesProvider.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/EntriesProvider.java new file mode 100644 index 000000000000..1c14c0a72ce4 --- /dev/null +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/EntriesProvider.java @@ -0,0 +1,222 @@ +/* + * 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.settingslib.drawer; + +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; + +import android.content.ContentProvider; +import android.content.ContentValues; +import android.content.Context; +import android.content.pm.ProviderInfo; +import android.database.Cursor; +import android.net.Uri; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; + +import java.util.ArrayList; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map; + +/** + * An abstract class for injecting entries to Settings. + */ +public abstract class EntriesProvider extends ContentProvider { + private static final String TAG = "EntriesProvider"; + + public static final String METHOD_GET_ENTRY_DATA = "getEntryData"; + public static final String METHOD_GET_PROVIDER_ICON = "getProviderIcon"; + public static final String METHOD_GET_DYNAMIC_TITLE = "getDynamicTitle"; + public static final String METHOD_GET_DYNAMIC_SUMMARY = "getDynamicSummary"; + public static final String METHOD_IS_CHECKED = "isChecked"; + public static final String METHOD_ON_CHECKED_CHANGED = "onCheckedChanged"; + + /** + * @deprecated use {@link #METHOD_GET_ENTRY_DATA} instead. + */ + @Deprecated + public static final String METHOD_GET_SWITCH_DATA = "getSwitchData"; + + public static final String EXTRA_ENTRY_DATA = "entry_data"; + public static final String EXTRA_SWITCH_CHECKED_STATE = "checked_state"; + public static final String EXTRA_SWITCH_SET_CHECKED_ERROR = "set_checked_error"; + public static final String EXTRA_SWITCH_SET_CHECKED_ERROR_MESSAGE = "set_checked_error_message"; + + /** + * @deprecated use {@link #EXTRA_ENTRY_DATA} instead. + */ + @Deprecated + public static final String EXTRA_SWITCH_DATA = "switch_data"; + + private String mAuthority; + private final Map<String, EntryController> mControllerMap = new LinkedHashMap<>(); + private final List<Bundle> mEntryDataList = new ArrayList<>(); + + /** + * Get a list of {@link EntryController} for this provider. + */ + protected abstract List<? extends EntryController> createEntryControllers(); + + protected EntryController getController(String key) { + return mControllerMap.get(key); + } + + @Override + public void attachInfo(Context context, ProviderInfo info) { + mAuthority = info.authority; + Log.i(TAG, mAuthority); + super.attachInfo(context, info); + } + + @Override + public boolean onCreate() { + final List<? extends EntryController> controllers = createEntryControllers(); + if (controllers == null || controllers.isEmpty()) { + throw new IllegalArgumentException(); + } + + for (EntryController controller : controllers) { + final String key = controller.getKey(); + if (TextUtils.isEmpty(key)) { + throw new NullPointerException("Entry key cannot be null: " + + controller.getClass().getSimpleName()); + } else if (mControllerMap.containsKey(key)) { + throw new IllegalArgumentException("Entry key " + key + " is duplicated by: " + + controller.getClass().getSimpleName()); + } + + controller.setAuthority(mAuthority); + mControllerMap.put(key, controller); + if (!(controller instanceof PrimarySwitchController)) { + mEntryDataList.add(controller.getBundle()); + } + } + return true; + } + + @Override + public Bundle call(String method, String uriString, Bundle extras) { + final Bundle bundle = new Bundle(); + final String key = extras != null + ? extras.getString(META_DATA_PREFERENCE_KEYHINT) + : null; + if (TextUtils.isEmpty(key)) { + switch (method) { + case METHOD_GET_ENTRY_DATA: + bundle.putParcelableList(EXTRA_ENTRY_DATA, mEntryDataList); + return bundle; + case METHOD_GET_SWITCH_DATA: + bundle.putParcelableList(EXTRA_SWITCH_DATA, mEntryDataList); + return bundle; + default: + return null; + } + } + + final EntryController controller = mControllerMap.get(key); + if (controller == null) { + return null; + } + + switch (method) { + case METHOD_GET_ENTRY_DATA: + case METHOD_GET_SWITCH_DATA: + if (!(controller instanceof PrimarySwitchController)) { + return controller.getBundle(); + } + break; + case METHOD_GET_PROVIDER_ICON: + if (controller instanceof ProviderIcon) { + return ((ProviderIcon) controller).getProviderIcon(); + } + break; + case METHOD_GET_DYNAMIC_TITLE: + if (controller instanceof DynamicTitle) { + bundle.putString(META_DATA_PREFERENCE_TITLE, + ((DynamicTitle) controller).getDynamicTitle()); + return bundle; + } + break; + case METHOD_GET_DYNAMIC_SUMMARY: + if (controller instanceof DynamicSummary) { + bundle.putString(META_DATA_PREFERENCE_SUMMARY, + ((DynamicSummary) controller).getDynamicSummary()); + return bundle; + } + break; + case METHOD_IS_CHECKED: + if (controller instanceof ProviderSwitch) { + bundle.putBoolean(EXTRA_SWITCH_CHECKED_STATE, + ((ProviderSwitch) controller).isSwitchChecked()); + return bundle; + } + break; + case METHOD_ON_CHECKED_CHANGED: + if (controller instanceof ProviderSwitch) { + return onSwitchCheckedChanged(extras.getBoolean(EXTRA_SWITCH_CHECKED_STATE), + (ProviderSwitch) controller); + } + break; + } + return null; + } + + private Bundle onSwitchCheckedChanged(boolean checked, ProviderSwitch controller) { + final boolean success = controller.onSwitchCheckedChanged(checked); + final Bundle bundle = new Bundle(); + bundle.putBoolean(EXTRA_SWITCH_SET_CHECKED_ERROR, !success); + if (success) { + if (controller instanceof DynamicSummary) { + ((EntryController) controller).notifySummaryChanged(getContext()); + } + } else { + bundle.putString(EXTRA_SWITCH_SET_CHECKED_ERROR_MESSAGE, + controller.getSwitchErrorMessage(checked)); + } + return bundle; + } + + @Override + public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, + String sortOrder) { + throw new UnsupportedOperationException(); + } + + @Override + public String getType(Uri uri) { + throw new UnsupportedOperationException(); + } + + @Override + public Uri insert(Uri uri, ContentValues values) { + throw new UnsupportedOperationException(); + } + + @Override + public int delete(Uri uri, String selection, String[] selectionArgs) { + throw new UnsupportedOperationException(); + } + + @Override + public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { + throw new UnsupportedOperationException(); + } +} + diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/EntryController.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/EntryController.java new file mode 100644 index 000000000000..5d6e6a3adeb7 --- /dev/null +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/EntryController.java @@ -0,0 +1,246 @@ +/* + * 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.settingslib.drawer; + +import static com.android.settingslib.drawer.SwitchesProvider.METHOD_GET_DYNAMIC_SUMMARY; +import static com.android.settingslib.drawer.SwitchesProvider.METHOD_GET_DYNAMIC_TITLE; +import static com.android.settingslib.drawer.TileUtils.EXTRA_CATEGORY_KEY; +import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_ARGB; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_HINT; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_PENDING_INTENT; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SWITCH_URI; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE_URI; + +import android.app.PendingIntent; +import android.content.ContentResolver; +import android.content.Context; +import android.net.Uri; +import android.os.Bundle; + +import androidx.annotation.DrawableRes; +import androidx.annotation.NonNull; +import androidx.annotation.StringRes; + +/** + * A controller that manages events for switch. + */ +public abstract class EntryController { + + private String mAuthority; + + /** + * Returns the key for this switch. + */ + public abstract String getKey(); + + /** + * Returns the {@link MetaData} for this switch. + */ + protected abstract MetaData getMetaData(); + + /** + * Notify registered observers that title was updated and attempt to sync changes. + */ + public void notifyTitleChanged(Context context) { + if (this instanceof DynamicTitle) { + notifyChanged(context, METHOD_GET_DYNAMIC_TITLE); + } + } + + /** + * Notify registered observers that summary was updated and attempt to sync changes. + */ + public void notifySummaryChanged(Context context) { + if (this instanceof DynamicSummary) { + notifyChanged(context, METHOD_GET_DYNAMIC_SUMMARY); + } + } + + void setAuthority(String authority) { + mAuthority = authority; + } + + Bundle getBundle() { + final MetaData metaData = getMetaData(); + if (metaData == null) { + throw new NullPointerException("Should not return null in getMetaData()"); + } + + final Bundle bundle = metaData.build(); + final String uriString = new Uri.Builder() + .scheme(ContentResolver.SCHEME_CONTENT) + .authority(mAuthority) + .build() + .toString(); + bundle.putString(META_DATA_PREFERENCE_KEYHINT, getKey()); + if (this instanceof ProviderIcon) { + bundle.putString(META_DATA_PREFERENCE_ICON_URI, uriString); + } + if (this instanceof DynamicTitle) { + bundle.putString(META_DATA_PREFERENCE_TITLE_URI, uriString); + } + if (this instanceof DynamicSummary) { + bundle.putString(META_DATA_PREFERENCE_SUMMARY_URI, uriString); + } + if (this instanceof ProviderSwitch) { + bundle.putString(META_DATA_PREFERENCE_SWITCH_URI, uriString); + } + return bundle; + } + + private void notifyChanged(Context context, String method) { + final Uri uri = TileUtils.buildUri(mAuthority, method, getKey()); + context.getContentResolver().notifyChange(uri, null); + } + + /** + * Collects all meta data of the item. + */ + protected static class MetaData { + private String mCategory; + private int mOrder; + @DrawableRes + private int mIcon; + private int mIconBackgroundHint; + private int mIconBackgroundArgb; + private Boolean mIconTintable; + @StringRes + private int mTitleId; + private String mTitle; + @StringRes + private int mSummaryId; + private String mSummary; + private PendingIntent mPendingIntent; + + /** + * @param category the category of the switch. This value must be from {@link CategoryKey}. + */ + public MetaData(@NonNull String category) { + mCategory = category; + } + + /** + * Set the order of the item that should be displayed on screen. Bigger value items displays + * closer on top. + */ + public MetaData setOrder(int order) { + mOrder = order; + return this; + } + + /** Set the icon that should be displayed for the item. */ + public MetaData setIcon(@DrawableRes int icon) { + mIcon = icon; + return this; + } + + /** Set the icon background color. The value may or may not be used by Settings app. */ + public MetaData setIconBackgoundHint(int hint) { + mIconBackgroundHint = hint; + return this; + } + + /** Set the icon background color as raw ARGB. */ + public MetaData setIconBackgoundArgb(int argb) { + mIconBackgroundArgb = argb; + return this; + } + + /** Specify whether the icon is tintable. */ + public MetaData setIconTintable(boolean tintable) { + mIconTintable = tintable; + return this; + } + + /** Set the title that should be displayed for the item. */ + public MetaData setTitle(@StringRes int id) { + mTitleId = id; + return this; + } + + /** Set the title that should be displayed for the item. */ + public MetaData setTitle(String title) { + mTitle = title; + return this; + } + + /** Set the summary text that should be displayed for the item. */ + public MetaData setSummary(@StringRes int id) { + mSummaryId = id; + return this; + } + + /** Set the summary text that should be displayed for the item. */ + public MetaData setSummary(String summary) { + mSummary = summary; + return this; + } + + public MetaData setPendingIntent(PendingIntent pendingIntent) { + mPendingIntent = pendingIntent; + return this; + } + + protected Bundle build() { + final Bundle bundle = new Bundle(); + bundle.putString(EXTRA_CATEGORY_KEY, mCategory); + + if (mOrder != 0) { + bundle.putInt(META_DATA_KEY_ORDER, mOrder); + } + + if (mIcon != 0) { + bundle.putInt(META_DATA_PREFERENCE_ICON, mIcon); + } + if (mIconBackgroundHint != 0) { + bundle.putInt(META_DATA_PREFERENCE_ICON_BACKGROUND_HINT, mIconBackgroundHint); + } + if (mIconBackgroundArgb != 0) { + bundle.putInt(META_DATA_PREFERENCE_ICON_BACKGROUND_ARGB, mIconBackgroundArgb); + } + if (mIconTintable != null) { + bundle.putBoolean(META_DATA_PREFERENCE_ICON_TINTABLE, mIconTintable); + } + + if (mTitleId != 0) { + bundle.putInt(META_DATA_PREFERENCE_TITLE, mTitleId); + } else if (mTitle != null) { + bundle.putString(META_DATA_PREFERENCE_TITLE, mTitle); + } + + if (mSummaryId != 0) { + bundle.putInt(META_DATA_PREFERENCE_SUMMARY, mSummaryId); + } else if (mSummary != null) { + bundle.putString(META_DATA_PREFERENCE_SUMMARY, mSummary); + } + + if (mPendingIntent != null) { + bundle.putParcelable(META_DATA_PREFERENCE_PENDING_INTENT, mPendingIntent); + } + + return bundle; + } + } +} diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ProviderIcon.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ProviderIcon.java index 2945d5c1099a..3aa6fcb06016 100644 --- a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ProviderIcon.java +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ProviderIcon.java @@ -19,7 +19,7 @@ package com.android.settingslib.drawer; import android.os.Bundle; /** - * Interface for {@link SwitchController} whose instances support icon provided from the content + * Interface for {@link EntryController} whose instances support icon provided from the content * provider */ public interface ProviderIcon { diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ProviderSwitch.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ProviderSwitch.java new file mode 100644 index 000000000000..47eb31cefa29 --- /dev/null +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ProviderSwitch.java @@ -0,0 +1,41 @@ +/* + * 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.settingslib.drawer; + +/** + * Interface for {@link EntryController} whose instances support switch widget provided from the + * content provider + */ +public interface ProviderSwitch { + /** + * Returns the checked state of this switch. + */ + boolean isSwitchChecked(); + + /** + * Called when the checked state of this switch is changed. + * + * @return true if the checked state was successfully changed, otherwise false + */ + boolean onSwitchCheckedChanged(boolean checked); + + /** + * Returns the error message which will be toasted when {@link #onSwitchCheckedChanged} returns + * false. + */ + String getSwitchErrorMessage(boolean attemptedChecked); +} diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ProviderTile.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ProviderTile.java index 54da585aba7a..b775e93bf69c 100644 --- a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ProviderTile.java +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/ProviderTile.java @@ -75,7 +75,7 @@ public class ProviderTile extends Tile { if (infoList != null && !infoList.isEmpty()) { final ProviderInfo providerInfo = infoList.get(0).providerInfo; mComponentInfo = providerInfo; - setMetaData(TileUtils.getSwitchDataFromProvider(context, providerInfo.authority, + setMetaData(TileUtils.getEntryDataFromProvider(context, providerInfo.authority, mKey)); } else { Log.e(TAG, "Cannot find package info for " diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/SwitchController.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/SwitchController.java index 23669b2743ce..a1a4e5867299 100644 --- a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/SwitchController.java +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/SwitchController.java @@ -16,38 +16,16 @@ package com.android.settingslib.drawer; -import static com.android.settingslib.drawer.SwitchesProvider.METHOD_GET_DYNAMIC_SUMMARY; -import static com.android.settingslib.drawer.SwitchesProvider.METHOD_GET_DYNAMIC_TITLE; -import static com.android.settingslib.drawer.SwitchesProvider.METHOD_IS_CHECKED; -import static com.android.settingslib.drawer.TileUtils.EXTRA_CATEGORY_KEY; -import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_ARGB; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_BACKGROUND_HINT; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_TINTABLE; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SWITCH_URI; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE_URI; - -import android.content.ContentResolver; -import android.content.Context; -import android.net.Uri; -import android.os.Bundle; - -import androidx.annotation.DrawableRes; import androidx.annotation.NonNull; -import androidx.annotation.StringRes; /** * A controller that manages events for switch. + * + * @deprecated Use {@link EntriesProvider} with {@link ProviderSwitch} instead. */ -public abstract class SwitchController { +@Deprecated +public abstract class SwitchController extends EntryController implements ProviderSwitch { - private String mAuthority; /** * Returns the key for this switch. @@ -55,11 +33,6 @@ public abstract class SwitchController { public abstract String getSwitchKey(); /** - * Returns the {@link MetaData} for this switch. - */ - protected abstract MetaData getMetaData(); - - /** * Returns the checked state of this switch. */ protected abstract boolean isChecked(); @@ -76,181 +49,41 @@ public abstract class SwitchController { */ protected abstract String getErrorMessage(boolean attemptedChecked); - /** - * Notify registered observers that title was updated and attempt to sync changes. - */ - public void notifyTitleChanged(Context context) { - if (this instanceof DynamicTitle) { - notifyChanged(context, METHOD_GET_DYNAMIC_TITLE); - } - } - - /** - * Notify registered observers that summary was updated and attempt to sync changes. - */ - public void notifySummaryChanged(Context context) { - if (this instanceof DynamicSummary) { - notifyChanged(context, METHOD_GET_DYNAMIC_SUMMARY); - } - } - - /** - * Notify registered observers that checked state was updated and attempt to sync changes. - */ - public void notifyCheckedChanged(Context context) { - notifyChanged(context, METHOD_IS_CHECKED); + @Override + public String getKey() { + return getSwitchKey(); } - void setAuthority(String authority) { - mAuthority = authority; + @Override + public boolean isSwitchChecked() { + return isChecked(); } - Bundle getBundle() { - final MetaData metaData = getMetaData(); - if (metaData == null) { - throw new NullPointerException("Should not return null in getMetaData()"); - } - - final Bundle bundle = metaData.build(); - final String uriString = new Uri.Builder() - .scheme(ContentResolver.SCHEME_CONTENT) - .authority(mAuthority) - .build() - .toString(); - bundle.putString(META_DATA_PREFERENCE_KEYHINT, getSwitchKey()); - bundle.putString(META_DATA_PREFERENCE_SWITCH_URI, uriString); - if (this instanceof ProviderIcon) { - bundle.putString(META_DATA_PREFERENCE_ICON_URI, uriString); - } - if (this instanceof DynamicTitle) { - bundle.putString(META_DATA_PREFERENCE_TITLE_URI, uriString); - } - if (this instanceof DynamicSummary) { - bundle.putString(META_DATA_PREFERENCE_SUMMARY_URI, uriString); - } - return bundle; + @Override + public boolean onSwitchCheckedChanged(boolean checked) { + return onCheckedChanged(checked); } - private void notifyChanged(Context context, String method) { - final Uri uri = TileUtils.buildUri(mAuthority, method, getSwitchKey()); - context.getContentResolver().notifyChange(uri, null); + @Override + public String getSwitchErrorMessage(boolean attemptedChecked) { + return getErrorMessage(attemptedChecked); } /** - * Collects all meta data of the item. + * Same as {@link EntryController.MetaData}, for backwards compatibility purpose. + * + * @deprecated Use {@link EntryController.MetaData} instead. */ - protected static class MetaData { - private String mCategory; - private int mOrder; - @DrawableRes - private int mIcon; - private int mIconBackgroundHint; - private int mIconBackgroundArgb; - private Boolean mIconTintable; - @StringRes - private int mTitleId; - private String mTitle; - @StringRes - private int mSummaryId; - private String mSummary; - + @Deprecated + protected static class MetaData extends EntryController.MetaData { /** * @param category the category of the switch. This value must be from {@link CategoryKey}. + * + * @deprecated Use {@link EntryController.MetaData} instead. */ + @Deprecated public MetaData(@NonNull String category) { - mCategory = category; - } - - /** - * Set the order of the item that should be displayed on screen. Bigger value items displays - * closer on top. - */ - public MetaData setOrder(int order) { - mOrder = order; - return this; - } - - /** Set the icon that should be displayed for the item. */ - public MetaData setIcon(@DrawableRes int icon) { - mIcon = icon; - return this; - } - - /** Set the icon background color. The value may or may not be used by Settings app. */ - public MetaData setIconBackgoundHint(int hint) { - mIconBackgroundHint = hint; - return this; - } - - /** Set the icon background color as raw ARGB. */ - public MetaData setIconBackgoundArgb(int argb) { - mIconBackgroundArgb = argb; - return this; - } - - /** Specify whether the icon is tintable. */ - public MetaData setIconTintable(boolean tintable) { - mIconTintable = tintable; - return this; - } - - /** Set the title that should be displayed for the item. */ - public MetaData setTitle(@StringRes int id) { - mTitleId = id; - return this; - } - - /** Set the title that should be displayed for the item. */ - public MetaData setTitle(String title) { - mTitle = title; - return this; - } - - /** Set the summary text that should be displayed for the item. */ - public MetaData setSummary(@StringRes int id) { - mSummaryId = id; - return this; - } - - /** Set the summary text that should be displayed for the item. */ - public MetaData setSummary(String summary) { - mSummary = summary; - return this; - } - - private Bundle build() { - final Bundle bundle = new Bundle(); - bundle.putString(EXTRA_CATEGORY_KEY, mCategory); - - if (mOrder != 0) { - bundle.putInt(META_DATA_KEY_ORDER, mOrder); - } - - if (mIcon != 0) { - bundle.putInt(META_DATA_PREFERENCE_ICON, mIcon); - } - if (mIconBackgroundHint != 0) { - bundle.putInt(META_DATA_PREFERENCE_ICON_BACKGROUND_HINT, mIconBackgroundHint); - } - if (mIconBackgroundArgb != 0) { - bundle.putInt(META_DATA_PREFERENCE_ICON_BACKGROUND_ARGB, mIconBackgroundArgb); - } - if (mIconTintable != null) { - bundle.putBoolean(META_DATA_PREFERENCE_ICON_TINTABLE, mIconTintable); - } - - if (mTitleId != 0) { - bundle.putInt(META_DATA_PREFERENCE_TITLE, mTitleId); - } else if (mTitle != null) { - bundle.putString(META_DATA_PREFERENCE_TITLE, mTitle); - } - - if (mSummaryId != 0) { - bundle.putInt(META_DATA_PREFERENCE_SUMMARY, mSummaryId); - } else if (mSummary != null) { - bundle.putString(META_DATA_PREFERENCE_SUMMARY, mSummary); - } - return bundle; + super(category); } } } diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/SwitchesProvider.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/SwitchesProvider.java index f2b3e30dc252..ad00ced8a3ac 100644 --- a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/SwitchesProvider.java +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/SwitchesProvider.java @@ -16,46 +16,15 @@ package com.android.settingslib.drawer; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY; -import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; - -import android.content.ContentProvider; -import android.content.ContentValues; -import android.content.Context; -import android.content.pm.ProviderInfo; -import android.database.Cursor; -import android.net.Uri; -import android.os.Bundle; -import android.text.TextUtils; -import android.util.Log; - -import java.util.ArrayList; -import java.util.LinkedHashMap; import java.util.List; -import java.util.Map; /** * An abstract class for injecting switches to Settings. + * + * @deprecated Use {@link EntriesProvider} instead. */ -public abstract class SwitchesProvider extends ContentProvider { - private static final String TAG = "SwitchesProvider"; - - public static final String METHOD_GET_SWITCH_DATA = "getSwitchData"; - public static final String METHOD_GET_PROVIDER_ICON = "getProviderIcon"; - public static final String METHOD_GET_DYNAMIC_TITLE = "getDynamicTitle"; - public static final String METHOD_GET_DYNAMIC_SUMMARY = "getDynamicSummary"; - public static final String METHOD_IS_CHECKED = "isChecked"; - public static final String METHOD_ON_CHECKED_CHANGED = "onCheckedChanged"; - - public static final String EXTRA_SWITCH_DATA = "switch_data"; - public static final String EXTRA_SWITCH_CHECKED_STATE = "checked_state"; - public static final String EXTRA_SWITCH_SET_CHECKED_ERROR = "set_checked_error"; - public static final String EXTRA_SWITCH_SET_CHECKED_ERROR_MESSAGE = "set_checked_error_message"; - - private String mAuthority; - private final Map<String, SwitchController> mControllerMap = new LinkedHashMap<>(); - private final List<Bundle> mSwitchDataList = new ArrayList<>(); +@Deprecated +public abstract class SwitchesProvider extends EntriesProvider { /** * Get a list of {@link SwitchController} for this provider. @@ -63,129 +32,7 @@ public abstract class SwitchesProvider extends ContentProvider { protected abstract List<SwitchController> createSwitchControllers(); @Override - public void attachInfo(Context context, ProviderInfo info) { - mAuthority = info.authority; - Log.i(TAG, mAuthority); - super.attachInfo(context, info); - } - - @Override - public boolean onCreate() { - final List<SwitchController> controllers = createSwitchControllers(); - if (controllers == null || controllers.isEmpty()) { - throw new IllegalArgumentException(); - } - - controllers.forEach(controller -> { - final String key = controller.getSwitchKey(); - if (TextUtils.isEmpty(key)) { - throw new NullPointerException("Switch key cannot be null: " - + controller.getClass().getSimpleName()); - } else if (mControllerMap.containsKey(key)) { - throw new IllegalArgumentException("Switch key " + key + " is duplicated by: " - + controller.getClass().getSimpleName()); - } - - controller.setAuthority(mAuthority); - mControllerMap.put(key, controller); - if (!(controller instanceof PrimarySwitchController)) { - mSwitchDataList.add(controller.getBundle()); - } - }); - return true; - } - - @Override - public Bundle call(String method, String uriString, Bundle extras) { - final Bundle bundle = new Bundle(); - final String key = extras != null - ? extras.getString(META_DATA_PREFERENCE_KEYHINT) - : null; - if (TextUtils.isEmpty(key)) { - if (METHOD_GET_SWITCH_DATA.equals(method)) { - bundle.putParcelableList(EXTRA_SWITCH_DATA, mSwitchDataList); - return bundle; - } - return null; - } - - final SwitchController controller = mControllerMap.get(key); - if (controller == null) { - return null; - } - - switch (method) { - case METHOD_GET_SWITCH_DATA: - if (!(controller instanceof PrimarySwitchController)) { - return controller.getBundle(); - } - break; - case METHOD_GET_PROVIDER_ICON: - if (controller instanceof ProviderIcon) { - return ((ProviderIcon) controller).getProviderIcon(); - } - break; - case METHOD_GET_DYNAMIC_TITLE: - if (controller instanceof DynamicTitle) { - bundle.putString(META_DATA_PREFERENCE_TITLE, - ((DynamicTitle) controller).getDynamicTitle()); - return bundle; - } - break; - case METHOD_GET_DYNAMIC_SUMMARY: - if (controller instanceof DynamicSummary) { - bundle.putString(META_DATA_PREFERENCE_SUMMARY, - ((DynamicSummary) controller).getDynamicSummary()); - return bundle; - } - break; - case METHOD_IS_CHECKED: - bundle.putBoolean(EXTRA_SWITCH_CHECKED_STATE, controller.isChecked()); - return bundle; - case METHOD_ON_CHECKED_CHANGED: - return onCheckedChanged(extras.getBoolean(EXTRA_SWITCH_CHECKED_STATE), controller); - } - return null; - } - - private Bundle onCheckedChanged(boolean checked, SwitchController controller) { - final boolean success = controller.onCheckedChanged(checked); - final Bundle bundle = new Bundle(); - bundle.putBoolean(EXTRA_SWITCH_SET_CHECKED_ERROR, !success); - if (success) { - if (controller instanceof DynamicSummary) { - controller.notifySummaryChanged(getContext()); - } - } else { - bundle.putString(EXTRA_SWITCH_SET_CHECKED_ERROR_MESSAGE, - controller.getErrorMessage(checked)); - } - return bundle; - } - - @Override - public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, - String sortOrder) { - throw new UnsupportedOperationException(); - } - - @Override - public String getType(Uri uri) { - throw new UnsupportedOperationException(); - } - - @Override - public Uri insert(Uri uri, ContentValues values) { - throw new UnsupportedOperationException(); - } - - @Override - public int delete(Uri uri, String selection, String[] selectionArgs) { - throw new UnsupportedOperationException(); - } - - @Override - public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs) { - throw new UnsupportedOperationException(); + protected List<? extends EntryController> createEntryControllers() { + return createSwitchControllers(); } } diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java index a0c8ac4e0a51..00dd8cc88da2 100644 --- a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/Tile.java @@ -19,6 +19,7 @@ package com.android.settingslib.drawer; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE; import static com.android.settingslib.drawer.TileUtils.META_DATA_NEW_TASK; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_GROUP_KEY; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY; @@ -29,6 +30,7 @@ import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITL import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL; import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.pm.ComponentInfo; @@ -47,6 +49,7 @@ import androidx.annotation.VisibleForTesting; import java.util.ArrayList; import java.util.Comparator; +import java.util.HashMap; /** * Description of a single dashboard tile that the user can select. @@ -60,6 +63,8 @@ public abstract class Tile implements Parcelable { */ public ArrayList<UserHandle> userHandle = new ArrayList<>(); + public HashMap<UserHandle, PendingIntent> pendingIntentMap = new HashMap<>(); + @VisibleForTesting long mLastUpdateTime; private final String mComponentPackage; @@ -186,6 +191,13 @@ public abstract class Tile implements Parcelable { } /** + * Check whether tile has a pending intent. + */ + public boolean hasPendingIntent() { + return !pendingIntentMap.isEmpty(); + } + + /** * Title of the tile that is shown to the user. */ public CharSequence getTitle(Context context) { @@ -395,6 +407,76 @@ public abstract class Tile implements Parcelable { return TextUtils.equals(profile, PROFILE_PRIMARY); } + /** + * Returns whether the tile belongs to another group / category. + */ + public boolean hasGroupKey() { + return mMetaData != null + && !TextUtils.isEmpty(mMetaData.getString(META_DATA_PREFERENCE_GROUP_KEY)); + } + + /** + * Returns the group / category key this tile belongs to. + */ + public String getGroupKey() { + return (mMetaData == null) ? null : mMetaData.getString(META_DATA_PREFERENCE_GROUP_KEY); + } + + /** + * The type of the tile. + */ + public enum Type { + /** + * A preference that can be tapped on to open a new page. + */ + ACTION, + + /** + * A preference that can be tapped on to open an external app. + */ + EXTERNAL_ACTION, + + /** + * A preference that shows an on / off switch that can be toggled by the user. + */ + SWITCH, + + /** + * A preference with both an on / off switch, and a tappable area that can perform an + * action. + */ + SWITCH_WITH_ACTION, + + /** + * A preference category with a title that can be used to group multiple preferences + * together. + */ + GROUP; + } + + /** + * Returns the type of the tile. + * + * @see Type + */ + public Type getType() { + boolean hasExternalAction = hasPendingIntent(); + boolean hasAction = hasExternalAction || this instanceof ActivityTile; + boolean hasSwitch = hasSwitch(); + + if (hasSwitch && hasAction) { + return Type.SWITCH_WITH_ACTION; + } else if (hasSwitch) { + return Type.SWITCH; + } else if (hasExternalAction) { + return Type.EXTERNAL_ACTION; + } else if (hasAction) { + return Type.ACTION; + } else { + return Type.GROUP; + } + } + public static final Comparator<Tile> TILE_COMPARATOR = (lhs, rhs) -> rhs.getOrder() - lhs.getOrder(); } diff --git a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/TileUtils.java b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/TileUtils.java index acc0087f6dcf..e46db75f633e 100644 --- a/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/TileUtils.java +++ b/packages/SettingsLib/Tile/src/com/android/settingslib/drawer/TileUtils.java @@ -113,6 +113,12 @@ public class TileUtils { public static final String META_DATA_PREFERENCE_KEYHINT = "com.android.settings.keyhint"; /** + * Name of the meta-data item that can be set in the AndroidManifest.xml or in the content + * provider to specify the key of a group / category where this preference belongs to. + */ + public static final String META_DATA_PREFERENCE_GROUP_KEY = "com.android.settings.group_key"; + + /** * Order of the item that should be displayed on screen. Bigger value items displays closer on * top. */ @@ -202,6 +208,13 @@ public class TileUtils { "com.android.settings.switch_uri"; /** + * Name of the meta-data item that can be set from the content provider providing the intent + * that will be executed when the user taps on the preference. + */ + public static final String META_DATA_PREFERENCE_PENDING_INTENT = + "com.android.settings.pending_intent"; + + /** * Value for {@link #META_DATA_KEY_PROFILE}. When the device has a managed profile, * the app will always be run in the primary profile. * @@ -331,12 +344,12 @@ public class TileUtils { continue; } final ProviderInfo providerInfo = resolved.providerInfo; - final List<Bundle> switchData = getSwitchDataFromProvider(context, + final List<Bundle> entryData = getEntryDataFromProvider(context, providerInfo.authority); - if (switchData == null || switchData.isEmpty()) { + if (entryData == null || entryData.isEmpty()) { continue; } - for (Bundle metaData : switchData) { + for (Bundle metaData : entryData) { loadTile(user, addedCache, defaultCategory, outTiles, intent, metaData, providerInfo); } @@ -386,27 +399,43 @@ public class TileUtils { if (!tile.userHandle.contains(user)) { tile.userHandle.add(user); } + if (metaData.containsKey(META_DATA_PREFERENCE_PENDING_INTENT)) { + tile.pendingIntentMap.put( + user, metaData.getParcelable(META_DATA_PREFERENCE_PENDING_INTENT)); + } if (!outTiles.contains(tile)) { outTiles.add(tile); } } - /** Returns the switch data of the key specified from the provider */ + /** Returns the entry data of the key specified from the provider */ // TODO(b/144732809): rearrange methods by access level modifiers - static Bundle getSwitchDataFromProvider(Context context, String authority, String key) { + static Bundle getEntryDataFromProvider(Context context, String authority, String key) { final Map<String, IContentProvider> providerMap = new ArrayMap<>(); - final Uri uri = buildUri(authority, SwitchesProvider.METHOD_GET_SWITCH_DATA, key); - return getBundleFromUri(context, uri, providerMap, null /* bundle */); + final Uri uri = buildUri(authority, EntriesProvider.METHOD_GET_ENTRY_DATA, key); + Bundle result = getBundleFromUri(context, uri, providerMap, null /* bundle */); + if (result == null) { + Uri fallbackUri = buildUri(authority, EntriesProvider.METHOD_GET_SWITCH_DATA, key); + result = getBundleFromUri(context, fallbackUri, providerMap, null /* bundle */); + } + return result; } - /** Returns all switch data from the provider */ - private static List<Bundle> getSwitchDataFromProvider(Context context, String authority) { + /** Returns all entry data from the provider */ + private static List<Bundle> getEntryDataFromProvider(Context context, String authority) { final Map<String, IContentProvider> providerMap = new ArrayMap<>(); - final Uri uri = buildUri(authority, SwitchesProvider.METHOD_GET_SWITCH_DATA); + final Uri uri = buildUri(authority, EntriesProvider.METHOD_GET_ENTRY_DATA); final Bundle result = getBundleFromUri(context, uri, providerMap, null /* bundle */); - return result != null - ? result.getParcelableArrayList(SwitchesProvider.EXTRA_SWITCH_DATA) - : null; + if (result != null) { + return result.getParcelableArrayList(EntriesProvider.EXTRA_ENTRY_DATA); + } else { + Uri fallbackUri = buildUri(authority, EntriesProvider.METHOD_GET_SWITCH_DATA); + Bundle fallbackResult = + getBundleFromUri(context, fallbackUri, providerMap, null /* bundle */); + return fallbackResult != null + ? fallbackResult.getParcelableArrayList(EntriesProvider.EXTRA_SWITCH_DATA) + : null; + } } /** diff --git a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/MetricsFeatureProvider.java b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/MetricsFeatureProvider.java index 09abc394634a..9ee8a32fdc77 100644 --- a/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/MetricsFeatureProvider.java +++ b/packages/SettingsLib/src/com/android/settingslib/core/instrumentation/MetricsFeatureProvider.java @@ -209,8 +209,7 @@ public class MetricsFeatureProvider { } final ComponentName cn = intent.getComponent(); final String key = cn != null ? cn.flattenToString() : intent.getAction(); - return logSettingsTileClick(key + (isWorkProfile ? "/work" : "/personal"), - sourceMetricsCategory); + return logSettingsTileClickWithProfile(key, sourceMetricsCategory, isWorkProfile); } /** @@ -226,4 +225,20 @@ public class MetricsFeatureProvider { clicked(sourceMetricsCategory, logKey); return true; } + + /** + * Logs an event when the setting key is clicked with a specific profile from Profile select + * dialog. + * + * @return true if the key is loggable, otherwise false + */ + public boolean logSettingsTileClickWithProfile(String logKey, int sourceMetricsCategory, + boolean isWorkProfile) { + if (TextUtils.isEmpty(logKey)) { + // Not loggable + return false; + } + clicked(sourceMetricsCategory, logKey + (isWorkProfile ? "/work" : "/personal")); + return true; + } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/MetricsFeatureProviderTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/MetricsFeatureProviderTest.java index 3352d86b2dcc..dd8d54a62ff4 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/MetricsFeatureProviderTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/core/instrumentation/MetricsFeatureProviderTest.java @@ -203,4 +203,24 @@ public class MetricsFeatureProviderTest { assertThat(loggable).isFalse(); verifyNoMoreInteractions(mLogWriter); } + + @Test + public void logSettingsTileClickWithProfile_isPersonalProfile_shouldTagPersonal() { + final String key = "abc"; + final boolean loggable = mProvider.logSettingsTileClickWithProfile(key, + MetricsEvent.SETTINGS_GESTURES, false); + + assertThat(loggable).isTrue(); + verify(mLogWriter).clicked(MetricsEvent.SETTINGS_GESTURES, "abc/personal"); + } + + @Test + public void logSettingsTileClickWithProfile_isWorkProfile_shouldTagWork() { + final String key = "abc"; + final boolean loggable = mProvider.logSettingsTileClickWithProfile(key, + MetricsEvent.SETTINGS_GESTURES, true); + + assertThat(loggable).isTrue(); + verify(mLogWriter).clicked(MetricsEvent.SETTINGS_GESTURES, "abc/work"); + } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/ActivityTileTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/ActivityTileTest.java index aa6b0bf33b69..4d2b1ae2ade0 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/ActivityTileTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/ActivityTileTest.java @@ -17,19 +17,23 @@ package com.android.settingslib.drawer; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_GROUP_KEY; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SWITCH_URI; import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL; import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY; import static com.google.common.truth.Truth.assertThat; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.pm.ActivityInfo; import android.content.pm.ApplicationInfo; import android.content.pm.ResolveInfo; import android.os.Bundle; +import android.os.UserHandle; import org.junit.Before; import org.junit.Test; @@ -191,4 +195,65 @@ public class ActivityTileTest { assertThat(tile.getTitle(RuntimeEnvironment.application)).isNull(); } + + @Test + public void hasPendingIntent_empty_returnsFalse() { + final Tile tile = new ActivityTile(mActivityInfo, "category"); + + assertThat(tile.hasPendingIntent()).isFalse(); + } + + @Test + public void hasPendingIntent_notEmpty_returnsTrue() { + final Tile tile = new ActivityTile(mActivityInfo, "category"); + tile.pendingIntentMap.put( + UserHandle.CURRENT, PendingIntent.getActivity(mContext, 0, new Intent(), 0)); + + assertThat(tile.hasPendingIntent()).isTrue(); + } + + @Test + public void hasGroupKey_empty_returnsFalse() { + final Tile tile = new ActivityTile(mActivityInfo, "category"); + + assertThat(tile.hasGroupKey()).isFalse(); + } + + @Test + public void hasGroupKey_notEmpty_returnsTrue() { + mActivityInfo.metaData.putString(META_DATA_PREFERENCE_GROUP_KEY, "test_key"); + final Tile tile = new ActivityTile(mActivityInfo, "category"); + + assertThat(tile.hasGroupKey()).isTrue(); + } + + @Test + public void getGroupKey_empty_returnsNull() { + final Tile tile = new ActivityTile(mActivityInfo, "category"); + + assertThat(tile.getGroupKey()).isNull(); + } + + @Test + public void getGroupKey_notEmpty_returnsValue() { + mActivityInfo.metaData.putString(META_DATA_PREFERENCE_GROUP_KEY, "test_key"); + final Tile tile = new ActivityTile(mActivityInfo, "category"); + + assertThat(tile.getGroupKey()).isEqualTo("test_key"); + } + + @Test + public void getType_withoutSwitch_returnsAction() { + final Tile tile = new ActivityTile(mActivityInfo, "category"); + + assertThat(tile.getType()).isEqualTo(Tile.Type.ACTION); + } + + @Test + public void getType_withSwitch_returnsSwitchWithAction() { + mActivityInfo.metaData.putString(META_DATA_PREFERENCE_SWITCH_URI, "test://testabc/"); + final Tile tile = new ActivityTile(mActivityInfo, "category"); + + assertThat(tile.getType()).isEqualTo(Tile.Type.SWITCH_WITH_ACTION); + } } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/EntriesProviderTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/EntriesProviderTest.java new file mode 100644 index 000000000000..a2483305c94a --- /dev/null +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/EntriesProviderTest.java @@ -0,0 +1,472 @@ +/* + * 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.settingslib.drawer; + +import static com.android.settingslib.drawer.EntriesProvider.EXTRA_ENTRY_DATA; +import static com.android.settingslib.drawer.EntriesProvider.EXTRA_SWITCH_CHECKED_STATE; +import static com.android.settingslib.drawer.EntriesProvider.EXTRA_SWITCH_DATA; +import static com.android.settingslib.drawer.EntriesProvider.EXTRA_SWITCH_SET_CHECKED_ERROR; +import static com.android.settingslib.drawer.EntriesProvider.EXTRA_SWITCH_SET_CHECKED_ERROR_MESSAGE; +import static com.android.settingslib.drawer.EntriesProvider.METHOD_GET_DYNAMIC_SUMMARY; +import static com.android.settingslib.drawer.EntriesProvider.METHOD_GET_DYNAMIC_TITLE; +import static com.android.settingslib.drawer.EntriesProvider.METHOD_GET_ENTRY_DATA; +import static com.android.settingslib.drawer.EntriesProvider.METHOD_GET_PROVIDER_ICON; +import static com.android.settingslib.drawer.EntriesProvider.METHOD_GET_SWITCH_DATA; +import static com.android.settingslib.drawer.EntriesProvider.METHOD_IS_CHECKED; +import static com.android.settingslib.drawer.EntriesProvider.METHOD_ON_CHECKED_CHANGED; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_PENDING_INTENT; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; + +import static com.google.common.truth.Truth.assertThat; + +import android.app.PendingIntent; +import android.content.Context; +import android.content.Intent; +import android.content.pm.ProviderInfo; +import android.os.Bundle; + +import com.android.settingslib.drawer.EntryController.MetaData; +import com.android.settingslib.drawer.PrimarySwitchControllerTest.TestPrimarySwitchController; + +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.robolectric.RobolectricTestRunner; +import org.robolectric.RuntimeEnvironment; + +import java.util.ArrayList; +import java.util.List; + +@RunWith(RobolectricTestRunner.class) +public class EntriesProviderTest { + + @Rule + public final ExpectedException thrown = ExpectedException.none(); + + private Context mContext; + private ProviderInfo mProviderInfo; + + private TestEntriesProvider mEntriesProvider; + + @Before + public void setUp() { + mContext = RuntimeEnvironment.application; + mEntriesProvider = new TestEntriesProvider(); + mProviderInfo = new ProviderInfo(); + mProviderInfo.authority = "auth"; + } + + @Test + public void attachInfo_noController_shouldThrowIllegalArgumentException() { + thrown.expect(IllegalArgumentException.class); + + mEntriesProvider.attachInfo(mContext, mProviderInfo); + } + + @Test + public void attachInfo_NoKeyInController_shouldThrowNullPointerException() { + thrown.expect(NullPointerException.class); + final TestEntryController controller = new TestEntryController(); + mEntriesProvider.addController(controller); + + mEntriesProvider.attachInfo(mContext, mProviderInfo); + } + + @Test + public void attachInfo_NoMetaDataInController_shouldThrowNullPointerException() { + thrown.expect(NullPointerException.class); + final TestEntryController controller = new TestEntryController(); + controller.setKey("123"); + mEntriesProvider.addController(controller); + + mEntriesProvider.attachInfo(mContext, mProviderInfo); + } + + @Test + public void attachInfo_duplicateKey_shouldThrowIllegalArgumentException() { + thrown.expect(IllegalArgumentException.class); + final TestEntryController controller1 = new TestEntryController(); + final TestEntryController controller2 = new TestEntryController(); + controller1.setKey("123"); + controller2.setKey("123"); + controller1.setMetaData(new MetaData("category")); + controller2.setMetaData(new MetaData("category")); + mEntriesProvider.addController(controller1); + mEntriesProvider.addController(controller2); + + mEntriesProvider.attachInfo(mContext, mProviderInfo); + } + + @Test + public void attachInfo_hasDifferentControllers_shouldNotThrowException() { + final TestEntryController controller1 = new TestEntryController(); + final TestEntryController controller2 = new TestEntryController(); + controller1.setKey("123"); + controller2.setKey("456"); + controller1.setMetaData(new MetaData("category")); + controller2.setMetaData(new MetaData("category")); + mEntriesProvider.addController(controller1); + mEntriesProvider.addController(controller2); + + mEntriesProvider.attachInfo(mContext, mProviderInfo); + } + + @Test + public void getEntryData_shouldNotReturnPrimarySwitchData() { + final EntryController controller = new TestPrimarySwitchController("123"); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + final Bundle switchData = mEntriesProvider.call(METHOD_GET_ENTRY_DATA, "uri", + null /* extras*/); + + final ArrayList<Bundle> dataList = switchData.getParcelableArrayList(EXTRA_ENTRY_DATA); + assertThat(dataList).isEmpty(); + } + + @Test + public void getEntryData_shouldReturnDataList() { + final TestEntryController controller = new TestEntryController(); + final PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(), 0); + controller.setKey("123"); + controller.setMetaData(new MetaData("category").setPendingIntent(pendingIntent)); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + final Bundle entryData = mEntriesProvider.call(METHOD_GET_ENTRY_DATA, "uri", + null /* extras*/); + + final ArrayList<Bundle> dataList = entryData.getParcelableArrayList(EXTRA_ENTRY_DATA); + assertThat(dataList).hasSize(1); + assertThat(dataList.get(0).getString(META_DATA_PREFERENCE_KEYHINT)).isEqualTo("123"); + assertThat(dataList.get(0).getParcelable(META_DATA_PREFERENCE_PENDING_INTENT, + PendingIntent.class)) + .isEqualTo(pendingIntent); + } + + @Test + public void getSwitchData_shouldReturnDataList() { + final TestEntryController controller = new TestEntryController(); + final PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(), 0); + controller.setKey("123"); + controller.setMetaData(new MetaData("category").setPendingIntent(pendingIntent)); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + final Bundle entryData = mEntriesProvider.call(METHOD_GET_SWITCH_DATA, "uri", + null /* extras*/); + + final ArrayList<Bundle> dataList = entryData.getParcelableArrayList(EXTRA_SWITCH_DATA); + assertThat(dataList).hasSize(1); + assertThat(dataList.get(0).getString(META_DATA_PREFERENCE_KEYHINT)).isEqualTo("123"); + assertThat(dataList.get(0).getParcelable(META_DATA_PREFERENCE_PENDING_INTENT, + PendingIntent.class)) + .isEqualTo(pendingIntent); + } + + @Test + public void getEntryDataByKey_shouldReturnData() { + final Bundle extras = new Bundle(); + extras.putString(META_DATA_PREFERENCE_KEYHINT, "123"); + final TestEntryController controller = new TestEntryController(); + controller.setKey("123"); + controller.setMetaData(new MetaData("category")); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + final Bundle entryData = mEntriesProvider.call(METHOD_GET_ENTRY_DATA, "uri", extras); + + assertThat(entryData.getString(META_DATA_PREFERENCE_KEYHINT)).isEqualTo("123"); + } + + @Test + public void getSwitchDataByKey_shouldReturnData() { + final Bundle extras = new Bundle(); + extras.putString(META_DATA_PREFERENCE_KEYHINT, "123"); + final TestEntryController controller = new TestEntryController(); + controller.setKey("123"); + controller.setMetaData(new MetaData("category")); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + final Bundle entryData = mEntriesProvider.call(METHOD_GET_SWITCH_DATA, "uri", extras); + + assertThat(entryData.getString(META_DATA_PREFERENCE_KEYHINT)).isEqualTo("123"); + } + + @Test + public void isSwitchChecked_shouldReturnCheckedState() { + final Bundle extras = new Bundle(); + extras.putString(META_DATA_PREFERENCE_KEYHINT, "123"); + final TestSwitchController controller = new TestSwitchController(); + controller.setKey("123"); + controller.setMetaData(new MetaData("category")); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + controller.setSwitchChecked(true); + Bundle result = mEntriesProvider.call(METHOD_IS_CHECKED, "uri", extras); + + assertThat(result.getBoolean(EXTRA_SWITCH_CHECKED_STATE)).isTrue(); + + controller.setSwitchChecked(false); + result = mEntriesProvider.call(METHOD_IS_CHECKED, "uri", extras); + + assertThat(result.getBoolean(EXTRA_SWITCH_CHECKED_STATE)).isFalse(); + } + + @Test + public void getProviderIcon_noImplementInterface_shouldReturnNull() { + final Bundle extras = new Bundle(); + extras.putString(META_DATA_PREFERENCE_KEYHINT, "123"); + final TestEntryController controller = new TestEntryController(); + controller.setKey("123"); + controller.setMetaData(new MetaData("category")); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + final Bundle iconBundle = mEntriesProvider.call(METHOD_GET_PROVIDER_ICON, "uri", extras); + + assertThat(iconBundle).isNull(); + } + + @Test + public void getProviderIcon_implementInterface_shouldReturnIcon() { + final Bundle extras = new Bundle(); + extras.putString(META_DATA_PREFERENCE_KEYHINT, "123"); + final TestEntryController controller = new TestDynamicController(); + controller.setKey("123"); + controller.setMetaData(new MetaData("category")); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + final Bundle iconBundle = mEntriesProvider.call(METHOD_GET_PROVIDER_ICON, "uri", extras); + + assertThat(iconBundle).isEqualTo(TestDynamicController.ICON_BUNDLE); + } + + @Test + public void getDynamicTitle_noImplementInterface_shouldReturnNull() { + final Bundle extras = new Bundle(); + extras.putString(META_DATA_PREFERENCE_KEYHINT, "123"); + final TestEntryController controller = new TestEntryController(); + controller.setKey("123"); + controller.setMetaData(new MetaData("category")); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + final Bundle result = mEntriesProvider.call(METHOD_GET_DYNAMIC_TITLE, "uri", extras); + + assertThat(result).isNull(); + } + + @Test + public void getDynamicTitle_implementInterface_shouldReturnTitle() { + final Bundle extras = new Bundle(); + extras.putString(META_DATA_PREFERENCE_KEYHINT, "123"); + final TestEntryController controller = new TestDynamicController(); + controller.setKey("123"); + controller.setMetaData(new MetaData("category")); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + final Bundle result = mEntriesProvider.call(METHOD_GET_DYNAMIC_TITLE, "uri", extras); + + assertThat(result.getString(META_DATA_PREFERENCE_TITLE)) + .isEqualTo(TestDynamicController.TITLE); + } + + @Test + public void getDynamicSummary_noImplementInterface_shouldReturnNull() { + final Bundle extras = new Bundle(); + extras.putString(META_DATA_PREFERENCE_KEYHINT, "123"); + final TestEntryController controller = new TestEntryController(); + controller.setKey("123"); + controller.setMetaData(new MetaData("category")); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + final Bundle result = mEntriesProvider.call(METHOD_GET_DYNAMIC_SUMMARY, "uri", extras); + + assertThat(result).isNull(); + } + + @Test + public void getDynamicSummary_implementInterface_shouldReturnSummary() { + final Bundle extras = new Bundle(); + extras.putString(META_DATA_PREFERENCE_KEYHINT, "123"); + final TestEntryController controller = new TestDynamicController(); + controller.setKey("123"); + controller.setMetaData(new MetaData("category")); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + final Bundle result = mEntriesProvider.call(METHOD_GET_DYNAMIC_SUMMARY, "uri", extras); + + assertThat(result.getString(META_DATA_PREFERENCE_SUMMARY)) + .isEqualTo(TestDynamicController.SUMMARY); + } + + @Test + public void onSwitchCheckedChangedSuccess_shouldReturnNoError() { + final Bundle extras = new Bundle(); + extras.putString(META_DATA_PREFERENCE_KEYHINT, "123"); + final TestSwitchController controller = new TestSwitchController(); + controller.setKey("123"); + controller.setMetaData(new MetaData("category")); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + final Bundle result = mEntriesProvider.call(METHOD_ON_CHECKED_CHANGED, "uri", extras); + + assertThat(result.getBoolean(EXTRA_SWITCH_SET_CHECKED_ERROR)).isFalse(); + } + + @Test + public void onSwitchCheckedChangedFailed_shouldReturnErrorMessage() { + final Bundle extras = new Bundle(); + extras.putString(META_DATA_PREFERENCE_KEYHINT, "123"); + final TestSwitchController controller = new TestSwitchController(); + controller.setKey("123"); + controller.setMetaData(new MetaData("category")); + controller.setSwitchErrorMessage("error"); + mEntriesProvider.addController(controller); + mEntriesProvider.attachInfo(mContext, mProviderInfo); + + final Bundle result = mEntriesProvider.call(METHOD_ON_CHECKED_CHANGED, "uri", extras); + + assertThat(result.getBoolean(EXTRA_SWITCH_SET_CHECKED_ERROR)).isTrue(); + assertThat(result.getString(EXTRA_SWITCH_SET_CHECKED_ERROR_MESSAGE)).isEqualTo("error"); + } + + private static class TestEntriesProvider extends EntriesProvider { + + private List<EntryController> mControllers; + + @Override + protected List<EntryController> createEntryControllers() { + return mControllers; + } + + void addController(EntryController controller) { + if (mControllers == null) { + mControllers = new ArrayList<>(); + } + mControllers.add(controller); + } + } + + private static class TestEntryController extends EntryController { + + private String mKey; + private MetaData mMetaData; + + @Override + public String getKey() { + return mKey; + } + + @Override + protected MetaData getMetaData() { + return mMetaData; + } + + void setKey(String key) { + mKey = key; + } + + void setMetaData(MetaData metaData) { + mMetaData = metaData; + } + } + + private static class TestSwitchController extends EntryController implements ProviderSwitch { + + private String mKey; + private MetaData mMetaData; + private boolean mChecked; + private String mErrorMsg; + + @Override + public String getKey() { + return mKey; + } + + @Override + protected MetaData getMetaData() { + return mMetaData; + } + + @Override + public boolean isSwitchChecked() { + return mChecked; + } + + @Override + public boolean onSwitchCheckedChanged(boolean checked) { + return mErrorMsg == null ? true : false; + } + + @Override + public String getSwitchErrorMessage(boolean attemptedChecked) { + return mErrorMsg; + } + + void setKey(String key) { + mKey = key; + } + + void setMetaData(MetaData metaData) { + mMetaData = metaData; + } + + void setSwitchChecked(boolean checked) { + mChecked = checked; + } + + void setSwitchErrorMessage(String errorMsg) { + mErrorMsg = errorMsg; + } + } + + private static class TestDynamicController extends TestEntryController + implements ProviderIcon, DynamicTitle, DynamicSummary { + + static final String TITLE = "title"; + static final String SUMMARY = "summary"; + static final Bundle ICON_BUNDLE = new Bundle(); + + @Override + public Bundle getProviderIcon() { + return ICON_BUNDLE; + } + + @Override + public String getDynamicTitle() { + return TITLE; + } + + @Override + public String getDynamicSummary() { + return SUMMARY; + } + } +} diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/ProviderTileTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/ProviderTileTest.java index abfb407d749e..80f9efb8b5ac 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/ProviderTileTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/ProviderTileTest.java @@ -17,20 +17,24 @@ package com.android.settingslib.drawer; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_ORDER; import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_GROUP_KEY; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SWITCH_URI; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_TITLE; import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL; import static com.android.settingslib.drawer.TileUtils.PROFILE_PRIMARY; import static com.google.common.truth.Truth.assertThat; +import android.app.PendingIntent; import android.content.Context; import android.content.Intent; import android.content.pm.ApplicationInfo; import android.content.pm.ProviderInfo; import android.content.pm.ResolveInfo; import android.os.Bundle; +import android.os.UserHandle; import org.junit.Before; import org.junit.Rule; @@ -173,13 +177,93 @@ public class ProviderTileTest { assertThat(tile.mLastUpdateTime).isNotEqualTo(staleTimeStamp); } + @Test + public void hasPendingIntent_empty_returnsFalse() { + final Tile tile = new ProviderTile(mProviderInfo, "category", mMetaData); + + assertThat(tile.hasPendingIntent()).isFalse(); + } + + @Test + public void hasPendingIntent_notEmpty_returnsTrue() { + final Tile tile = new ProviderTile(mProviderInfo, "category", mMetaData); + tile.pendingIntentMap.put( + UserHandle.CURRENT, PendingIntent.getActivity(mContext, 0, new Intent(), 0)); + + assertThat(tile.hasPendingIntent()).isTrue(); + } + + @Test + public void hasGroupKey_empty_returnsFalse() { + final Tile tile = new ProviderTile(mProviderInfo, "category", mMetaData); + + assertThat(tile.hasGroupKey()).isFalse(); + } + + @Test + public void hasGroupKey_notEmpty_returnsTrue() { + mMetaData.putString(META_DATA_PREFERENCE_GROUP_KEY, "test_key"); + final Tile tile = new ProviderTile(mProviderInfo, "category", mMetaData); + + assertThat(tile.hasGroupKey()).isTrue(); + } + + @Test + public void getGroupKey_empty_returnsNull() { + final Tile tile = new ProviderTile(mProviderInfo, "category", mMetaData); + + assertThat(tile.getGroupKey()).isNull(); + } + + @Test + public void getGroupKey_notEmpty_returnsValue() { + mMetaData.putString(META_DATA_PREFERENCE_GROUP_KEY, "test_key"); + final Tile tile = new ProviderTile(mProviderInfo, "category", mMetaData); + + assertThat(tile.getGroupKey()).isEqualTo("test_key"); + } + + @Test + public void getType_withSwitch_returnsSwitch() { + mMetaData.putString(META_DATA_PREFERENCE_SWITCH_URI, "test://testabc/"); + final Tile tile = new ProviderTile(mProviderInfo, "category", mMetaData); + + assertThat(tile.getType()).isEqualTo(Tile.Type.SWITCH); + } + + @Test + public void getType_withSwitchAndPendingIntent_returnsSwitchWithAction() { + mMetaData.putString(META_DATA_PREFERENCE_SWITCH_URI, "test://testabc/"); + final Tile tile = new ProviderTile(mProviderInfo, "category", mMetaData); + tile.pendingIntentMap.put( + UserHandle.CURRENT, PendingIntent.getActivity(mContext, 0, new Intent(), 0)); + + assertThat(tile.getType()).isEqualTo(Tile.Type.SWITCH_WITH_ACTION); + } + + @Test + public void getType_withPendingIntent_returnsExternalAction() { + final Tile tile = new ProviderTile(mProviderInfo, "category", mMetaData); + tile.pendingIntentMap.put( + UserHandle.CURRENT, PendingIntent.getActivity(mContext, 0, new Intent(), 0)); + + assertThat(tile.getType()).isEqualTo(Tile.Type.EXTERNAL_ACTION); + } + + @Test + public void getType_withoutSwitchAndPendingIntent_returnsGroup() { + final Tile tile = new ProviderTile(mProviderInfo, "category", mMetaData); + + assertThat(tile.getType()).isEqualTo(Tile.Type.GROUP); + } + @Implements(TileUtils.class) private static class ShadowTileUtils { private static Bundle sMetaData; @Implementation - protected static Bundle getSwitchDataFromProvider(Context context, String authority, + protected static Bundle getEntryDataFromProvider(Context context, String authority, String key) { return sMetaData; } diff --git a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java index 906e06e81e2b..20864664e512 100644 --- a/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java +++ b/packages/SettingsLib/tests/robotests/src/com/android/settingslib/drawer/TileUtilsTest.java @@ -21,6 +21,7 @@ import static com.android.settingslib.drawer.TileUtils.META_DATA_KEY_PROFILE; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_ICON_URI; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_KEYHINT; +import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_PENDING_INTENT; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY; import static com.android.settingslib.drawer.TileUtils.META_DATA_PREFERENCE_SUMMARY_URI; import static com.android.settingslib.drawer.TileUtils.PROFILE_ALL; @@ -40,6 +41,7 @@ import static org.mockito.Mockito.when; import static org.robolectric.RuntimeEnvironment.application; import android.app.ActivityManager; +import android.app.PendingIntent; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; @@ -350,6 +352,53 @@ public class TileUtilsTest { assertThat(outTiles).isEmpty(); } + @Test + public void loadTilesForAction_multipleUserProfiles_updatesUserHandle() { + Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>(); + List<Tile> outTiles = new ArrayList<>(); + List<ResolveInfo> info = new ArrayList<>(); + ResolveInfo resolveInfo = newInfo(true, null /* category */, null, URI_GET_ICON, + URI_GET_SUMMARY, null, 123, PROFILE_ALL); + info.add(resolveInfo); + + when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt())) + .thenReturn(info); + + TileUtils.loadTilesForAction(mContext, UserHandle.CURRENT, IA_SETTINGS_ACTION, + addedCache, null /* defaultCategory */, outTiles, false /* requiresSettings */); + TileUtils.loadTilesForAction(mContext, new UserHandle(10), IA_SETTINGS_ACTION, + addedCache, null /* defaultCategory */, outTiles, false /* requiresSettings */); + + assertThat(outTiles).hasSize(1); + assertThat(outTiles.get(0).userHandle) + .containsExactly(UserHandle.CURRENT, new UserHandle(10)); + } + + @Test + public void loadTilesForAction_withPendingIntent_updatesPendingIntentMap() { + Map<Pair<String, String>, Tile> addedCache = new ArrayMap<>(); + List<Tile> outTiles = new ArrayList<>(); + List<ResolveInfo> info = new ArrayList<>(); + ResolveInfo resolveInfo = newInfo(true, null /* category */, null, URI_GET_ICON, + URI_GET_SUMMARY, null, 123, PROFILE_ALL); + PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0, new Intent(), 0); + resolveInfo.activityInfo.metaData + .putParcelable(META_DATA_PREFERENCE_PENDING_INTENT, pendingIntent); + info.add(resolveInfo); + + when(mPackageManager.queryIntentActivitiesAsUser(any(Intent.class), anyInt(), anyInt())) + .thenReturn(info); + + TileUtils.loadTilesForAction(mContext, UserHandle.CURRENT, IA_SETTINGS_ACTION, + addedCache, null /* defaultCategory */, outTiles, false /* requiresSettings */); + TileUtils.loadTilesForAction(mContext, new UserHandle(10), IA_SETTINGS_ACTION, + addedCache, null /* defaultCategory */, outTiles, false /* requiresSettings */); + + assertThat(outTiles).hasSize(1); + assertThat(outTiles.get(0).pendingIntentMap).containsExactly( + UserHandle.CURRENT, pendingIntent, new UserHandle(10), pendingIntent); + } + public static ResolveInfo newInfo(boolean systemApp, String category) { return newInfo(systemApp, category, null); } @@ -424,7 +473,7 @@ public class TileUtilsTest { private static Bundle sMetaData; @Implementation - protected static List<Bundle> getSwitchDataFromProvider(Context context, String authority) { + protected static List<Bundle> getEntryDataFromProvider(Context context, String authority) { return Arrays.asList(sMetaData); } diff --git a/packages/SystemUI/res/values-af/strings.xml b/packages/SystemUI/res/values-af/strings.xml index 462fca68153b..70d4cd0f5e4b 100644 --- a/packages/SystemUI/res/values-af/strings.xml +++ b/packages/SystemUI/res/values-af/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Instellings"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> deur <xliff:g id="ARTIST_NAME">%2$s</xliff:g> speel tans vanaf <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> van <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Speel"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Onderbreek"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Vorige snit"</string> diff --git a/packages/SystemUI/res/values-am/strings.xml b/packages/SystemUI/res/values-am/strings.xml index f8f13df325a2..b484d8bd7a3e 100644 --- a/packages/SystemUI/res/values-am/strings.xml +++ b/packages/SystemUI/res/values-am/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"ቅንብሮች"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> በ<xliff:g id="ARTIST_NAME">%2$s</xliff:g> ከ<xliff:g id="APP_LABEL">%3$s</xliff:g> እየተጫወተ ነው"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> ከ<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"አጫውት"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"ላፍታ አቁም"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"ቀዳሚ ትራክ"</string> diff --git a/packages/SystemUI/res/values-ar/strings.xml b/packages/SystemUI/res/values-ar/strings.xml index a0d43e9d05b1..bc4ec878e664 100644 --- a/packages/SystemUI/res/values-ar/strings.xml +++ b/packages/SystemUI/res/values-ar/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"الإعدادات"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"يتم تشغيل <xliff:g id="SONG_NAME">%1$s</xliff:g> للفنان <xliff:g id="ARTIST_NAME">%2$s</xliff:g> من تطبيق <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> من إجمالي <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"تشغيل"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"إيقاف مؤقت"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"المقطع الصوتي السابق"</string> diff --git a/packages/SystemUI/res/values-as/strings.xml b/packages/SystemUI/res/values-as/strings.xml index bbc88ecc2b3c..e69fa1663a57 100644 --- a/packages/SystemUI/res/values-as/strings.xml +++ b/packages/SystemUI/res/values-as/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"ছেটিং"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g>ত <xliff:g id="ARTIST_NAME">%2$s</xliff:g>ৰ <xliff:g id="SONG_NAME">%1$s</xliff:g> গীতটো প্লে’ হৈ আছে"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>ৰ <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"প্লে’ কৰক"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"পজ কৰক"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"পূৰ্বৱৰ্তী ট্ৰেক"</string> diff --git a/packages/SystemUI/res/values-az/strings.xml b/packages/SystemUI/res/values-az/strings.xml index b395f6ecc46a..740d5f0d43ce 100644 --- a/packages/SystemUI/res/values-az/strings.xml +++ b/packages/SystemUI/res/values-az/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Ayarlar"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> tərəfindən <xliff:g id="SONG_NAME">%1$s</xliff:g> <xliff:g id="APP_LABEL">%3$s</xliff:g> tətbiqindən oxudulur"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Oxudun"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Durdurun"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Əvvəlki trek"</string> diff --git a/packages/SystemUI/res/values-b+sr+Latn/strings.xml b/packages/SystemUI/res/values-b+sr+Latn/strings.xml index cf9499c7aa6e..f4b9e373751b 100644 --- a/packages/SystemUI/res/values-b+sr+Latn/strings.xml +++ b/packages/SystemUI/res/values-b+sr+Latn/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Podešavanja"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> izvođača <xliff:g id="ARTIST_NAME">%2$s</xliff:g> se pušta iz aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> od <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Pusti"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pauziraj"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Prethodna pesma"</string> diff --git a/packages/SystemUI/res/values-be/strings.xml b/packages/SystemUI/res/values-be/strings.xml index 7c438124ca7e..8ef6510648aa 100644 --- a/packages/SystemUI/res/values-be/strings.xml +++ b/packages/SystemUI/res/values-be/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Налады"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"У праграме \"<xliff:g id="APP_LABEL">%3$s</xliff:g>\" прайграецца кампазіцыя \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\", выканаўца – <xliff:g id="ARTIST_NAME">%2$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> з <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Прайграць"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Прыпыніць"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Папярэдні трэк"</string> diff --git a/packages/SystemUI/res/values-bg/strings.xml b/packages/SystemUI/res/values-bg/strings.xml index 048195513b7a..5291e09750f7 100644 --- a/packages/SystemUI/res/values-bg/strings.xml +++ b/packages/SystemUI/res/values-bg/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Настройки"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> на <xliff:g id="ARTIST_NAME">%2$s</xliff:g> се възпроизвежда от <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> от <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Пускане"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Пауза"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Предишен запис"</string> diff --git a/packages/SystemUI/res/values-bn/strings.xml b/packages/SystemUI/res/values-bn/strings.xml index 9d180c9f840d..1b1c6fdc7b4b 100644 --- a/packages/SystemUI/res/values-bn/strings.xml +++ b/packages/SystemUI/res/values-bn/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"সেটিংস"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g>-এর <xliff:g id="SONG_NAME">%1$s</xliff:g> গানটি <xliff:g id="APP_LABEL">%3$s</xliff:g> অ্যাপে চলছে"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>টির মধ্যে <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>টি"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"চালান"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"পজ করুন"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"আগের ট্র্যাক"</string> diff --git a/packages/SystemUI/res/values-bs/strings.xml b/packages/SystemUI/res/values-bs/strings.xml index 59f2049d8eca..b686633b54fe 100644 --- a/packages/SystemUI/res/values-bs/strings.xml +++ b/packages/SystemUI/res/values-bs/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Postavke"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Pjesma <xliff:g id="SONG_NAME">%1$s</xliff:g> izvođača <xliff:g id="ARTIST_NAME">%2$s</xliff:g> se reproducira pomoću aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> od <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Reproduciranje"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pauziranje"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Prethodna numera"</string> diff --git a/packages/SystemUI/res/values-ca/strings.xml b/packages/SystemUI/res/values-ca/strings.xml index 6469ee0d7a75..965f4571b463 100644 --- a/packages/SystemUI/res/values-ca/strings.xml +++ b/packages/SystemUI/res/values-ca/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Configuració"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>) s\'està reproduint des de l\'aplicació <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Reprodueix"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Posa en pausa"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Pista anterior"</string> diff --git a/packages/SystemUI/res/values-cs/strings.xml b/packages/SystemUI/res/values-cs/strings.xml index 2ae3623b698c..80afe6039192 100644 --- a/packages/SystemUI/res/values-cs/strings.xml +++ b/packages/SystemUI/res/values-cs/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Nastavení"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Skladba <xliff:g id="SONG_NAME">%1$s</xliff:g> od interpreta <xliff:g id="ARTIST_NAME">%2$s</xliff:g> hrajte z aplikace <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> z <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Přehrát"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pozastavit"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Předchozí skladba"</string> diff --git a/packages/SystemUI/res/values-da/strings.xml b/packages/SystemUI/res/values-da/strings.xml index ddf1d69f495f..7a6119fb38ec 100644 --- a/packages/SystemUI/res/values-da/strings.xml +++ b/packages/SystemUI/res/values-da/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Indstillinger"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> af <xliff:g id="ARTIST_NAME">%2$s</xliff:g> afspilles via <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> af <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Afspil"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Sæt på pause"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Afspil forrige"</string> diff --git a/packages/SystemUI/res/values-de/strings.xml b/packages/SystemUI/res/values-de/strings.xml index 07968a974045..4bff28c156de 100644 --- a/packages/SystemUI/res/values-de/strings.xml +++ b/packages/SystemUI/res/values-de/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Einstellungen"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> von <xliff:g id="ARTIST_NAME">%2$s</xliff:g> wird gerade über <xliff:g id="APP_LABEL">%3$s</xliff:g> wiedergegeben"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> von <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Wiedergeben"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausieren"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Vorheriger Titel"</string> diff --git a/packages/SystemUI/res/values-el/strings.xml b/packages/SystemUI/res/values-el/strings.xml index c9a514403fd7..9d9638a53a25 100644 --- a/packages/SystemUI/res/values-el/strings.xml +++ b/packages/SystemUI/res/values-el/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Ρυθμίσεις"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Γίνεται αναπαραγωγή του <xliff:g id="SONG_NAME">%1$s</xliff:g> από <xliff:g id="ARTIST_NAME">%2$s</xliff:g> στην εφαρμογή <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> από <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Αναπαραγωγή"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Παύση"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Προηγούμενο κομμάτι"</string> diff --git a/packages/SystemUI/res/values-en-rAU/strings.xml b/packages/SystemUI/res/values-en-rAU/strings.xml index c4b533987cbd..0965fe35f909 100644 --- a/packages/SystemUI/res/values-en-rAU/strings.xml +++ b/packages/SystemUI/res/values-en-rAU/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> of <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Play"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pause"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Previous track"</string> diff --git a/packages/SystemUI/res/values-en-rCA/strings.xml b/packages/SystemUI/res/values-en-rCA/strings.xml index fc790cfa4924..3b6899a63167 100644 --- a/packages/SystemUI/res/values-en-rCA/strings.xml +++ b/packages/SystemUI/res/values-en-rCA/strings.xml @@ -943,7 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> of <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> is running"</string> <string name="controls_media_button_play" msgid="2705068099607410633">"Play"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pause"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Previous track"</string> diff --git a/packages/SystemUI/res/values-en-rGB/strings.xml b/packages/SystemUI/res/values-en-rGB/strings.xml index c4b533987cbd..0965fe35f909 100644 --- a/packages/SystemUI/res/values-en-rGB/strings.xml +++ b/packages/SystemUI/res/values-en-rGB/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> of <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Play"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pause"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Previous track"</string> diff --git a/packages/SystemUI/res/values-en-rIN/strings.xml b/packages/SystemUI/res/values-en-rIN/strings.xml index c4b533987cbd..0965fe35f909 100644 --- a/packages/SystemUI/res/values-en-rIN/strings.xml +++ b/packages/SystemUI/res/values-en-rIN/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> of <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Play"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pause"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Previous track"</string> diff --git a/packages/SystemUI/res/values-en-rXC/strings.xml b/packages/SystemUI/res/values-en-rXC/strings.xml index bf97c99ca1c9..3f2b17199a12 100644 --- a/packages/SystemUI/res/values-en-rXC/strings.xml +++ b/packages/SystemUI/res/values-en-rXC/strings.xml @@ -943,7 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Settings"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> by <xliff:g id="ARTIST_NAME">%2$s</xliff:g> is playing from <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> of <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> is running"</string> <string name="controls_media_button_play" msgid="2705068099607410633">"Play"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pause"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Previous track"</string> diff --git a/packages/SystemUI/res/values-es-rUS/strings.xml b/packages/SystemUI/res/values-es-rUS/strings.xml index b3c678418775..d175e661e7b9 100644 --- a/packages/SystemUI/res/values-es-rUS/strings.xml +++ b/packages/SystemUI/res/values-es-rUS/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Configuración"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Se está reproduciendo <xliff:g id="SONG_NAME">%1$s</xliff:g>, de <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, en <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Reproducir"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausar"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Pista anterior"</string> diff --git a/packages/SystemUI/res/values-es/strings.xml b/packages/SystemUI/res/values-es/strings.xml index 5f30e0a2596d..31d451eb4bdb 100644 --- a/packages/SystemUI/res/values-es/strings.xml +++ b/packages/SystemUI/res/values-es/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Ajustes"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Se está reproduciendo <xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> en <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Reproducir"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausar"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Canción anterior"</string> diff --git a/packages/SystemUI/res/values-et/strings.xml b/packages/SystemUI/res/values-et/strings.xml index 4131d128e9c5..7d017927e588 100644 --- a/packages/SystemUI/res/values-et/strings.xml +++ b/packages/SystemUI/res/values-et/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Seaded"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> esitajalt <xliff:g id="ARTIST_NAME">%2$s</xliff:g> esitatakse rakenduses <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Esita"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Peata"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Eelmine lugu"</string> diff --git a/packages/SystemUI/res/values-eu/strings.xml b/packages/SystemUI/res/values-eu/strings.xml index c9f8707758df..ca6d85a8caf1 100644 --- a/packages/SystemUI/res/values-eu/strings.xml +++ b/packages/SystemUI/res/values-eu/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Ezarpenak"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>) ari da erreproduzitzen <xliff:g id="APP_LABEL">%3$s</xliff:g> bidez"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Erreproduzitu"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausatu"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Aurrekoa"</string> diff --git a/packages/SystemUI/res/values-fa/strings.xml b/packages/SystemUI/res/values-fa/strings.xml index a1d77a322f39..c9f2d6f20ff6 100644 --- a/packages/SystemUI/res/values-fa/strings.xml +++ b/packages/SystemUI/res/values-fa/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"تنظیمات"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> از <xliff:g id="ARTIST_NAME">%2$s</xliff:g> ازطریق <xliff:g id="APP_LABEL">%3$s</xliff:g> پخش میشود"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> از <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"پخش"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"توقف موقت"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"آهنگ قبلی"</string> diff --git a/packages/SystemUI/res/values-fi/strings.xml b/packages/SystemUI/res/values-fi/strings.xml index 971db376a04d..26dbaf592f5e 100644 --- a/packages/SystemUI/res/values-fi/strings.xml +++ b/packages/SystemUI/res/values-fi/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Asetukset"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> soittaa nyt tätä: <xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>)"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Toista"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Keskeytä"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Edellinen kappale"</string> diff --git a/packages/SystemUI/res/values-fr-rCA/strings.xml b/packages/SystemUI/res/values-fr-rCA/strings.xml index 8fed642a171b..e87c6a36a03f 100644 --- a/packages/SystemUI/res/values-fr-rCA/strings.xml +++ b/packages/SystemUI/res/values-fr-rCA/strings.xml @@ -982,8 +982,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Paramètres"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> par <xliff:g id="ARTIST_NAME">%2$s</xliff:g> est en cours de lecteur à partir de <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Faire jouer"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Interrompre"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Chanson précédente"</string> diff --git a/packages/SystemUI/res/values-fr/strings.xml b/packages/SystemUI/res/values-fr/strings.xml index ca38d2037a89..ee51853bdc6f 100644 --- a/packages/SystemUI/res/values-fr/strings.xml +++ b/packages/SystemUI/res/values-fr/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Paramètres"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> par <xliff:g id="ARTIST_NAME">%2$s</xliff:g> est en cours de lecture depuis <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> sur <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Lecture"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pause"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Titre précédent"</string> diff --git a/packages/SystemUI/res/values-gl/strings.xml b/packages/SystemUI/res/values-gl/strings.xml index 0f52fdb54e20..f9cf9b3deecd 100644 --- a/packages/SystemUI/res/values-gl/strings.xml +++ b/packages/SystemUI/res/values-gl/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Configuración"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Estase reproducindo <xliff:g id="SONG_NAME">%1$s</xliff:g>, de <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, en <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Reproducir"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pór en pausa"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Pista anterior"</string> diff --git a/packages/SystemUI/res/values-gu/strings.xml b/packages/SystemUI/res/values-gu/strings.xml index 06cec5d31542..7a73d8613612 100644 --- a/packages/SystemUI/res/values-gu/strings.xml +++ b/packages/SystemUI/res/values-gu/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"સેટિંગ"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> પર <xliff:g id="ARTIST_NAME">%2$s</xliff:g>નું <xliff:g id="SONG_NAME">%1$s</xliff:g> ગીત ચાલી રહ્યું છે"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>માંથી <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"ચલાવો"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"થોભાવો"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"પહેલાનો ટ્રૅક"</string> diff --git a/packages/SystemUI/res/values-hi/strings.xml b/packages/SystemUI/res/values-hi/strings.xml index d846509ecbaa..dd4a7684c4d2 100644 --- a/packages/SystemUI/res/values-hi/strings.xml +++ b/packages/SystemUI/res/values-hi/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"सेटिंग"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> पर, <xliff:g id="ARTIST_NAME">%2$s</xliff:g> का <xliff:g id="SONG_NAME">%1$s</xliff:g> चल रहा है"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> में से <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"चलाएं"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"रोकें"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"पिछला ट्रैक"</string> diff --git a/packages/SystemUI/res/values-hr/strings.xml b/packages/SystemUI/res/values-hr/strings.xml index 65b8f113cf85..5b0e411b831c 100644 --- a/packages/SystemUI/res/values-hr/strings.xml +++ b/packages/SystemUI/res/values-hr/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Postavke"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g>, <xliff:g id="ARTIST_NAME">%2$s</xliff:g> reproducira se putem aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> od <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Reproduciraj"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pauziraj"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Prethodni zapis"</string> diff --git a/packages/SystemUI/res/values-hu/strings.xml b/packages/SystemUI/res/values-hu/strings.xml index 3a619b86fee1..8fb8537c723e 100644 --- a/packages/SystemUI/res/values-hu/strings.xml +++ b/packages/SystemUI/res/values-hu/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Beállítások"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> <xliff:g id="SONG_NAME">%1$s</xliff:g> című száma hallható itt: <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>/<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Lejátszás"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Szünet"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Előző szám"</string> diff --git a/packages/SystemUI/res/values-hy/strings.xml b/packages/SystemUI/res/values-hy/strings.xml index cc8f7b7f7283..801efc441cba 100644 --- a/packages/SystemUI/res/values-hy/strings.xml +++ b/packages/SystemUI/res/values-hy/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Կարգավորումներ"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Այժմ նվագարկվում է <xliff:g id="SONG_NAME">%1$s</xliff:g> երգը <xliff:g id="ARTIST_NAME">%2$s</xliff:g>-ի կատարմամբ <xliff:g id="APP_LABEL">%3$s</xliff:g> հավելվածից"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>՝ <xliff:g id="TOTAL_TIME">%2$s</xliff:g>-ից"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Նվագարկել"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Դադարեցնել"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Նախորդ կատարումը"</string> diff --git a/packages/SystemUI/res/values-in/strings.xml b/packages/SystemUI/res/values-in/strings.xml index 1b5817dd07df..6a95903dc32c 100644 --- a/packages/SystemUI/res/values-in/strings.xml +++ b/packages/SystemUI/res/values-in/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Setelan"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> oleh <xliff:g id="ARTIST_NAME">%2$s</xliff:g> sedang diputar dari <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> dari <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Putar"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Jeda"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Lagu sebelumnya"</string> diff --git a/packages/SystemUI/res/values-is/strings.xml b/packages/SystemUI/res/values-is/strings.xml index 574c2b13204f..31d9b415483b 100644 --- a/packages/SystemUI/res/values-is/strings.xml +++ b/packages/SystemUI/res/values-is/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Stillingar"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> með <xliff:g id="ARTIST_NAME">%2$s</xliff:g> er í spilun á <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> af <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Spila"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Gera hlé"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Fyrra lag"</string> diff --git a/packages/SystemUI/res/values-it/strings.xml b/packages/SystemUI/res/values-it/strings.xml index e062db5a9322..6e6bef90917d 100644 --- a/packages/SystemUI/res/values-it/strings.xml +++ b/packages/SystemUI/res/values-it/strings.xml @@ -943,7 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Impostazioni"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> di <xliff:g id="ARTIST_NAME">%2$s</xliff:g> è in riproduzione da <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> di <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> è in esecuzione"</string> <string name="controls_media_button_play" msgid="2705068099607410633">"Riproduci"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Metti in pausa"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Traccia precedente"</string> diff --git a/packages/SystemUI/res/values-iw/strings.xml b/packages/SystemUI/res/values-iw/strings.xml index e6fb518316f5..ad26a40bb3b3 100644 --- a/packages/SystemUI/res/values-iw/strings.xml +++ b/packages/SystemUI/res/values-iw/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"הגדרות"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> של <xliff:g id="ARTIST_NAME">%2$s</xliff:g> מופעל מ-<xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> מתוך <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"הפעלה"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"השהיה"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"הטראק הקודם"</string> diff --git a/packages/SystemUI/res/values-ja/strings.xml b/packages/SystemUI/res/values-ja/strings.xml index 8d7a2875ccc6..040f6b040279 100644 --- a/packages/SystemUI/res/values-ja/strings.xml +++ b/packages/SystemUI/res/values-ja/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"設定"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g>(アーティスト名: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>)が <xliff:g id="APP_LABEL">%3$s</xliff:g> で再生中"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"再生"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"一時停止"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"前のトラック"</string> diff --git a/packages/SystemUI/res/values-ka/strings.xml b/packages/SystemUI/res/values-ka/strings.xml index e8afb4055d28..a7acb78ecd84 100644 --- a/packages/SystemUI/res/values-ka/strings.xml +++ b/packages/SystemUI/res/values-ka/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"პარამეტრები"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g>, <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, უკრავს <xliff:g id="APP_LABEL">%3$s</xliff:g>-დან"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>-დან <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"დაკვრა"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"პაუზა"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"წინა ჩანაწერი"</string> diff --git a/packages/SystemUI/res/values-kk/strings.xml b/packages/SystemUI/res/values-kk/strings.xml index 2f990575e522..23174547c4df 100644 --- a/packages/SystemUI/res/values-kk/strings.xml +++ b/packages/SystemUI/res/values-kk/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Параметрлер"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> қолданбасында <xliff:g id="ARTIST_NAME">%2$s</xliff:g> орындайтын \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\" әні ойнатылуда."</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>/<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Ойнату"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Кідірту"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Алдыңғы трек"</string> diff --git a/packages/SystemUI/res/values-km/strings.xml b/packages/SystemUI/res/values-km/strings.xml index 065187199446..ed82b8d33fd5 100644 --- a/packages/SystemUI/res/values-km/strings.xml +++ b/packages/SystemUI/res/values-km/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"ការកំណត់"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ច្រៀងដោយ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> កំពុងចាក់ពី <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> នៃ <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"ចាក់"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"ផ្អាក"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"ចម្រៀងមុន"</string> diff --git a/packages/SystemUI/res/values-kn/strings.xml b/packages/SystemUI/res/values-kn/strings.xml index 45ee97c29d4d..4ca1495ffc89 100644 --- a/packages/SystemUI/res/values-kn/strings.xml +++ b/packages/SystemUI/res/values-kn/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"ಸೆಟ್ಟಿಂಗ್ಗಳು"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> ಅವರ <xliff:g id="SONG_NAME">%1$s</xliff:g> ಹಾಡನ್ನು <xliff:g id="APP_LABEL">%3$s</xliff:g> ನಲ್ಲಿ ಪ್ಲೇ ಮಾಡಲಾಗುತ್ತಿದೆ"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> ರಲ್ಲಿ <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"ಪ್ಲೇ ಮಾಡಿ"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"ವಿರಾಮಗೊಳಿಸಿ"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"ಹಿಂದಿನ ಟ್ರ್ಯಾಕ್"</string> diff --git a/packages/SystemUI/res/values-ko/strings.xml b/packages/SystemUI/res/values-ko/strings.xml index cdb67aad67ed..e3c2a65445bc 100644 --- a/packages/SystemUI/res/values-ko/strings.xml +++ b/packages/SystemUI/res/values-ko/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"설정"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g>에서 <xliff:g id="ARTIST_NAME">%2$s</xliff:g>의 <xliff:g id="SONG_NAME">%1$s</xliff:g> 재생 중"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"재생"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"일시중지"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"이전 트랙"</string> diff --git a/packages/SystemUI/res/values-ky/strings.xml b/packages/SystemUI/res/values-ky/strings.xml index 69118b08c031..604aaadff4ef 100644 --- a/packages/SystemUI/res/values-ky/strings.xml +++ b/packages/SystemUI/res/values-ky/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Параметрлер"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ыры (аткаруучу: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>) <xliff:g id="APP_LABEL">%3$s</xliff:g> колдонмосунан ойнотулуп жатат"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> ичинен <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Ойнотуу"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Тындыруу"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Мурунку трек"</string> diff --git a/packages/SystemUI/res/values-lo/strings.xml b/packages/SystemUI/res/values-lo/strings.xml index 72dd7fa7c524..05364072d81c 100644 --- a/packages/SystemUI/res/values-lo/strings.xml +++ b/packages/SystemUI/res/values-lo/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"ການຕັ້ງຄ່າ"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ໂດຍ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> ກຳລັງຫຼິ້ນຈາກ <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> ຈາກ <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"ຫຼິ້ນ"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"ຢຸດຊົ່ວຄາວ"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"ເພງກ່ອນໜ້າ"</string> diff --git a/packages/SystemUI/res/values-lt/strings.xml b/packages/SystemUI/res/values-lt/strings.xml index 44c14930fa93..de4517e73e5e 100644 --- a/packages/SystemUI/res/values-lt/strings.xml +++ b/packages/SystemUI/res/values-lt/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Nustatymai"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> – „<xliff:g id="SONG_NAME">%1$s</xliff:g>“ leidžiama iš „<xliff:g id="APP_LABEL">%3$s</xliff:g>“"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> iš <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Paleisti"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pristabdyti"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Ankstesnis takelis"</string> diff --git a/packages/SystemUI/res/values-lv/strings.xml b/packages/SystemUI/res/values-lv/strings.xml index 603a7eb33f47..7fcd3412db48 100644 --- a/packages/SystemUI/res/values-lv/strings.xml +++ b/packages/SystemUI/res/values-lv/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Iestatījumi"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Tiek atskaņots fails “<xliff:g id="SONG_NAME">%1$s</xliff:g>” (izpildītājs: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>) no lietotnes <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> no <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Atskaņot"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Apturēt"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Iepriekšējais ieraksts"</string> diff --git a/packages/SystemUI/res/values-mk/strings.xml b/packages/SystemUI/res/values-mk/strings.xml index 962fb6ab7f1b..cd68cd7b7154 100644 --- a/packages/SystemUI/res/values-mk/strings.xml +++ b/packages/SystemUI/res/values-mk/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Поставки"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> од <xliff:g id="ARTIST_NAME">%2$s</xliff:g> е пуштено на <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> од <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Пушти"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Пауза"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Претходна песна"</string> diff --git a/packages/SystemUI/res/values-ml/strings.xml b/packages/SystemUI/res/values-ml/strings.xml index 023386bb31e8..024cf71e0277 100644 --- a/packages/SystemUI/res/values-ml/strings.xml +++ b/packages/SystemUI/res/values-ml/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"ക്രമീകരണം"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> എന്ന ആർട്ടിസ്റ്റിന്റെ <xliff:g id="SONG_NAME">%1$s</xliff:g> എന്ന ഗാനം <xliff:g id="APP_LABEL">%3$s</xliff:g> ആപ്പിൽ പ്ലേ ചെയ്യുന്നു"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>-ൽ <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"പ്ലേ ചെയ്യുക"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"താൽക്കാലികമായി നിർത്തുക"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"മുമ്പത്തെ ട്രാക്ക്"</string> diff --git a/packages/SystemUI/res/values-mn/strings.xml b/packages/SystemUI/res/values-mn/strings.xml index b8d30070fb31..f21d1fd2b93f 100644 --- a/packages/SystemUI/res/values-mn/strings.xml +++ b/packages/SystemUI/res/values-mn/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Тохиргоо"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> дээр тоглуулж буй <xliff:g id="ARTIST_NAME">%2$s</xliff:g>-н <xliff:g id="SONG_NAME">%1$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>-н <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Тоглуулах"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Түр зогсоох"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Өмнөх бичлэг"</string> diff --git a/packages/SystemUI/res/values-mr/strings.xml b/packages/SystemUI/res/values-mr/strings.xml index b1b77eab14d6..24407cc412fd 100644 --- a/packages/SystemUI/res/values-mr/strings.xml +++ b/packages/SystemUI/res/values-mr/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"सेटिंग्ज"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> मध्ये <xliff:g id="ARTIST_NAME">%2$s</xliff:g> चे <xliff:g id="SONG_NAME">%1$s</xliff:g> प्ले होत आहे"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> पैकी <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"प्ले करा"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"थांबवा"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"मागील गाणे"</string> diff --git a/packages/SystemUI/res/values-ms/strings.xml b/packages/SystemUI/res/values-ms/strings.xml index fcd23ddd739d..c26ec6d8858c 100644 --- a/packages/SystemUI/res/values-ms/strings.xml +++ b/packages/SystemUI/res/values-ms/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Tetapan"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> oleh <xliff:g id="ARTIST_NAME">%2$s</xliff:g> dimainkan daripada <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> daripada <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Main"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Jeda"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Lagu sebelumnya"</string> diff --git a/packages/SystemUI/res/values-my/strings.xml b/packages/SystemUI/res/values-my/strings.xml index 638064f9b484..554a4470cc22 100644 --- a/packages/SystemUI/res/values-my/strings.xml +++ b/packages/SystemUI/res/values-my/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"ဆက်တင်များ"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> ၏ <xliff:g id="SONG_NAME">%1$s</xliff:g> ကို <xliff:g id="APP_LABEL">%3$s</xliff:g> တွင် ဖွင့်ထားသည်"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> အနက် <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"ဖွင့်ရန်"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"ခဏရပ်ရန်"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"ယခင် တစ်ပုဒ်"</string> diff --git a/packages/SystemUI/res/values-nb/strings.xml b/packages/SystemUI/res/values-nb/strings.xml index 67cdc25884db..49ea80e19ca1 100644 --- a/packages/SystemUI/res/values-nb/strings.xml +++ b/packages/SystemUI/res/values-nb/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Innstillinger"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> av <xliff:g id="ARTIST_NAME">%2$s</xliff:g> spilles av fra <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> av <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Spill av"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pause"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Forrige spor"</string> diff --git a/packages/SystemUI/res/values-ne/strings.xml b/packages/SystemUI/res/values-ne/strings.xml index 5132ca0dcd3f..d2087f016ed6 100644 --- a/packages/SystemUI/res/values-ne/strings.xml +++ b/packages/SystemUI/res/values-ne/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"सेटिङ"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> को <xliff:g id="SONG_NAME">%1$s</xliff:g> बोलको गीत <xliff:g id="APP_LABEL">%3$s</xliff:g> मा बज्दै छ"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> मध्ये <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"प्ले गर्नुहोस्"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"पज गर्नुहोस्"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"अघिल्लो ट्रयाक"</string> diff --git a/packages/SystemUI/res/values-nl/strings.xml b/packages/SystemUI/res/values-nl/strings.xml index 540d7cce9d08..2d4c8ffb6a81 100644 --- a/packages/SystemUI/res/values-nl/strings.xml +++ b/packages/SystemUI/res/values-nl/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Instellingen"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> van <xliff:g id="ARTIST_NAME">%2$s</xliff:g> wordt afgespeeld via <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> van <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Afspelen"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pauzeren"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Vorige track"</string> diff --git a/packages/SystemUI/res/values-or/strings.xml b/packages/SystemUI/res/values-or/strings.xml index a6feb84e7e83..4942f193b6f4 100644 --- a/packages/SystemUI/res/values-or/strings.xml +++ b/packages/SystemUI/res/values-or/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"ସେଟିଂସ୍"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g>ରୁ <xliff:g id="ARTIST_NAME">%2$s</xliff:g>ଙ୍କ <xliff:g id="SONG_NAME">%1$s</xliff:g> ଚାଲୁଛି"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>ରୁ <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"ଚଲାନ୍ତୁ"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"ବିରତ କରନ୍ତୁ"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"ପୂର୍ବବର୍ତ୍ତୀ ଟ୍ରାକ"</string> diff --git a/packages/SystemUI/res/values-pa/strings.xml b/packages/SystemUI/res/values-pa/strings.xml index ca8d66a8e038..8a93c8cbd7f7 100644 --- a/packages/SystemUI/res/values-pa/strings.xml +++ b/packages/SystemUI/res/values-pa/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"ਸੈਟਿੰਗਾਂ"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> ਤੋਂ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> ਦਾ <xliff:g id="SONG_NAME">%1$s</xliff:g> ਚੱਲ ਰਿਹਾ ਹੈ"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g> ਵਿੱਚੋਂ <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"ਚਲਾਓ"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"ਰੋਕੋ"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"ਪਿਛਲਾ ਟਰੈਕ"</string> diff --git a/packages/SystemUI/res/values-pl/strings.xml b/packages/SystemUI/res/values-pl/strings.xml index cfb45fc5bfa9..d77d1906483f 100644 --- a/packages/SystemUI/res/values-pl/strings.xml +++ b/packages/SystemUI/res/values-pl/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Ustawienia"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Aplikacja <xliff:g id="APP_LABEL">%3$s</xliff:g> odtwarza utwór <xliff:g id="SONG_NAME">%1$s</xliff:g> (<xliff:g id="ARTIST_NAME">%2$s</xliff:g>)"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> z <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Odtwórz"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Wstrzymaj"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Poprzedni utwór"</string> diff --git a/packages/SystemUI/res/values-pt-rBR/strings.xml b/packages/SystemUI/res/values-pt-rBR/strings.xml index 2a79b7db58da..8b21923150be 100644 --- a/packages/SystemUI/res/values-pt-rBR/strings.xml +++ b/packages/SystemUI/res/values-pt-rBR/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Configurações"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Tocando <xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> no app <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Iniciar"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausar"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Faixa anterior"</string> diff --git a/packages/SystemUI/res/values-pt-rPT/strings.xml b/packages/SystemUI/res/values-pt-rPT/strings.xml index c2f5674eca3c..1daa1def3e94 100644 --- a/packages/SystemUI/res/values-pt-rPT/strings.xml +++ b/packages/SystemUI/res/values-pt-rPT/strings.xml @@ -943,7 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Definições"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> em reprodução a partir da app <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <string name="controls_media_empty_title" msgid="8296102892421573325">"<xliff:g id="APP_NAME">%1$s</xliff:g> em execução"</string> <string name="controls_media_button_play" msgid="2705068099607410633">"Reproduzir"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausar"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Faixa anterior"</string> diff --git a/packages/SystemUI/res/values-pt/strings.xml b/packages/SystemUI/res/values-pt/strings.xml index 2a79b7db58da..8b21923150be 100644 --- a/packages/SystemUI/res/values-pt/strings.xml +++ b/packages/SystemUI/res/values-pt/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Configurações"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Tocando <xliff:g id="SONG_NAME">%1$s</xliff:g> de <xliff:g id="ARTIST_NAME">%2$s</xliff:g> no app <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> de <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Iniciar"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausar"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Faixa anterior"</string> diff --git a/packages/SystemUI/res/values-ro/strings.xml b/packages/SystemUI/res/values-ro/strings.xml index 29e91bfb811e..fc3b1e8693ea 100644 --- a/packages/SystemUI/res/values-ro/strings.xml +++ b/packages/SystemUI/res/values-ro/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Setări"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> de la <xliff:g id="ARTIST_NAME">%2$s</xliff:g> se redă în <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> din <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Redă"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Întrerupe"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Melodia anterioară"</string> diff --git a/packages/SystemUI/res/values-ru/strings.xml b/packages/SystemUI/res/values-ru/strings.xml index 5c6bd5c775a6..83ed38ba8ca3 100644 --- a/packages/SystemUI/res/values-ru/strings.xml +++ b/packages/SystemUI/res/values-ru/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Настройки"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Воспроизводится медиафайл \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\" (исполнитель: <xliff:g id="ARTIST_NAME">%2$s</xliff:g>) из приложения \"<xliff:g id="APP_LABEL">%3$s</xliff:g>\"."</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> из <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Воспроизвести"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Приостановить"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Предыдущий трек"</string> diff --git a/packages/SystemUI/res/values-si/strings.xml b/packages/SystemUI/res/values-si/strings.xml index 002de8e7ca91..fe1feb9262e1 100644 --- a/packages/SystemUI/res/values-si/strings.xml +++ b/packages/SystemUI/res/values-si/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"සැකසීම්"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g>ගේ <xliff:g id="SONG_NAME">%1$s</xliff:g> ගීතය <xliff:g id="APP_LABEL">%3$s</xliff:g> වෙතින් ධාවනය වෙමින් පවතී"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>කින් <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"වාදනය කරන්න"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"විරාම ගන්වන්න"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"පෙර ඛණ්ඩය"</string> diff --git a/packages/SystemUI/res/values-sk/strings.xml b/packages/SystemUI/res/values-sk/strings.xml index 4856e81fed81..c1de994c472e 100644 --- a/packages/SystemUI/res/values-sk/strings.xml +++ b/packages/SystemUI/res/values-sk/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Nastavenia"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> od interpreta <xliff:g id="ARTIST_NAME">%2$s</xliff:g> sa prehráva z aplikácie <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> z <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Prehrať"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pozastaviť"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Predchádzajúca skladba"</string> diff --git a/packages/SystemUI/res/values-sl/strings.xml b/packages/SystemUI/res/values-sl/strings.xml index 240270640799..f8235c127a3b 100644 --- a/packages/SystemUI/res/values-sl/strings.xml +++ b/packages/SystemUI/res/values-sl/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Nastavitve"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Skladba <xliff:g id="SONG_NAME">%1$s</xliff:g> izvajalca <xliff:g id="ARTIST_NAME">%2$s</xliff:g> se predvaja iz aplikacije <xliff:g id="APP_LABEL">%3$s</xliff:g>."</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> od <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Predvajaj"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Začasno zaustavi"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Prejšnja skladba"</string> diff --git a/packages/SystemUI/res/values-sq/strings.xml b/packages/SystemUI/res/values-sq/strings.xml index f3c4bfe36b77..8303ac46e70c 100644 --- a/packages/SystemUI/res/values-sq/strings.xml +++ b/packages/SystemUI/res/values-sq/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Cilësimet"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> nga <xliff:g id="ARTIST_NAME">%2$s</xliff:g> po luhet nga <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> nga <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Luaj"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Vendos në pauzë"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Pjesa muzikore e mëparshme"</string> diff --git a/packages/SystemUI/res/values-sr/strings.xml b/packages/SystemUI/res/values-sr/strings.xml index c8ac5e8ec10c..4933c4bdd918 100644 --- a/packages/SystemUI/res/values-sr/strings.xml +++ b/packages/SystemUI/res/values-sr/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Подешавања"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> извођача <xliff:g id="ARTIST_NAME">%2$s</xliff:g> се пушта из апликације <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> од <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Пусти"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Паузирај"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Претходна песма"</string> diff --git a/packages/SystemUI/res/values-sv/strings.xml b/packages/SystemUI/res/values-sv/strings.xml index 4eb135b9ec88..e87bda6ab71f 100644 --- a/packages/SystemUI/res/values-sv/strings.xml +++ b/packages/SystemUI/res/values-sv/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Inställningar"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> med <xliff:g id="ARTIST_NAME">%2$s</xliff:g> spelas upp från <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> av <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Spela upp"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pausa"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Föregående spår"</string> diff --git a/packages/SystemUI/res/values-sw/strings.xml b/packages/SystemUI/res/values-sw/strings.xml index 4e3391f12bf0..d71bd15afe51 100644 --- a/packages/SystemUI/res/values-sw/strings.xml +++ b/packages/SystemUI/res/values-sw/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Mipangilio"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="SONG_NAME">%1$s</xliff:g> ulioimbwa na <xliff:g id="ARTIST_NAME">%2$s</xliff:g> unacheza katika <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> kati ya <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Cheza"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Simamisha"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Wimbo uliotangulia"</string> diff --git a/packages/SystemUI/res/values-ta/strings.xml b/packages/SystemUI/res/values-ta/strings.xml index 58710d353f52..cce3de3caf1b 100644 --- a/packages/SystemUI/res/values-ta/strings.xml +++ b/packages/SystemUI/res/values-ta/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"அமைப்புகள்"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> இன் <xliff:g id="SONG_NAME">%1$s</xliff:g> பாடல் <xliff:g id="APP_LABEL">%3$s</xliff:g> ஆப்ஸில் பிளேயாகிறது"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> / <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"பிளே செய்"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"இடைநிறுத்து"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"முந்தைய டிராக்"</string> diff --git a/packages/SystemUI/res/values-te/strings.xml b/packages/SystemUI/res/values-te/strings.xml index eeb067bbf97b..ab40192918cd 100644 --- a/packages/SystemUI/res/values-te/strings.xml +++ b/packages/SystemUI/res/values-te/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"సెట్టింగ్లు"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="ARTIST_NAME">%2$s</xliff:g> పాడిన <xliff:g id="SONG_NAME">%1$s</xliff:g> <xliff:g id="APP_LABEL">%3$s</xliff:g> నుండి ప్లే అవుతోంది"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="TOTAL_TIME">%2$s</xliff:g>లో <xliff:g id="ELAPSED_TIME">%1$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"ప్లే చేయండి"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"పాజ్ చేయండి"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"మునుపటి ట్రాక్"</string> diff --git a/packages/SystemUI/res/values-th/strings.xml b/packages/SystemUI/res/values-th/strings.xml index 10507f0946e6..4d971dc8dc9e 100644 --- a/packages/SystemUI/res/values-th/strings.xml +++ b/packages/SystemUI/res/values-th/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"การตั้งค่า"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"กำลังเปิดเพลง <xliff:g id="SONG_NAME">%1$s</xliff:g> ของ <xliff:g id="ARTIST_NAME">%2$s</xliff:g> จาก <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> จาก <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"เล่น"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"หยุดชั่วคราว"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"แทร็กก่อนหน้า"</string> diff --git a/packages/SystemUI/res/values-tl/strings.xml b/packages/SystemUI/res/values-tl/strings.xml index 923f733c16a2..9d301c9ffd09 100644 --- a/packages/SystemUI/res/values-tl/strings.xml +++ b/packages/SystemUI/res/values-tl/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Mga Setting"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Nagpe-play ang <xliff:g id="SONG_NAME">%1$s</xliff:g> ni/ng <xliff:g id="ARTIST_NAME">%2$s</xliff:g> mula sa <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> sa <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"I-play"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"I-pause"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Nakaraang track"</string> diff --git a/packages/SystemUI/res/values-tr/strings.xml b/packages/SystemUI/res/values-tr/strings.xml index 8b77228a69a5..47c0b5ad7240 100644 --- a/packages/SystemUI/res/values-tr/strings.xml +++ b/packages/SystemUI/res/values-tr/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Ayarlar"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> uygulamasından <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, <xliff:g id="SONG_NAME">%1$s</xliff:g> şarkısı çalıyor"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Çal"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Duraklat"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Önceki parça"</string> diff --git a/packages/SystemUI/res/values-uk/strings.xml b/packages/SystemUI/res/values-uk/strings.xml index 94530e830c8f..780a357aa7ee 100644 --- a/packages/SystemUI/res/values-uk/strings.xml +++ b/packages/SystemUI/res/values-uk/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Налаштування"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Пісня \"<xliff:g id="SONG_NAME">%1$s</xliff:g>\", яку виконує <xliff:g id="ARTIST_NAME">%2$s</xliff:g>, грає в додатку <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> з <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Відтворити"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Призупинити"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Попередня композиція"</string> diff --git a/packages/SystemUI/res/values-ur/strings.xml b/packages/SystemUI/res/values-ur/strings.xml index 3309ce01ccc2..0fcc8628ce23 100644 --- a/packages/SystemUI/res/values-ur/strings.xml +++ b/packages/SystemUI/res/values-ur/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"ترتیبات"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> سے <xliff:g id="ARTIST_NAME">%2$s</xliff:g> کا <xliff:g id="SONG_NAME">%1$s</xliff:g> چل رہا ہے"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> از <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"چلائیں"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"روکیں"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"پچھلا ٹریک"</string> diff --git a/packages/SystemUI/res/values-uz/strings.xml b/packages/SystemUI/res/values-uz/strings.xml index dfec0cc30be7..37f0ebbb99c9 100644 --- a/packages/SystemUI/res/values-uz/strings.xml +++ b/packages/SystemUI/res/values-uz/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Sozlamalar"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"<xliff:g id="APP_LABEL">%3$s</xliff:g> ilovasida ijro etilmoqda: <xliff:g id="SONG_NAME">%1$s</xliff:g> – <xliff:g id="ARTIST_NAME">%2$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> / <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Ijro"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Pauza"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Avvalgi trek"</string> diff --git a/packages/SystemUI/res/values-vi/strings.xml b/packages/SystemUI/res/values-vi/strings.xml index 3c9467c46793..a053fdab5c34 100644 --- a/packages/SystemUI/res/values-vi/strings.xml +++ b/packages/SystemUI/res/values-vi/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Cài đặt"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"Đang phát <xliff:g id="SONG_NAME">%1$s</xliff:g> của <xliff:g id="ARTIST_NAME">%2$s</xliff:g> trên <xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Phát"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Tạm dừng"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Bản nhạc trước"</string> diff --git a/packages/SystemUI/res/values-zh-rCN/strings.xml b/packages/SystemUI/res/values-zh-rCN/strings.xml index 4cd458ced8e0..c9b48ca877bd 100644 --- a/packages/SystemUI/res/values-zh-rCN/strings.xml +++ b/packages/SystemUI/res/values-zh-rCN/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"设置"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"正在通过<xliff:g id="APP_LABEL">%3$s</xliff:g>播放<xliff:g id="ARTIST_NAME">%2$s</xliff:g>的《<xliff:g id="SONG_NAME">%1$s</xliff:g>》"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> / <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"播放"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"暂停"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"上一首"</string> diff --git a/packages/SystemUI/res/values-zh-rHK/strings.xml b/packages/SystemUI/res/values-zh-rHK/strings.xml index c548ecb860f8..c387743f2a91 100644 --- a/packages/SystemUI/res/values-zh-rHK/strings.xml +++ b/packages/SystemUI/res/values-zh-rHK/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"設定"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"正在透過 <xliff:g id="APP_LABEL">%3$s</xliff:g> 播放 <xliff:g id="ARTIST_NAME">%2$s</xliff:g> 的《<xliff:g id="SONG_NAME">%1$s</xliff:g>》"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>/<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"播放"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"暫停"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"上一首曲目"</string> diff --git a/packages/SystemUI/res/values-zh-rTW/strings.xml b/packages/SystemUI/res/values-zh-rTW/strings.xml index 5a775911d522..f9c7d7df3106 100644 --- a/packages/SystemUI/res/values-zh-rTW/strings.xml +++ b/packages/SystemUI/res/values-zh-rTW/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"設定"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"系統正透過「<xliff:g id="APP_LABEL">%3$s</xliff:g>」播放<xliff:g id="ARTIST_NAME">%2$s</xliff:g>的〈<xliff:g id="SONG_NAME">%1$s</xliff:g>〉"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g>,共 <xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"播放"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"暫停"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"上一首"</string> diff --git a/packages/SystemUI/res/values-zu/strings.xml b/packages/SystemUI/res/values-zu/strings.xml index b30ca8fe68a1..998b3a328f16 100644 --- a/packages/SystemUI/res/values-zu/strings.xml +++ b/packages/SystemUI/res/values-zu/strings.xml @@ -943,8 +943,6 @@ <string name="controls_media_settings_button" msgid="5815790345117172504">"Izilungiselelo"</string> <string name="controls_media_playing_item_description" msgid="4531853311504359098">"I-<xliff:g id="SONG_NAME">%1$s</xliff:g> ka-<xliff:g id="ARTIST_NAME">%2$s</xliff:g> idlala kusuka ku-<xliff:g id="APP_LABEL">%3$s</xliff:g>"</string> <string name="controls_media_seekbar_description" msgid="4389621713616214611">"<xliff:g id="ELAPSED_TIME">%1$s</xliff:g> ku-<xliff:g id="TOTAL_TIME">%2$s</xliff:g>"</string> - <!-- no translation found for controls_media_empty_title (8296102892421573325) --> - <skip /> <string name="controls_media_button_play" msgid="2705068099607410633">"Dlala"</string> <string name="controls_media_button_pause" msgid="8614887780950376258">"Misa"</string> <string name="controls_media_button_prev" msgid="8126822360056482970">"Ithrekhi yangaphambilini"</string> diff --git a/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSysUIComponent.java b/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSysUIComponent.java index a431a59fcef6..a90980fddfb0 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSysUIComponent.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/ReferenceSysUIComponent.java @@ -16,6 +16,7 @@ package com.android.systemui.dagger; +import com.android.systemui.globalactions.ShutdownUiModule; import com.android.systemui.keyguard.CustomizationProvider; import com.android.systemui.statusbar.NotificationInsetsModule; import com.android.systemui.statusbar.QsFrameTranslateModule; @@ -31,6 +32,7 @@ import dagger.Subcomponent; DependencyProvider.class, NotificationInsetsModule.class, QsFrameTranslateModule.class, + ShutdownUiModule.class, SystemUIBinder.class, SystemUIModule.class, SystemUICoreStartableModule.class, diff --git a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt index e118fdfb7c9d..a00930508cc7 100644 --- a/packages/SystemUI/src/com/android/systemui/flags/Flags.kt +++ b/packages/SystemUI/src/com/android/systemui/flags/Flags.kt @@ -211,7 +211,7 @@ object Flags { // TODO(b/267722622): Tracking Bug @JvmField val WALLPAPER_PICKER_UI_FOR_AIWP = - unreleasedFlag( + releasedFlag( 229, "wallpaper_picker_ui_for_aiwp" ) diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java index 290bf0d0734c..c5027cc511a4 100644 --- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java +++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsImpl.java @@ -15,27 +15,12 @@ package com.android.systemui.globalactions; import static android.app.StatusBarManager.DISABLE2_GLOBAL_ACTIONS; -import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; -import android.annotation.Nullable; -import android.annotation.StringRes; -import android.app.Dialog; import android.content.Context; -import android.os.PowerManager; -import android.view.View; -import android.view.ViewGroup; -import android.view.Window; -import android.view.WindowManager; -import android.widget.ProgressBar; -import android.widget.TextView; -import com.android.internal.R; -import com.android.settingslib.Utils; import com.android.systemui.plugins.GlobalActions; -import com.android.systemui.scrim.ScrimDrawable; import com.android.systemui.statusbar.BlurUtils; import com.android.systemui.statusbar.CommandQueue; -import com.android.systemui.statusbar.phone.ScrimController; import com.android.systemui.statusbar.policy.DeviceProvisionedController; import com.android.systemui.statusbar.policy.KeyguardStateController; @@ -50,12 +35,14 @@ public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks private final CommandQueue mCommandQueue; private final GlobalActionsDialogLite mGlobalActionsDialog; private boolean mDisabled; + private ShutdownUi mShutdownUi; @Inject public GlobalActionsImpl(Context context, CommandQueue commandQueue, GlobalActionsDialogLite globalActionsDialog, BlurUtils blurUtils, KeyguardStateController keyguardStateController, - DeviceProvisionedController deviceProvisionedController) { + DeviceProvisionedController deviceProvisionedController, + ShutdownUi shutdownUi) { mContext = context; mGlobalActionsDialog = globalActionsDialog; mKeyguardStateController = keyguardStateController; @@ -63,6 +50,7 @@ public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks mCommandQueue = commandQueue; mBlurUtils = blurUtils; mCommandQueue.addCallback(this); + mShutdownUi = shutdownUi; } @Override @@ -80,103 +68,8 @@ public class GlobalActionsImpl implements GlobalActions, CommandQueue.Callbacks @Override public void showShutdownUi(boolean isReboot, String reason) { - ScrimDrawable background = new ScrimDrawable(); - - final Dialog d = new Dialog(mContext, - com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions); - - d.setOnShowListener(dialog -> { - if (mBlurUtils.supportsBlursOnWindows()) { - int backgroundAlpha = (int) (ScrimController.BUSY_SCRIM_ALPHA * 255); - background.setAlpha(backgroundAlpha); - mBlurUtils.applyBlur(d.getWindow().getDecorView().getViewRootImpl(), - (int) mBlurUtils.blurRadiusOfRatio(1), backgroundAlpha == 255); - } else { - float backgroundAlpha = mContext.getResources().getFloat( - com.android.systemui.R.dimen.shutdown_scrim_behind_alpha); - background.setAlpha((int) (backgroundAlpha * 255)); - } - }); - - // Window initialization - Window window = d.getWindow(); - window.requestFeature(Window.FEATURE_NO_TITLE); - window.getAttributes().systemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN - | View.SYSTEM_UI_FLAG_LAYOUT_STABLE - | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; - // Inflate the decor view, so the attributes below are not overwritten by the theme. - window.getDecorView(); - window.getAttributes().width = ViewGroup.LayoutParams.MATCH_PARENT; - window.getAttributes().height = ViewGroup.LayoutParams.MATCH_PARENT; - window.getAttributes().layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; - window.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY); - window.getAttributes().setFitInsetsTypes(0 /* types */); - window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); - window.addFlags( - WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN - | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL - | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR - | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED - | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH - | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); - window.setBackgroundDrawable(background); - window.setWindowAnimations(com.android.systemui.R.style.Animation_ShutdownUi); - - d.setContentView(R.layout.shutdown_dialog); - d.setCancelable(false); - - int color; - if (mBlurUtils.supportsBlursOnWindows()) { - color = Utils.getColorAttrDefaultColor(mContext, - com.android.systemui.R.attr.wallpaperTextColor); - } else { - color = mContext.getResources().getColor( - com.android.systemui.R.color.global_actions_shutdown_ui_text); - } - - ProgressBar bar = d.findViewById(R.id.progress); - bar.getIndeterminateDrawable().setTint(color); - - TextView reasonView = d.findViewById(R.id.text1); - TextView messageView = d.findViewById(R.id.text2); - - reasonView.setTextColor(color); - messageView.setTextColor(color); - - messageView.setText(getRebootMessage(isReboot, reason)); - String rebootReasonMessage = getReasonMessage(reason); - if (rebootReasonMessage != null) { - reasonView.setVisibility(View.VISIBLE); - reasonView.setText(rebootReasonMessage); - } - - d.show(); - } - - @StringRes - private int getRebootMessage(boolean isReboot, @Nullable String reason) { - if (reason != null && reason.startsWith(PowerManager.REBOOT_RECOVERY_UPDATE)) { - return R.string.reboot_to_update_reboot; - } else if (reason != null && reason.equals(PowerManager.REBOOT_RECOVERY)) { - return R.string.reboot_to_reset_message; - } else if (isReboot) { - return R.string.reboot_to_reset_message; - } else { - return R.string.shutdown_progress; - } + mShutdownUi.showShutdownUi(isReboot, reason); } - - @Nullable - private String getReasonMessage(@Nullable String reason) { - if (reason != null && reason.startsWith(PowerManager.REBOOT_RECOVERY_UPDATE)) { - return mContext.getString(R.string.reboot_to_update_title); - } else if (reason != null && reason.equals(PowerManager.REBOOT_RECOVERY)) { - return mContext.getString(R.string.reboot_to_reset_title); - } else { - return null; - } - } - @Override public void disable(int displayId, int state1, int state2, boolean animate) { final boolean disabled = (state2 & DISABLE2_GLOBAL_ACTIONS) != 0; diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/ShutdownUi.java b/packages/SystemUI/src/com/android/systemui/globalactions/ShutdownUi.java new file mode 100644 index 000000000000..8125d70a6ab3 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/globalactions/ShutdownUi.java @@ -0,0 +1,159 @@ +/* + * 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.systemui.globalactions; + +import static android.view.WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; + +import android.annotation.Nullable; +import android.annotation.StringRes; +import android.app.Dialog; +import android.content.Context; +import android.os.PowerManager; +import android.view.View; +import android.view.ViewGroup; +import android.view.Window; +import android.view.WindowManager; +import android.widget.ProgressBar; +import android.widget.TextView; + +import androidx.annotation.VisibleForTesting; + +import com.android.internal.R; +import com.android.settingslib.Utils; +import com.android.systemui.scrim.ScrimDrawable; +import com.android.systemui.statusbar.BlurUtils; +import com.android.systemui.statusbar.phone.ScrimController; + +/** + * Provides the UI shown during system shutdown. + */ +public class ShutdownUi { + + private Context mContext; + private BlurUtils mBlurUtils; + public ShutdownUi(Context context, BlurUtils blurUtils) { + mContext = context; + mBlurUtils = blurUtils; + } + + /** + * Display the shutdown UI. + * @param isReboot Whether the device will be rebooting after this shutdown. + * @param reason Cause for the shutdown. + */ + public void showShutdownUi(boolean isReboot, String reason) { + ScrimDrawable background = new ScrimDrawable(); + + final Dialog d = new Dialog(mContext, + com.android.systemui.R.style.Theme_SystemUI_Dialog_GlobalActions); + + d.setOnShowListener(dialog -> { + if (mBlurUtils.supportsBlursOnWindows()) { + int backgroundAlpha = (int) (ScrimController.BUSY_SCRIM_ALPHA * 255); + background.setAlpha(backgroundAlpha); + mBlurUtils.applyBlur(d.getWindow().getDecorView().getViewRootImpl(), + (int) mBlurUtils.blurRadiusOfRatio(1), backgroundAlpha == 255); + } else { + float backgroundAlpha = mContext.getResources().getFloat( + com.android.systemui.R.dimen.shutdown_scrim_behind_alpha); + background.setAlpha((int) (backgroundAlpha * 255)); + } + }); + + // Window initialization + Window window = d.getWindow(); + window.requestFeature(Window.FEATURE_NO_TITLE); + window.getAttributes().systemUiVisibility |= View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN + | View.SYSTEM_UI_FLAG_LAYOUT_STABLE + | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION; + // Inflate the decor view, so the attributes below are not overwritten by the theme. + window.getDecorView(); + window.getAttributes().width = ViewGroup.LayoutParams.MATCH_PARENT; + window.getAttributes().height = ViewGroup.LayoutParams.MATCH_PARENT; + window.getAttributes().layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS; + window.setType(WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY); + window.getAttributes().setFitInsetsTypes(0 /* types */); + window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); + window.addFlags( + WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN + | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL + | WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR + | WindowManager.LayoutParams.FLAG_SHOW_WHEN_LOCKED + | WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH + | WindowManager.LayoutParams.FLAG_HARDWARE_ACCELERATED); + window.setBackgroundDrawable(background); + window.setWindowAnimations(com.android.systemui.R.style.Animation_ShutdownUi); + + d.setContentView(getShutdownDialogContent()); + d.setCancelable(false); + + int color; + if (mBlurUtils.supportsBlursOnWindows()) { + color = Utils.getColorAttrDefaultColor(mContext, + com.android.systemui.R.attr.wallpaperTextColor); + } else { + color = mContext.getResources().getColor( + com.android.systemui.R.color.global_actions_shutdown_ui_text); + } + + ProgressBar bar = d.findViewById(R.id.progress); + bar.getIndeterminateDrawable().setTint(color); + + TextView reasonView = d.findViewById(R.id.text1); + TextView messageView = d.findViewById(R.id.text2); + + reasonView.setTextColor(color); + messageView.setTextColor(color); + + messageView.setText(getRebootMessage(isReboot, reason)); + String rebootReasonMessage = getReasonMessage(reason); + if (rebootReasonMessage != null) { + reasonView.setVisibility(View.VISIBLE); + reasonView.setText(rebootReasonMessage); + } + + d.show(); + } + + public int getShutdownDialogContent() { + return R.layout.shutdown_dialog; + } + + @StringRes + @VisibleForTesting int getRebootMessage(boolean isReboot, @Nullable String reason) { + if (reason != null && reason.startsWith(PowerManager.REBOOT_RECOVERY_UPDATE)) { + return R.string.reboot_to_update_reboot; + } else if (reason != null && reason.equals(PowerManager.REBOOT_RECOVERY)) { + return R.string.reboot_to_reset_message; + } else if (isReboot) { + return R.string.reboot_to_reset_message; + } else { + return R.string.shutdown_progress; + } + } + + @Nullable + @VisibleForTesting String getReasonMessage(@Nullable String reason) { + if (reason != null && reason.startsWith(PowerManager.REBOOT_RECOVERY_UPDATE)) { + return mContext.getString(R.string.reboot_to_update_title); + } else if (reason != null && reason.equals(PowerManager.REBOOT_RECOVERY)) { + return mContext.getString(R.string.reboot_to_reset_title); + } else { + return null; + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/ShutdownUiModule.kt b/packages/SystemUI/src/com/android/systemui/globalactions/ShutdownUiModule.kt new file mode 100644 index 000000000000..b7285da49bb7 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/globalactions/ShutdownUiModule.kt @@ -0,0 +1,31 @@ +/* + * 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.systemui.globalactions + +import android.content.Context +import com.android.systemui.statusbar.BlurUtils +import dagger.Module +import dagger.Provides + +/** Provides the UI shown during system shutdown. */ +@Module +class ShutdownUiModule { + /** Shutdown UI provider. */ + @Provides + fun provideShutdownUi(context: Context?, blurUtils: BlurUtils?): ShutdownUi { + return ShutdownUi(context, blurUtils) + } +} diff --git a/packages/SystemUI/src/com/android/systemui/tv/TvSysUIComponent.java b/packages/SystemUI/src/com/android/systemui/tv/TvSysUIComponent.java index 640adcc9dd94..5e489b0f38ac 100644 --- a/packages/SystemUI/src/com/android/systemui/tv/TvSysUIComponent.java +++ b/packages/SystemUI/src/com/android/systemui/tv/TvSysUIComponent.java @@ -20,15 +20,14 @@ import com.android.systemui.dagger.DefaultComponentBinder; import com.android.systemui.dagger.DependencyProvider; import com.android.systemui.dagger.SysUIComponent; import com.android.systemui.dagger.SysUISingleton; -import com.android.systemui.dagger.SystemUIBinder; import com.android.systemui.dagger.SystemUIModule; +import com.android.systemui.globalactions.ShutdownUiModule; +import com.android.systemui.keyguard.dagger.KeyguardModule; +import com.android.systemui.recents.RecentsModule; import com.android.systemui.statusbar.dagger.CentralSurfacesDependenciesModule; import com.android.systemui.statusbar.notification.dagger.NotificationsModule; import com.android.systemui.statusbar.notification.row.NotificationRowModule; -import com.android.systemui.keyguard.dagger.KeyguardModule; -import com.android.systemui.recents.RecentsModule; - import dagger.Subcomponent; /** @@ -43,6 +42,7 @@ import dagger.Subcomponent; NotificationRowModule.class, NotificationsModule.class, RecentsModule.class, + ShutdownUiModule.class, SystemUIModule.class, TvSystemUIBinder.class, TVSystemUICoreStartableModule.class, diff --git a/packages/SystemUI/tests/src/com/android/systemui/globalactions/ShutdownUiTest.java b/packages/SystemUI/tests/src/com/android/systemui/globalactions/ShutdownUiTest.java new file mode 100644 index 000000000000..9d9b263c5df5 --- /dev/null +++ b/packages/SystemUI/tests/src/com/android/systemui/globalactions/ShutdownUiTest.java @@ -0,0 +1,85 @@ +/* + * 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.systemui.globalactions; + +import static junit.framework.Assert.assertEquals; +import static junit.framework.Assert.assertNull; + +import android.os.PowerManager; +import android.testing.AndroidTestingRunner; + +import androidx.test.filters.SmallTest; + +import com.android.internal.R; +import com.android.systemui.SysuiTestCase; +import com.android.systemui.statusbar.BlurUtils; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; + + +@SmallTest +@RunWith(AndroidTestingRunner.class) +public class ShutdownUiTest extends SysuiTestCase { + + ShutdownUi mShutdownUi; + @Mock + BlurUtils mBlurUtils; + + @Before + public void setUp() throws Exception { + mShutdownUi = new ShutdownUi(getContext(), mBlurUtils); + } + + @Test + public void getRebootMessage_update() { + int messageId = mShutdownUi.getRebootMessage(true, PowerManager.REBOOT_RECOVERY_UPDATE); + assertEquals(messageId, R.string.reboot_to_update_reboot); + } + + @Test + public void getRebootMessage_rebootDefault() { + int messageId = mShutdownUi.getRebootMessage(true, "anything-else"); + assertEquals(messageId, R.string.reboot_to_reset_message); + } + + @Test + public void getRebootMessage_shutdown() { + int messageId = mShutdownUi.getRebootMessage(false, "anything-else"); + assertEquals(messageId, R.string.shutdown_progress); + } + + @Test + public void getReasonMessage_update() { + String message = mShutdownUi.getReasonMessage(PowerManager.REBOOT_RECOVERY_UPDATE); + assertEquals(message, mContext.getString(R.string.reboot_to_update_title)); + } + + @Test + public void getReasonMessage_rebootDefault() { + String message = mShutdownUi.getReasonMessage(PowerManager.REBOOT_RECOVERY); + assertEquals(message, mContext.getString(R.string.reboot_to_reset_title)); + } + + @Test + public void getRebootMessage_defaultToNone() { + String message = mShutdownUi.getReasonMessage("anything-else"); + assertNull(message); + } +} |