diff options
126 files changed, 1071 insertions, 457 deletions
diff --git a/core/api/current.txt b/core/api/current.txt index 3b5e1087869e..d6c783dc71b0 100644 --- a/core/api/current.txt +++ b/core/api/current.txt @@ -40740,7 +40740,6 @@ package android.telephony { field public static final String KEY_SIMPLIFIED_NETWORK_SETTINGS_BOOL = "simplified_network_settings_bool"; field public static final String KEY_SIM_NETWORK_UNLOCK_ALLOW_DISMISS_BOOL = "sim_network_unlock_allow_dismiss_bool"; field public static final String KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL = "sms_requires_destination_number_conversion_bool"; - field public static final String KEY_STORE_SIM_PIN_FOR_UNATTENDED_REBOOT_BOOL = "store_sim_pin_for_unattended_reboot_bool"; field public static final String KEY_SUPPORTS_CALL_COMPOSER_BOOL = "supports_call_composer_bool"; field public static final String KEY_SUPPORT_3GPP_CALL_FORWARDING_WHILE_ROAMING_BOOL = "support_3gpp_call_forwarding_while_roaming_bool"; field public static final String KEY_SUPPORT_ADD_CONFERENCE_PARTICIPANTS_BOOL = "support_add_conference_participants_bool"; @@ -40841,7 +40840,6 @@ package android.telephony { field public static final int INTEGRITY_ALGORITHM_HMAC_SHA2_512_256 = 14; // 0xe field public static final int INTEGRITY_ALGORITHM_NONE = 0; // 0x0 field public static final String KEY_ADD_KE_TO_CHILD_SESSION_REKEY_BOOL = "iwlan.add_ke_to_child_session_rekey_bool"; - field public static final String KEY_ADD_WIFI_MAC_ADDR_TO_NAI_BOOL = "iwlan.add_wifi_mac_addr_to_nai_bool"; field public static final String KEY_CHILD_SA_REKEY_HARD_TIMER_SEC_INT = "iwlan.child_sa_rekey_hard_timer_sec_int"; field public static final String KEY_CHILD_SA_REKEY_SOFT_TIMER_SEC_INT = "iwlan.child_sa_rekey_soft_timer_sec_int"; field public static final String KEY_CHILD_SESSION_AES_CBC_KEY_SIZE_INT_ARRAY = "iwlan.child_session_aes_cbc_key_size_int_array"; diff --git a/core/api/system-current.txt b/core/api/system-current.txt index 80c22e1a4222..7b7518d05345 100644 --- a/core/api/system-current.txt +++ b/core/api/system-current.txt @@ -333,6 +333,8 @@ package android { } public static final class R.string { + field public static final int config_customMediaKeyDispatcher = 17039404; // 0x104002c + field public static final int config_customMediaSessionPolicyProvider = 17039405; // 0x104002d field public static final int config_defaultAssistant = 17039393; // 0x1040021 field public static final int config_defaultBrowser = 17039394; // 0x1040022 field public static final int config_defaultCallRedirection = 17039397; // 0x1040025 diff --git a/core/java/android/app/WallpaperManager.java b/core/java/android/app/WallpaperManager.java index d7587bdce997..bd99348b235a 100644 --- a/core/java/android/app/WallpaperManager.java +++ b/core/java/android/app/WallpaperManager.java @@ -117,6 +117,9 @@ public class WallpaperManager { private static final String PROP_LOCK_WALLPAPER = "ro.config.lock_wallpaper"; /** {@hide} */ private static final String PROP_WALLPAPER_COMPONENT = "ro.config.wallpaper_component"; + /** {@hide} */ + private static final String VALUE_CMF_COLOR = + android.os.SystemProperties.get("ro.boot.hardware.color"); /** * Activity Action: Show settings for choosing wallpaper. Do not use directly to construct @@ -2064,7 +2067,11 @@ public class WallpaperManager { return null; } else { whichProp = PROP_WALLPAPER; - defaultResId = com.android.internal.R.drawable.default_wallpaper; + final int defaultColorResId = context.getResources().getIdentifier( + "default_wallpaper_" + VALUE_CMF_COLOR, "drawable", "android"); + defaultResId = + defaultColorResId == 0 ? com.android.internal.R.drawable.default_wallpaper + : defaultColorResId; } final String path = SystemProperties.get(whichProp); if (!TextUtils.isEmpty(path)) { diff --git a/core/java/android/net/NetworkState.java b/core/java/android/net/NetworkState.java index e466d2e626be..813fde1c15f2 100644 --- a/core/java/android/net/NetworkState.java +++ b/core/java/android/net/NetworkState.java @@ -41,7 +41,6 @@ public class NetworkState implements Parcelable { @UnsupportedAppUsage(maxTargetSdk = Build.VERSION_CODES.P, trackingBug = 115609023) public final Network network; public final String subscriberId; - public final String networkId; public final int legacyNetworkType; private NetworkState() { @@ -50,35 +49,33 @@ public class NetworkState implements Parcelable { networkCapabilities = null; network = null; subscriberId = null; - networkId = null; legacyNetworkType = 0; } public NetworkState(int legacyNetworkType, @NonNull LinkProperties linkProperties, @NonNull NetworkCapabilities networkCapabilities, @NonNull Network network, - @Nullable String subscriberId, @Nullable String networkId) { + @Nullable String subscriberId) { this(legacyNetworkType, new NetworkInfo(legacyNetworkType, 0, null, null), linkProperties, - networkCapabilities, network, subscriberId, networkId); + networkCapabilities, network, subscriberId); } // Constructor that used internally in ConnectivityService mainline module. public NetworkState(@NonNull NetworkInfo networkInfo, @NonNull LinkProperties linkProperties, @NonNull NetworkCapabilities networkCapabilities, @NonNull Network network, - String subscriberId, String networkId) { + @Nullable String subscriberId) { this(networkInfo.getType(), networkInfo, linkProperties, - networkCapabilities, network, subscriberId, networkId); + networkCapabilities, network, subscriberId); } public NetworkState(int legacyNetworkType, @NonNull NetworkInfo networkInfo, @NonNull LinkProperties linkProperties, @NonNull NetworkCapabilities networkCapabilities, @NonNull Network network, - String subscriberId, String networkId) { + @Nullable String subscriberId) { this.networkInfo = networkInfo; this.linkProperties = linkProperties; this.networkCapabilities = networkCapabilities; this.network = network; this.subscriberId = subscriberId; - this.networkId = networkId; this.legacyNetworkType = legacyNetworkType; // This object is an atomic view of a network, so the various components @@ -99,7 +96,6 @@ public class NetworkState implements Parcelable { networkCapabilities = in.readParcelable(null); network = in.readParcelable(null); subscriberId = in.readString(); - networkId = in.readString(); legacyNetworkType = in.readInt(); } @@ -115,7 +111,6 @@ public class NetworkState implements Parcelable { out.writeParcelable(networkCapabilities, flags); out.writeParcelable(network, flags); out.writeString(subscriberId); - out.writeString(networkId); out.writeInt(legacyNetworkType); } diff --git a/core/java/android/os/BatteryConsumer.java b/core/java/android/os/BatteryConsumer.java index bf229e0b24df..c6efaace76d7 100644 --- a/core/java/android/os/BatteryConsumer.java +++ b/core/java/android/os/BatteryConsumer.java @@ -130,7 +130,7 @@ public abstract class BatteryConsumer { * Total power consumed by this consumer, in mAh. */ public double getConsumedPower() { - return mPowerComponents.getTotalPowerConsumed(); + return mPowerComponents.getTotalConsumedPower(); } /** diff --git a/core/java/android/os/BatteryStats.java b/core/java/android/os/BatteryStats.java index 01a89017ab6c..cf9b534fc29f 100644 --- a/core/java/android/os/BatteryStats.java +++ b/core/java/android/os/BatteryStats.java @@ -1671,7 +1671,7 @@ public abstract class BatteryStats implements Parcelable { public char batteryVoltage; // The charge of the battery in micro-Ampere-hours. - public int batteryChargeUAh; + public int batteryChargeUah; public double modemRailChargeMah; public double wifiRailChargeMah; @@ -1884,7 +1884,7 @@ public abstract class BatteryStats implements Parcelable { bat = (((int)batteryTemperature)&0xffff) | ((((int)batteryVoltage)<<16)&0xffff0000); dest.writeInt(bat); - dest.writeInt(batteryChargeUAh); + dest.writeInt(batteryChargeUah); dest.writeDouble(modemRailChargeMah); dest.writeDouble(wifiRailChargeMah); dest.writeInt(states); @@ -1916,7 +1916,7 @@ public abstract class BatteryStats implements Parcelable { int bat2 = src.readInt(); batteryTemperature = (short)(bat2&0xffff); batteryVoltage = (char)((bat2>>16)&0xffff); - batteryChargeUAh = src.readInt(); + batteryChargeUah = src.readInt(); modemRailChargeMah = src.readDouble(); wifiRailChargeMah = src.readDouble(); states = src.readInt(); @@ -1959,7 +1959,7 @@ public abstract class BatteryStats implements Parcelable { batteryPlugType = 0; batteryTemperature = 0; batteryVoltage = 0; - batteryChargeUAh = 0; + batteryChargeUah = 0; modemRailChargeMah = 0; wifiRailChargeMah = 0; states = 0; @@ -1991,7 +1991,7 @@ public abstract class BatteryStats implements Parcelable { batteryPlugType = o.batteryPlugType; batteryTemperature = o.batteryTemperature; batteryVoltage = o.batteryVoltage; - batteryChargeUAh = o.batteryChargeUAh; + batteryChargeUah = o.batteryChargeUah; modemRailChargeMah = o.modemRailChargeMah; wifiRailChargeMah = o.wifiRailChargeMah; states = o.states; @@ -2025,7 +2025,7 @@ public abstract class BatteryStats implements Parcelable { && batteryPlugType == o.batteryPlugType && batteryTemperature == o.batteryTemperature && batteryVoltage == o.batteryVoltage - && batteryChargeUAh == o.batteryChargeUAh + && batteryChargeUah == o.batteryChargeUah && modemRailChargeMah == o.modemRailChargeMah && wifiRailChargeMah == o.wifiRailChargeMah && states == o.states @@ -2859,6 +2859,11 @@ public abstract class BatteryStats implements Parcelable { public abstract boolean getIsOnBattery(); /** + * Returns the timestamp of when battery stats collection started, in microseconds. + */ + public abstract long getStatsStartRealtime(); + + /** * Returns a SparseArray containing the statistics for each uid. */ @UnsupportedAppUsage @@ -6520,7 +6525,7 @@ public abstract class BatteryStats implements Parcelable { item.append(checkin ? ",Bv=" : " volt="); item.append(oldVolt); } - final int chargeMAh = rec.batteryChargeUAh / 1000; + final int chargeMAh = rec.batteryChargeUah / 1000; if (oldChargeMAh != chargeMAh) { oldChargeMAh = chargeMAh; item.append(checkin ? ",Bcc=" : " charge="); diff --git a/core/java/android/os/BatteryUsageStats.java b/core/java/android/os/BatteryUsageStats.java index 305815ff9e51..35a5a7c7c1d0 100644 --- a/core/java/android/os/BatteryUsageStats.java +++ b/core/java/android/os/BatteryUsageStats.java @@ -17,7 +17,7 @@ package android.os; import android.annotation.NonNull; -import android.annotation.SuppressLint; +import android.util.Range; import android.util.SparseArray; import java.util.ArrayList; @@ -31,35 +31,59 @@ import java.util.List; public final class BatteryUsageStats implements Parcelable { private final double mConsumedPower; private final int mDischargePercentage; + private final long mStatsStartRealtimeMs; + private final double mDischargedPowerLowerBound; + private final double mDischargedPowerUpperBound; private final ArrayList<UidBatteryConsumer> mUidBatteryConsumers; private final ArrayList<SystemBatteryConsumer> mSystemBatteryConsumers; private final ArrayList<UserBatteryConsumer> mUserBatteryConsumers; private BatteryUsageStats(@NonNull Builder builder) { - mConsumedPower = builder.mConsumedPower; + mStatsStartRealtimeMs = builder.mStatsStartRealtimeMs; mDischargePercentage = builder.mDischargePercentage; + mDischargedPowerLowerBound = builder.mDischargedPowerLowerBoundMah; + mDischargedPowerUpperBound = builder.mDischargedPowerUpperBoundMah; - int uidBatteryConsumerCount = builder.mUidBatteryConsumerBuilders.size(); + double totalPower = 0; + + final int uidBatteryConsumerCount = builder.mUidBatteryConsumerBuilders.size(); mUidBatteryConsumers = new ArrayList<>(uidBatteryConsumerCount); for (int i = 0; i < uidBatteryConsumerCount; i++) { - UidBatteryConsumer.Builder uidBatteryConsumerBuilder = + final UidBatteryConsumer.Builder uidBatteryConsumerBuilder = builder.mUidBatteryConsumerBuilders.valueAt(i); if (!uidBatteryConsumerBuilder.isExcludedFromBatteryUsageStats()) { - mUidBatteryConsumers.add(uidBatteryConsumerBuilder.build()); + final UidBatteryConsumer consumer = uidBatteryConsumerBuilder.build(); + totalPower += consumer.getConsumedPower(); + mUidBatteryConsumers.add(consumer); } } - int systemBatteryConsumerCount = builder.mSystemBatteryConsumerBuilders.size(); + final int systemBatteryConsumerCount = builder.mSystemBatteryConsumerBuilders.size(); mSystemBatteryConsumers = new ArrayList<>(systemBatteryConsumerCount); for (int i = 0; i < systemBatteryConsumerCount; i++) { - mSystemBatteryConsumers.add(builder.mSystemBatteryConsumerBuilders.valueAt(i).build()); + final SystemBatteryConsumer consumer = + builder.mSystemBatteryConsumerBuilders.valueAt(i).build(); + totalPower += consumer.getConsumedPower(); + mSystemBatteryConsumers.add(consumer); } - int userBatteryConsumerCount = builder.mUserBatteryConsumerBuilders.size(); + final int userBatteryConsumerCount = builder.mUserBatteryConsumerBuilders.size(); mUserBatteryConsumers = new ArrayList<>(userBatteryConsumerCount); for (int i = 0; i < userBatteryConsumerCount; i++) { - mUserBatteryConsumers.add(builder.mUserBatteryConsumerBuilders.valueAt(i).build()); + final UserBatteryConsumer consumer = + builder.mUserBatteryConsumerBuilders.valueAt(i).build(); + totalPower += consumer.getConsumedPower(); + mUserBatteryConsumers.add(consumer); } + + mConsumedPower = totalPower; + } + + /** + * Timestamp of the latest battery stats reset, in milliseconds. + */ + public long getStatsStartRealtime() { + return mStatsStartRealtimeMs; } /** @@ -71,6 +95,14 @@ public final class BatteryUsageStats implements Parcelable { } /** + * Returns the discharged power since BatteryStats were last reset, in mAh as an estimated + * range. + */ + public Range<Double> getDischargedPowerRange() { + return Range.create(mDischargedPowerLowerBound, mDischargedPowerUpperBound); + } + + /** * Total amount of battery charge drained since BatteryStats reset (e.g. due to being fully * charged), in mAh */ @@ -99,23 +131,29 @@ public final class BatteryUsageStats implements Parcelable { } private BatteryUsageStats(@NonNull Parcel source) { + mStatsStartRealtimeMs = source.readLong(); + mConsumedPower = source.readDouble(); + mDischargePercentage = source.readInt(); + mDischargedPowerLowerBound = source.readDouble(); + mDischargedPowerUpperBound = source.readDouble(); mUidBatteryConsumers = new ArrayList<>(); source.readParcelableList(mUidBatteryConsumers, getClass().getClassLoader()); mSystemBatteryConsumers = new ArrayList<>(); source.readParcelableList(mSystemBatteryConsumers, getClass().getClassLoader()); mUserBatteryConsumers = new ArrayList<>(); source.readParcelableList(mUserBatteryConsumers, getClass().getClassLoader()); - mConsumedPower = source.readDouble(); - mDischargePercentage = source.readInt(); } @Override public void writeToParcel(@NonNull Parcel dest, int flags) { + dest.writeLong(mStatsStartRealtimeMs); + dest.writeDouble(mConsumedPower); + dest.writeInt(mDischargePercentage); + dest.writeDouble(mDischargedPowerLowerBound); + dest.writeDouble(mDischargedPowerUpperBound); dest.writeParcelableList(mUidBatteryConsumers, flags); dest.writeParcelableList(mSystemBatteryConsumers, flags); dest.writeParcelableList(mUserBatteryConsumers, flags); - dest.writeDouble(mConsumedPower); - dest.writeInt(mDischargePercentage); } @NonNull @@ -135,8 +173,10 @@ public final class BatteryUsageStats implements Parcelable { public static final class Builder { private final int mCustomPowerComponentCount; private final int mCustomTimeComponentCount; - private double mConsumedPower; + private long mStatsStartRealtimeMs; private int mDischargePercentage; + private double mDischargedPowerLowerBoundMah; + private double mDischargedPowerUpperBoundMah; private final SparseArray<UidBatteryConsumer.Builder> mUidBatteryConsumerBuilders = new SparseArray<>(); private final SparseArray<SystemBatteryConsumer.Builder> mSystemBatteryConsumerBuilders = @@ -158,10 +198,17 @@ public final class BatteryUsageStats implements Parcelable { } /** + * Sets the timestamp of the latest battery stats reset, in milliseconds. + */ + public Builder setStatsStartRealtime(long statsStartRealtimeMs) { + mStatsStartRealtimeMs = statsStartRealtimeMs; + return this; + } + + /** * Sets the battery discharge amount since BatteryStats reset as percentage of the full * charge. */ - @SuppressLint("PercentageInt") // See b/174188159 @NonNull public Builder setDischargePercentage(int dischargePercentage) { mDischargePercentage = dischargePercentage; @@ -169,11 +216,13 @@ public final class BatteryUsageStats implements Parcelable { } /** - * Sets the battery discharge amount since BatteryStats reset, in mAh. + * Sets the estimated battery discharge range. */ @NonNull - public Builder setConsumedPower(double consumedPower) { - mConsumedPower = consumedPower; + public Builder setDischargedPowerRange(double dischargedPowerLowerBoundMah, + double dischargedPowerUpperBoundMah) { + mDischargedPowerLowerBoundMah = dischargedPowerLowerBoundMah; + mDischargedPowerUpperBoundMah = dischargedPowerUpperBoundMah; return this; } diff --git a/core/java/android/os/PowerComponents.java b/core/java/android/os/PowerComponents.java index ac2328504f74..d239b23b6ff6 100644 --- a/core/java/android/os/PowerComponents.java +++ b/core/java/android/os/PowerComponents.java @@ -29,38 +29,38 @@ class PowerComponents { public static final int CUSTOM_TIME_COMPONENT_OFFSET = BatteryConsumer.TIME_COMPONENT_COUNT - BatteryConsumer.FIRST_CUSTOM_TIME_COMPONENT_ID; - private final double mTotalPowerConsumed; - private final double[] mPowerComponents; - private final long[] mTimeComponents; + private final double mTotalConsumedPowerMah; + private final double[] mPowerComponentsMah; + private final long[] mTimeComponentsMs; private final int mCustomPowerComponentCount; PowerComponents(@NonNull Builder builder) { mCustomPowerComponentCount = builder.mCustomPowerComponentCount; - mPowerComponents = builder.mPowerComponents; - mTimeComponents = builder.mTimeComponents; - mTotalPowerConsumed = builder.getTotalPower(); + mPowerComponentsMah = builder.mPowerComponentsMah; + mTimeComponentsMs = builder.mTimeComponentsMs; + mTotalConsumedPowerMah = builder.getTotalPower(); } PowerComponents(@NonNull Parcel source) { - mTotalPowerConsumed = source.readDouble(); + mTotalConsumedPowerMah = source.readDouble(); mCustomPowerComponentCount = source.readInt(); - mPowerComponents = source.createDoubleArray(); - mTimeComponents = source.createLongArray(); + mPowerComponentsMah = source.createDoubleArray(); + mTimeComponentsMs = source.createLongArray(); } /** Writes contents to Parcel */ void writeToParcel(@NonNull Parcel dest, int flags) { - dest.writeDouble(mTotalPowerConsumed); + dest.writeDouble(mTotalConsumedPowerMah); dest.writeInt(mCustomPowerComponentCount); - dest.writeDoubleArray(mPowerComponents); - dest.writeLongArray(mTimeComponents); + dest.writeDoubleArray(mPowerComponentsMah); + dest.writeLongArray(mTimeComponentsMs); } /** * Total power consumed by this consumer, in mAh. */ - public double getTotalPowerConsumed() { - return mTotalPowerConsumed; + public double getTotalConsumedPower() { + return mTotalConsumedPowerMah; } /** @@ -76,7 +76,7 @@ class PowerComponents { "Unsupported power component ID: " + componentId); } try { - return mPowerComponents[componentId]; + return mPowerComponentsMah[componentId]; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException("Unsupported power component ID: " + componentId); } @@ -92,7 +92,7 @@ class PowerComponents { if (componentId >= BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID && componentId < BatteryConsumer.LAST_CUSTOM_POWER_COMPONENT_ID) { try { - return mPowerComponents[CUSTOM_POWER_COMPONENT_OFFSET + componentId]; + return mPowerComponentsMah[CUSTOM_POWER_COMPONENT_OFFSET + componentId]; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported custom power component ID: " + componentId); @@ -116,7 +116,7 @@ class PowerComponents { "Unsupported time component ID: " + componentId); } try { - return mTimeComponents[componentId]; + return mTimeComponentsMs[componentId]; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException("Unsupported power component ID: " + componentId); } @@ -134,7 +134,7 @@ class PowerComponents { "Unsupported custom time component ID: " + componentId); } try { - return mTimeComponents[CUSTOM_TIME_COMPONENT_OFFSET + componentId]; + return mTimeComponentsMs[CUSTOM_TIME_COMPONENT_OFFSET + componentId]; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported custom time component ID: " + componentId); @@ -145,16 +145,16 @@ class PowerComponents { * Builder for PowerComponents. */ static final class Builder { - private final double[] mPowerComponents; + private final double[] mPowerComponentsMah; private final int mCustomPowerComponentCount; - private final long[] mTimeComponents; + private final long[] mTimeComponentsMs; Builder(int customPowerComponentCount, int customTimeComponentCount) { mCustomPowerComponentCount = customPowerComponentCount; int powerComponentCount = BatteryConsumer.POWER_COMPONENT_COUNT + customPowerComponentCount; - mPowerComponents = new double[powerComponentCount]; - mTimeComponents = + mPowerComponentsMah = new double[powerComponentCount]; + mTimeComponentsMs = new long[BatteryConsumer.TIME_COMPONENT_COUNT + customTimeComponentCount]; } @@ -173,7 +173,7 @@ class PowerComponents { "Unsupported power component ID: " + componentId); } try { - mPowerComponents[componentId] = componentPower; + mPowerComponentsMah[componentId] = componentPower; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported power component ID: " + componentId); @@ -192,7 +192,8 @@ class PowerComponents { if (componentId >= BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID && componentId < BatteryConsumer.LAST_CUSTOM_POWER_COMPONENT_ID) { try { - mPowerComponents[CUSTOM_POWER_COMPONENT_OFFSET + componentId] = componentPower; + mPowerComponentsMah[CUSTOM_POWER_COMPONENT_OFFSET + componentId] = + componentPower; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported custom power component ID: " + componentId); @@ -219,7 +220,7 @@ class PowerComponents { "Unsupported time component ID: " + componentId); } try { - mTimeComponents[componentId] = componentUsageDurationMillis; + mTimeComponentsMs[componentId] = componentUsageDurationMillis; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( "Unsupported time component ID: " + componentId); @@ -241,7 +242,7 @@ class PowerComponents { "Unsupported custom time component ID: " + componentId); } try { - mTimeComponents[CUSTOM_TIME_COMPONENT_OFFSET + componentId] = + mTimeComponentsMs[CUSTOM_TIME_COMPONENT_OFFSET + componentId] = componentUsageDurationMillis; } catch (ArrayIndexOutOfBoundsException e) { throw new IllegalArgumentException( @@ -251,11 +252,11 @@ class PowerComponents { } public void addPowerAndDuration(Builder other) { - for (int i = 0; i < mPowerComponents.length; i++) { - mPowerComponents[i] += other.mPowerComponents[i]; + for (int i = 0; i < mPowerComponentsMah.length; i++) { + mPowerComponentsMah[i] += other.mPowerComponentsMah[i]; } - for (int i = 0; i < mTimeComponents.length; i++) { - mTimeComponents[i] += other.mTimeComponents[i]; + for (int i = 0; i < mTimeComponentsMs.length; i++) { + mTimeComponentsMs[i] += other.mTimeComponentsMs[i]; } } @@ -264,11 +265,11 @@ class PowerComponents { * by the time the {@code build()} method is called. */ public double getTotalPower() { - double totalPower = 0; - for (int i = mPowerComponents.length - 1; i >= 0; i--) { - totalPower += mPowerComponents[i]; + double totalPowerMah = 0; + for (int i = mPowerComponentsMah.length - 1; i >= 0; i--) { + totalPowerMah += mPowerComponentsMah[i]; } - return totalPower; + return totalPowerMah; } /** diff --git a/core/java/android/os/SystemBatteryConsumer.java b/core/java/android/os/SystemBatteryConsumer.java index fc4aa93b97c7..06cff904a215 100644 --- a/core/java/android/os/SystemBatteryConsumer.java +++ b/core/java/android/os/SystemBatteryConsumer.java @@ -45,12 +45,13 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable DRAIN_TYPE_FLASHLIGHT, DRAIN_TYPE_IDLE, DRAIN_TYPE_MEMORY, - DRAIN_TYPE_OVERCOUNTED, + // Reserved: OVERCOUNTED, DRAIN_TYPE_PHONE, DRAIN_TYPE_SCREEN, - DRAIN_TYPE_UNACCOUNTED, + // Reserved: UNACCOUNTED, // Reserved: USER, DRAIN_TYPE_WIFI, + DRAIN_TYPE_CUSTOM, }) @Retention(RetentionPolicy.SOURCE) public static @interface DrainType { @@ -63,11 +64,10 @@ public class SystemBatteryConsumer extends BatteryConsumer implements Parcelable public static final int DRAIN_TYPE_FLASHLIGHT = 5; public static final int DRAIN_TYPE_IDLE = 6; public static final int DRAIN_TYPE_MEMORY = 7; - public static final int DRAIN_TYPE_OVERCOUNTED = 8; public static final int DRAIN_TYPE_PHONE = 9; public static final int DRAIN_TYPE_SCREEN = 10; - public static final int DRAIN_TYPE_UNACCOUNTED = 11; public static final int DRAIN_TYPE_WIFI = 13; + public static final int DRAIN_TYPE_CUSTOM = 14; @DrainType private final int mDrainType; diff --git a/core/java/com/android/internal/os/BatteryStatsImpl.java b/core/java/com/android/internal/os/BatteryStatsImpl.java index e599888c3bee..1f8ffe08a257 100644 --- a/core/java/com/android/internal/os/BatteryStatsImpl.java +++ b/core/java/com/android/internal/os/BatteryStatsImpl.java @@ -767,7 +767,7 @@ public class BatteryStatsImpl extends BatteryStats { // Last recorded battery energy capacity. // This is used for computing foregrund power per application. // See: PowerForUid below - private long mLastBatteryEnergyCapacityNWh = 0; + private long mLastBatteryEnergyCapacityNwh = 0; private static final class PowerForUid { public long energyNwh = 0; @@ -1089,12 +1089,12 @@ public class BatteryStatsImpl extends BatteryStats { private int mNumConnectivityChange; - private int mBatteryVolt = -1; - private int mBatteryCharge = -1; - private int mEstimatedBatteryCapacity = -1; + private int mBatteryVoltageMv = -1; + private int mBatteryChargeUah = -1; + private int mEstimatedBatteryCapacityMah = -1; - private int mMinLearnedBatteryCapacity = -1; - private int mMaxLearnedBatteryCapacity = -1; + private int mMinLearnedBatteryCapacityUah = -1; + private int mMaxLearnedBatteryCapacityUah = -1; private long mBatteryTimeToFullSeconds = -1; @@ -1175,17 +1175,17 @@ public class BatteryStatsImpl extends BatteryStats { @Override public int getEstimatedBatteryCapacity() { - return mEstimatedBatteryCapacity; + return mEstimatedBatteryCapacityMah; } @Override public int getMinLearnedBatteryCapacity() { - return mMinLearnedBatteryCapacity; + return mMinLearnedBatteryCapacityUah; } @Override public int getMaxLearnedBatteryCapacity() { - return mMaxLearnedBatteryCapacity; + return mMaxLearnedBatteryCapacityUah; } public BatteryStatsImpl() { @@ -3416,7 +3416,7 @@ public class BatteryStatsImpl extends BatteryStats { firstToken |= DELTA_EVENT_FLAG; } - final boolean batteryChargeChanged = cur.batteryChargeUAh != last.batteryChargeUAh; + final boolean batteryChargeChanged = cur.batteryChargeUah != last.batteryChargeUah; if (batteryChargeChanged) { firstToken |= DELTA_BATTERY_CHARGE_FLAG; } @@ -3505,8 +3505,8 @@ public class BatteryStatsImpl extends BatteryStats { mLastHistoryStepLevel = cur.batteryLevel; if (batteryChargeChanged) { - if (DEBUG) Slog.i(TAG, "WRITE DELTA: batteryChargeUAh=" + cur.batteryChargeUAh); - dest.writeInt(cur.batteryChargeUAh); + if (DEBUG) Slog.i(TAG, "WRITE DELTA: batteryChargeUah=" + cur.batteryChargeUah); + dest.writeInt(cur.batteryChargeUah); } dest.writeDouble(cur.modemRailChargeMah); dest.writeDouble(cur.wifiRailChargeMah); @@ -3756,7 +3756,7 @@ public class BatteryStatsImpl extends BatteryStats { } if ((firstToken&DELTA_BATTERY_CHARGE_FLAG) != 0) { - cur.batteryChargeUAh = src.readInt(); + cur.batteryChargeUah = src.readInt(); } cur.modemRailChargeMah = src.readDouble(); cur.wifiRailChargeMah = src.readDouble(); @@ -7222,6 +7222,10 @@ public class BatteryStatsImpl extends BatteryStats { return mOnBattery; } + @Override public long getStatsStartRealtime() { + return mRealtimeStartUs; + } + @UnsupportedAppUsage @Override public SparseArray<? extends BatteryStats.Uid> getUidStats() { return mUidStats; @@ -10745,11 +10749,6 @@ public class BatteryStatsImpl extends BatteryStats { long realtimeUs = mClocks.elapsedRealtime() * 1000; initTimes(uptimeUs, realtimeUs); mStartPlatformVersion = mEndPlatformVersion = Build.ID; - mDischargeStartLevel = 0; - mDischargeUnplugLevel = 0; - mDischargePlugLevel = -1; - mDischargeCurrentLevel = 0; - mCurrentBatteryLevel = 0; initDischarge(realtimeUs); clearHistoryLocked(); updateDailyDeadlineLocked(); @@ -10835,6 +10834,11 @@ public class BatteryStatsImpl extends BatteryStats { mDischargeLightDozeCounter = new LongSamplingCounter(mOnBatteryTimeBase); mDischargeDeepDozeCounter = new LongSamplingCounter(mOnBatteryTimeBase); mDischargeCounter = new LongSamplingCounter(mOnBatteryTimeBase); + mDischargeStartLevel = 0; + mDischargeUnplugLevel = 0; + mDischargePlugLevel = -1; + mDischargeCurrentLevel = 0; + mCurrentBatteryLevel = 0; } @UnsupportedAppUsage @@ -10873,9 +10877,9 @@ public class BatteryStatsImpl extends BatteryStats { firstCpuOfCluster += mPowerProfile.getNumCoresInCpuCluster(i); } - if (mEstimatedBatteryCapacity == -1) { + if (mEstimatedBatteryCapacityMah == -1) { // Initialize the estimated battery capacity to a known preset one. - mEstimatedBatteryCapacity = (int) mPowerProfile.getBatteryCapacity(); + mEstimatedBatteryCapacityMah = (int) mPowerProfile.getBatteryCapacity(); } } @@ -11439,12 +11443,12 @@ public class BatteryStatsImpl extends BatteryStats { } if (mPowerProfile != null) { - mEstimatedBatteryCapacity = (int) mPowerProfile.getBatteryCapacity(); + mEstimatedBatteryCapacityMah = (int) mPowerProfile.getBatteryCapacity(); } else { - mEstimatedBatteryCapacity = -1; + mEstimatedBatteryCapacityMah = -1; } - mMinLearnedBatteryCapacity = -1; - mMaxLearnedBatteryCapacity = -1; + mMinLearnedBatteryCapacityUah = -1; + mMaxLearnedBatteryCapacityUah = -1; mInteractiveTimer.reset(false, elapsedRealtimeUs); mPowerSaveModeEnabledTimer.reset(false, elapsedRealtimeUs); mLastIdleTimeStartMs = elapsedRealtimeMillis; @@ -11563,7 +11567,9 @@ public class BatteryStatsImpl extends BatteryStats { initDischarge(elapsedRealtimeUs); clearHistoryLocked(); - mBatteryStatsHistory.resetAllFiles(); + if (mBatteryStatsHistory != null) { + mBatteryStatsHistory.resetAllFiles(); + } // Flush external data, gathering snapshots, but don't process it since it is pre-reset data mIgnoreNextExternalStats = true; @@ -13212,7 +13218,7 @@ public class BatteryStatsImpl extends BatteryStats { @GuardedBy("this") protected void setOnBatteryLocked(final long mSecRealtime, final long mSecUptime, - final boolean onBattery, final int oldStatus, final int level, final int chargeUAh) { + final boolean onBattery, final int oldStatus, final int level, final int chargeUah) { boolean doWrite = false; Message m = mHandler.obtainMessage(MSG_REPORT_POWER_CHANGE); m.arg1 = onBattery ? 1 : 0; @@ -13268,10 +13274,10 @@ public class BatteryStatsImpl extends BatteryStats { } doWrite = true; resetAllStatsLocked(mSecUptime, mSecRealtime); - if (chargeUAh > 0 && level > 0) { - mBatteryCharge = chargeUAh; + if (chargeUah > 0 && level > 0) { + mBatteryChargeUah = chargeUah; // Only use the reported coulomb charge value if it is supported and reported. - mEstimatedBatteryCapacity = (int) ((chargeUAh / 1000) / (level / 100.0)); + mEstimatedBatteryCapacityMah = (int) ((chargeUah / 1000) / (level / 100.0)); } mDischargeStartLevel = level; reset = true; @@ -13386,16 +13392,16 @@ public class BatteryStatsImpl extends BatteryStats { @GuardedBy("this") public void setBatteryStateLocked(final int status, final int health, final int plugType, - final int level, /* not final */ int temp, final int volt, final int chargeUAh, - final int chargeFullUAh, final long chargeTimeToFullSeconds) { - setBatteryStateLocked(status, health, plugType, level, temp, volt, chargeUAh, - chargeFullUAh, chargeTimeToFullSeconds, + final int level, /* not final */ int temp, final int voltageMv, final int chargeUah, + final int chargeFullUah, final long chargeTimeToFullSeconds) { + setBatteryStateLocked(status, health, plugType, level, temp, voltageMv, chargeUah, + chargeFullUah, chargeTimeToFullSeconds, mClocks.elapsedRealtime(), mClocks.uptimeMillis(), System.currentTimeMillis()); } public void setBatteryStateLocked(final int status, final int health, final int plugType, - final int level, /* not final */ int temp, final int volt, final int chargeUAh, - final int chargeFullUAh, final long chargeTimeToFullSeconds, + final int level, /* not final */ int temp, final int voltageMv, final int chargeUah, + final int chargeFullUah, final long chargeTimeToFullSeconds, final long elapsedRealtimeMs, final long uptimeMs, final long currentTimeMs) { // Temperature is encoded without the signed bit, so clamp any negative temperatures to 0. temp = Math.max(0, temp); @@ -13421,7 +13427,7 @@ public class BatteryStatsImpl extends BatteryStats { mHistoryCur.states2 |= HistoryItem.STATE2_CHARGING_FLAG; mHistoryCur.batteryStatus = (byte)status; mHistoryCur.batteryLevel = (byte)level; - mHistoryCur.batteryChargeUAh = chargeUAh; + mHistoryCur.batteryChargeUah = chargeUah; mMaxChargeStepLevel = mMinDischargeStepLevel = mLastChargeStepLevel = mLastDischargeStepLevel = level; mLastChargingStateLevel = level; @@ -13444,10 +13450,10 @@ public class BatteryStatsImpl extends BatteryStats { } if (ENABLE_FOREGROUND_STATS_COLLECTION) { - mBatteryVolt = volt; + mBatteryVoltageMv = voltageMv; if (onBattery) { - final long energyNwh = (volt * (long) chargeUAh); - final long energyDelta = mLastBatteryEnergyCapacityNWh - energyNwh; + final long energyNwh = (voltageMv * (long) chargeUah); + final long energyDelta = mLastBatteryEnergyCapacityNwh - energyNwh; for (int i = 0; i < mForegroundUids.size(); i++) { final int uid = mForegroundUids.get(i); if (uid == INVALID_UID) { @@ -13458,7 +13464,7 @@ public class BatteryStatsImpl extends BatteryStats { if (pfu.baseTimeMs <= 0) { pfu.baseTimeMs = currentTimeMs; } else { - // Check if mLastBatteryEnergyCapacityNWh > energyNwh, + // Check if mLastBatteryEnergyCapacityNwh > energyNwh, // to make sure we only count discharges if (energyDelta > 0) { pfu.energyNwh += energyDelta; @@ -13476,7 +13482,7 @@ public class BatteryStatsImpl extends BatteryStats { pfu.baseTimeMs = currentTimeMs; } } - mLastBatteryEnergyCapacityNWh = energyNwh; + mLastBatteryEnergyCapacityNwh = energyNwh; } else if (onBattery != mOnBattery) { // Transition to onBattery = false mUidToPower.values().forEach(v -> v.baseTimeMs = 0); @@ -13494,10 +13500,10 @@ public class BatteryStatsImpl extends BatteryStats { mHistoryCur.batteryHealth = (byte)health; mHistoryCur.batteryPlugType = (byte)plugType; mHistoryCur.batteryTemperature = (short)temp; - mHistoryCur.batteryVoltage = (char)volt; - if (chargeUAh < mHistoryCur.batteryChargeUAh) { + mHistoryCur.batteryVoltage = (char) voltageMv; + if (chargeUah < mHistoryCur.batteryChargeUah) { // Only record discharges - final long chargeDiff = mHistoryCur.batteryChargeUAh - chargeUAh; + final long chargeDiff = mHistoryCur.batteryChargeUah - chargeUah; mDischargeCounter.addCountLocked(chargeDiff); mDischargeScreenOffCounter.addCountLocked(chargeDiff); if (Display.isDozeState(mScreenState)) { @@ -13509,8 +13515,8 @@ public class BatteryStatsImpl extends BatteryStats { mDischargeDeepDozeCounter.addCountLocked(chargeDiff); } } - mHistoryCur.batteryChargeUAh = chargeUAh; - setOnBatteryLocked(elapsedRealtimeMs, uptimeMs, onBattery, oldStatus, level, chargeUAh); + mHistoryCur.batteryChargeUah = chargeUah; + setOnBatteryLocked(elapsedRealtimeMs, uptimeMs, onBattery, oldStatus, level, chargeUah); } else { boolean changed = false; if (mHistoryCur.batteryLevel != level) { @@ -13539,16 +13545,16 @@ public class BatteryStatsImpl extends BatteryStats { mHistoryCur.batteryTemperature = (short)temp; changed = true; } - if (volt > (mHistoryCur.batteryVoltage+20) - || volt < (mHistoryCur.batteryVoltage-20)) { - mHistoryCur.batteryVoltage = (char)volt; + if (voltageMv > (mHistoryCur.batteryVoltage + 20) + || voltageMv < (mHistoryCur.batteryVoltage - 20)) { + mHistoryCur.batteryVoltage = (char) voltageMv; changed = true; } - if (chargeUAh >= (mHistoryCur.batteryChargeUAh+10) - || chargeUAh <= (mHistoryCur.batteryChargeUAh-10)) { - if (chargeUAh < mHistoryCur.batteryChargeUAh) { + if (chargeUah >= (mHistoryCur.batteryChargeUah + 10) + || chargeUah <= (mHistoryCur.batteryChargeUah - 10)) { + if (chargeUah < mHistoryCur.batteryChargeUah) { // Only record discharges - final long chargeDiff = mHistoryCur.batteryChargeUAh - chargeUAh; + final long chargeDiff = mHistoryCur.batteryChargeUah - chargeUah; mDischargeCounter.addCountLocked(chargeDiff); mDischargeScreenOffCounter.addCountLocked(chargeDiff); if (Display.isDozeState(mScreenState)) { @@ -13560,7 +13566,7 @@ public class BatteryStatsImpl extends BatteryStats { mDischargeDeepDozeCounter.addCountLocked(chargeDiff); } } - mHistoryCur.batteryChargeUAh = chargeUAh; + mHistoryCur.batteryChargeUah = chargeUah; changed = true; } long modeBits = (((long)mInitStepMode) << STEP_LEVEL_INITIAL_MODE_SHIFT) @@ -13632,12 +13638,12 @@ public class BatteryStatsImpl extends BatteryStats { mRecordingHistory = DEBUG; } - if (mMinLearnedBatteryCapacity == -1) { - mMinLearnedBatteryCapacity = chargeFullUAh; + if (mMinLearnedBatteryCapacityUah == -1) { + mMinLearnedBatteryCapacityUah = chargeFullUah; } else { - mMinLearnedBatteryCapacity = Math.min(mMinLearnedBatteryCapacity, chargeFullUAh); + mMinLearnedBatteryCapacityUah = Math.min(mMinLearnedBatteryCapacityUah, chargeFullUah); } - mMaxLearnedBatteryCapacity = Math.max(mMaxLearnedBatteryCapacity, chargeFullUAh); + mMaxLearnedBatteryCapacityUah = Math.max(mMaxLearnedBatteryCapacityUah, chargeFullUah); mBatteryTimeToFullSeconds = chargeTimeToFullSeconds; } @@ -14912,9 +14918,9 @@ public class BatteryStatsImpl extends BatteryStats { mDischargePlugLevel = in.readInt(); mDischargeCurrentLevel = in.readInt(); mCurrentBatteryLevel = in.readInt(); - mEstimatedBatteryCapacity = in.readInt(); - mMinLearnedBatteryCapacity = in.readInt(); - mMaxLearnedBatteryCapacity = in.readInt(); + mEstimatedBatteryCapacityMah = in.readInt(); + mMinLearnedBatteryCapacityUah = in.readInt(); + mMaxLearnedBatteryCapacityUah = in.readInt(); mLowDischargeAmountSinceCharge = in.readInt(); mHighDischargeAmountSinceCharge = in.readInt(); mDischargeAmountScreenOnSinceCharge = in.readInt(); @@ -15416,9 +15422,9 @@ public class BatteryStatsImpl extends BatteryStats { out.writeInt(mDischargePlugLevel); out.writeInt(mDischargeCurrentLevel); out.writeInt(mCurrentBatteryLevel); - out.writeInt(mEstimatedBatteryCapacity); - out.writeInt(mMinLearnedBatteryCapacity); - out.writeInt(mMaxLearnedBatteryCapacity); + out.writeInt(mEstimatedBatteryCapacityMah); + out.writeInt(mMinLearnedBatteryCapacityUah); + out.writeInt(mMaxLearnedBatteryCapacityUah); out.writeInt(getLowDischargeAmountSinceCharge()); out.writeInt(getHighDischargeAmountSinceCharge()); out.writeInt(getDischargeAmountScreenOnSinceCharge()); @@ -15917,9 +15923,9 @@ public class BatteryStatsImpl extends BatteryStats { mRealtimeUs = in.readLong(); mRealtimeStartUs = in.readLong(); mOnBattery = in.readInt() != 0; - mEstimatedBatteryCapacity = in.readInt(); - mMinLearnedBatteryCapacity = in.readInt(); - mMaxLearnedBatteryCapacity = in.readInt(); + mEstimatedBatteryCapacityMah = in.readInt(); + mMinLearnedBatteryCapacityUah = in.readInt(); + mMaxLearnedBatteryCapacityUah = in.readInt(); mOnBatteryInternal = false; // we are no longer really running. mOnBatteryTimeBase.readFromParcel(in); mOnBatteryScreenOffTimeBase.readFromParcel(in); @@ -16156,9 +16162,9 @@ public class BatteryStatsImpl extends BatteryStats { out.writeLong(mRealtimeUs); out.writeLong(mRealtimeStartUs); out.writeInt(mOnBattery ? 1 : 0); - out.writeInt(mEstimatedBatteryCapacity); - out.writeInt(mMinLearnedBatteryCapacity); - out.writeInt(mMaxLearnedBatteryCapacity); + out.writeInt(mEstimatedBatteryCapacityMah); + out.writeInt(mMinLearnedBatteryCapacityUah); + out.writeInt(mMaxLearnedBatteryCapacityUah); mOnBatteryTimeBase.writeToParcel(out, uSecUptime, uSecRealtime); mOnBatteryScreenOffTimeBase.writeToParcel(out, uSecUptime, uSecRealtime); @@ -16414,8 +16420,8 @@ public class BatteryStatsImpl extends BatteryStats { public void dumpLocked(Context context, PrintWriter pw, int flags, int reqUid, long histStart) { if (ENABLE_FOREGROUND_STATS_COLLECTION) { - long actualCharge = -1; - long actualEnergy = -1; + long actualChargeUah = -1; + long actualEnergyNwh = -1; try { IBatteryPropertiesRegistrar registrar = IBatteryPropertiesRegistrar.Stub.asInterface( @@ -16424,27 +16430,27 @@ public class BatteryStatsImpl extends BatteryStats { BatteryProperty prop = new BatteryProperty(); if (registrar.getProperty( BatteryManager.BATTERY_PROPERTY_CHARGE_COUNTER, prop) == 0) { - actualCharge = prop.getLong(); + actualChargeUah = prop.getLong(); } prop = new BatteryProperty(); if (registrar.getProperty( BatteryManager.BATTERY_PROPERTY_ENERGY_COUNTER, prop) == 0) { - actualEnergy = prop.getLong(); + actualEnergyNwh = prop.getLong(); } } } catch (RemoteException e) { // Ignore. } - pw.printf("ActualCharge (uAh): %d\n", (int) actualCharge); - pw.printf("ActualEnergy (nWh): %d\n", actualEnergy); - pw.printf("mBatteryCharge (uAh): %d\n", mBatteryCharge); - pw.printf("mBatteryVolts (mV): %d\n", mBatteryVolt); - pw.printf("est energy (nWh): %d\n", mBatteryVolt * (long) mBatteryCharge); - pw.printf("mEstimatedBatteryCapacity (mAh): %d\n", mEstimatedBatteryCapacity); - pw.printf("mMinLearnedBatteryCapacity (uAh): %d\n", mMinLearnedBatteryCapacity); - pw.printf("mMaxLearnedBatteryCapacity (uAh): %d\n", mMaxLearnedBatteryCapacity); + pw.printf("ActualCharge (uAh): %d\n", (int) actualChargeUah); + pw.printf("ActualEnergy (nWh): %d\n", actualEnergyNwh); + pw.printf("mBatteryCharge (uAh): %d\n", mBatteryChargeUah); + pw.printf("mBatteryVolts (mV): %d\n", mBatteryVoltageMv); + pw.printf("est energy (nWh): %d\n", mBatteryVoltageMv * (long) mBatteryChargeUah); + pw.printf("mEstimatedBatteryCapacity (mAh): %d\n", mEstimatedBatteryCapacityMah); + pw.printf("mMinLearnedBatteryCapacity (uAh): %d\n", mMinLearnedBatteryCapacityUah); + pw.printf("mMaxLearnedBatteryCapacity (uAh): %d\n", mMaxLearnedBatteryCapacityUah); pw.printf("est. capacity: %f\n", - (float) actualCharge / (mEstimatedBatteryCapacity * 1000)); + (float) actualChargeUah / (mEstimatedBatteryCapacityMah * 1000)); pw.printf("mCurrentBatteryLevel: %d\n", mCurrentBatteryLevel); pw.println("Total Power per app:"); mUidToPower.entrySet().forEach(e -> diff --git a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java index 233ba1912dcd..eef9fa74e83a 100644 --- a/core/java/com/android/internal/os/BatteryUsageStatsProvider.java +++ b/core/java/com/android/internal/os/BatteryUsageStatsProvider.java @@ -52,6 +52,7 @@ public class BatteryUsageStatsProvider { mPowerCalculators = new ArrayList<>(); // Power calculators are applied in the order of registration + mPowerCalculators.add(new DischargedPowerCalculator(mPowerProfile)); mPowerCalculators.add(new CpuPowerCalculator(mPowerProfile)); mPowerCalculators.add(new MemoryPowerCalculator(mPowerProfile)); mPowerCalculators.add(new WakelockPowerCalculator(mPowerProfile)); @@ -106,21 +107,24 @@ public class BatteryUsageStatsProvider { ArrayList<BatteryUsageStats> results = new ArrayList<>(queries.size()); for (int i = 0; i < queries.size(); i++) { - results.add(getBatteryUsageStats(queries.get(i), batteryStatsHelper)); + results.add(getBatteryUsageStats(queries.get(i))); } return results; } - private BatteryUsageStats getBatteryUsageStats(BatteryUsageStatsQuery query, - BatteryStatsHelper batteryStatsHelper) { - // TODO(b/174186358): read extra power component number from configuration - final int customPowerComponentCount = 0; + private BatteryUsageStats getBatteryUsageStats(BatteryUsageStatsQuery query) { + final long[] customMeasuredEnergiesMicroJoules = + mStats.getCustomMeasuredEnergiesMicroJoules(); + final int customPowerComponentCount = customMeasuredEnergiesMicroJoules != null + ? customMeasuredEnergiesMicroJoules.length + : 0; + + // TODO(b/174186358): read extra time component number from configuration final int customTimeComponentCount = 0; final BatteryUsageStats.Builder batteryUsageStatsBuilder = new BatteryUsageStats.Builder(customPowerComponentCount, customTimeComponentCount) - .setDischargePercentage(batteryStatsHelper.getStats().getDischargeAmount(0)) - .setConsumedPower(batteryStatsHelper.getTotalPower()); + .setStatsStartRealtime(mStats.getStatsStartRealtime() / 1000); SparseArray<? extends BatteryStats.Uid> uidStats = mStats.getUidStats(); for (int i = uidStats.size() - 1; i >= 0; i--) { diff --git a/core/java/com/android/internal/os/CustomMeasuredPowerCalculator.java b/core/java/com/android/internal/os/CustomMeasuredPowerCalculator.java index 4babe8d5fe96..2606d80eaa09 100644 --- a/core/java/com/android/internal/os/CustomMeasuredPowerCalculator.java +++ b/core/java/com/android/internal/os/CustomMeasuredPowerCalculator.java @@ -15,7 +15,12 @@ */ package com.android.internal.os; +import android.os.BatteryConsumer; import android.os.BatteryStats; +import android.os.BatteryUsageStats; +import android.os.BatteryUsageStatsQuery; +import android.os.SystemBatteryConsumer; +import android.os.UidBatteryConsumer; /** * Calculates the amount of power consumed by custom energy consumers (i.e. consumers of type @@ -26,6 +31,38 @@ public class CustomMeasuredPowerCalculator extends PowerCalculator { } @Override + public void calculate(BatteryUsageStats.Builder builder, BatteryStats batteryStats, + long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) { + super.calculate(builder, batteryStats, rawRealtimeUs, rawUptimeUs, query); + final double[] customMeasuredPowerMah = calculateMeasuredEnergiesMah( + batteryStats.getCustomMeasuredEnergiesMicroJoules()); + if (customMeasuredPowerMah != null) { + final SystemBatteryConsumer.Builder systemBatteryConsumerBuilder = + builder.getOrCreateSystemBatteryConsumerBuilder( + SystemBatteryConsumer.DRAIN_TYPE_CUSTOM); + for (int i = 0; i < customMeasuredPowerMah.length; i++) { + systemBatteryConsumerBuilder.setConsumedPowerForCustomComponent( + BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + i, + customMeasuredPowerMah[i]); + } + } + } + + @Override + protected void calculateApp(UidBatteryConsumer.Builder app, BatteryStats.Uid u, + long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) { + final double[] customMeasuredPowerMah = calculateMeasuredEnergiesMah( + u.getCustomMeasuredEnergiesMicroJoules()); + if (customMeasuredPowerMah != null) { + for (int i = 0; i < customMeasuredPowerMah.length; i++) { + app.setConsumedPowerForCustomComponent( + BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + i, + customMeasuredPowerMah[i]); + } + } + } + + @Override protected void calculateApp(BatterySipper app, BatteryStats.Uid u, long rawRealtimeUs, long rawUptimeUs, int statsType) { updateCustomMeasuredPowerMah(app, u.getCustomMeasuredEnergiesMicroJoules()); diff --git a/core/java/com/android/internal/os/DischargedPowerCalculator.java b/core/java/com/android/internal/os/DischargedPowerCalculator.java new file mode 100644 index 000000000000..e94020cc4f18 --- /dev/null +++ b/core/java/com/android/internal/os/DischargedPowerCalculator.java @@ -0,0 +1,52 @@ +/* + * Copyright (C) 2021 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.internal.os; + +import android.os.BatteryStats; +import android.os.BatteryUsageStats; +import android.os.BatteryUsageStatsQuery; +import android.os.UserHandle; +import android.util.SparseArray; + +import java.util.List; + +/** + * Estimates the battery discharge amounts. + */ +public class DischargedPowerCalculator extends PowerCalculator { + private final double mBatteryCapacity; + + public DischargedPowerCalculator(PowerProfile powerProfile) { + mBatteryCapacity = powerProfile.getBatteryCapacity(); + } + + @Override + public void calculate(BatteryUsageStats.Builder builder, BatteryStats batteryStats, + long rawRealtimeUs, long rawUptimeUs, BatteryUsageStatsQuery query) { + builder.setDischargePercentage( + batteryStats.getDischargeAmount(BatteryStats.STATS_SINCE_CHARGED)) + .setDischargedPowerRange( + batteryStats.getLowDischargeAmountSinceCharge() * mBatteryCapacity / 100, + batteryStats.getHighDischargeAmountSinceCharge() * mBatteryCapacity / 100); + } + + @Override + public void calculate(List<BatterySipper> sippers, BatteryStats batteryStats, + long rawRealtimeUs, long rawUptimeUs, int statsType, SparseArray<UserHandle> asUsers) { + // Not implemented. The computation is done by BatteryStatsHelper + } +} diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml index 59285d794045..9a917b72a5fd 100644 --- a/core/res/res/values/config.xml +++ b/core/res/res/values/config.xml @@ -4592,11 +4592,12 @@ <item>com.android.systemui</item> </string-array> - <!-- Package name of custom media key dispatcher class used by MediaSessionService. --> + <!-- Component name of custom media key dispatcher class used by MediaSessionService. --> <string name="config_customMediaKeyDispatcher"></string> - <!-- Package name of custom session policy provider class used by MediaSessionService. --> - <string name="config_customSessionPolicyProvider"></string> + <!-- Component name of custom media session policy provider class used by + MediaSessionService. --> + <string name="config_customMediaSessionPolicyProvider"></string> <!-- The max scale for the wallpaper when it's zoomed in --> <item name="config_wallpaperMaxScale" format="float" type="dimen">1.10</item> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 22dce9b9935c..a1ea61c447c0 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -3153,6 +3153,10 @@ <public name="config_systemShell" /> <!-- @hide @SystemApi --> <public name="config_systemContacts" /> + <!-- @hide @SystemApi --> + <public name="config_customMediaKeyDispatcher" /> + <!-- @hide @SystemApi --> + <public name="config_customMediaSessionPolicyProvider" /> </public-group> <public-group type="id" first-id="0x01020055"> diff --git a/core/res/res/values/symbols.xml b/core/res/res/values/symbols.xml index 70b358fd4d77..b5af5240b843 100644 --- a/core/res/res/values/symbols.xml +++ b/core/res/res/values/symbols.xml @@ -4115,8 +4115,6 @@ <java-symbol type="string" name="notification_history_title_placeholder" /> - <java-symbol type="string" name="config_customMediaKeyDispatcher" /> - <java-symbol type="string" name="config_customSessionPolicyProvider" /> <!-- The max scale for the wallpaper when it's zoomed in --> <java-symbol type="dimen" name="config_wallpaperMaxScale"/> diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java index 2e6e0de8d0c2..b819d9edb2a8 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryStatsTests.java @@ -46,6 +46,8 @@ import org.junit.runners.Suite; BstatsCpuTimesValidationTest.class, CameraPowerCalculatorTest.class, CpuPowerCalculatorTest.class, + CustomMeasuredPowerCalculatorTest.class, + DischargedPowerCalculatorTest.class, FlashlightPowerCalculatorTest.class, GnssPowerCalculatorTest.class, IdlePowerCalculatorTest.class, diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java index 5edd58fb3eb9..167994200ed7 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsRule.java @@ -136,17 +136,23 @@ public class BatteryUsageStatsRule implements TestRule { return mBatteryStats.getUidStatsLocked(uid); } - public void setTime(long realtimeUs, long uptimeUs) { - mMockClocks.realtime = realtimeUs; - mMockClocks.uptime = uptimeUs; + public void setTime(long realtimeMs, long uptimeMs) { + mMockClocks.realtime = realtimeMs; + mMockClocks.uptime = uptimeMs; } - void apply(PowerCalculator... calculators) { - apply(BatteryUsageStatsQuery.DEFAULT, calculators); + BatteryUsageStats apply(PowerCalculator... calculators) { + return apply(BatteryUsageStatsQuery.DEFAULT, calculators); } - void apply(BatteryUsageStatsQuery query, PowerCalculator... calculators) { - BatteryUsageStats.Builder builder = new BatteryUsageStats.Builder(0, 0); + BatteryUsageStats apply(BatteryUsageStatsQuery query, PowerCalculator... calculators) { + final long[] customMeasuredEnergiesMicroJoules = + mBatteryStats.getCustomMeasuredEnergiesMicroJoules(); + final int customMeasuredEnergiesCount = customMeasuredEnergiesMicroJoules != null + ? customMeasuredEnergiesMicroJoules.length + : 0; + BatteryUsageStats.Builder builder = new BatteryUsageStats.Builder( + customMeasuredEnergiesCount, 0); SparseArray<? extends BatteryStats.Uid> uidStats = mBatteryStats.getUidStats(); for (int i = 0; i < uidStats.size(); i++) { builder.getOrCreateUidBatteryConsumerBuilder(uidStats.valueAt(i)); @@ -158,6 +164,7 @@ public class BatteryUsageStatsRule implements TestRule { } mBatteryUsageStats = builder.build(); + return mBatteryUsageStats; } public UidBatteryConsumer getUidBatteryConsumer(int uid) { diff --git a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java index 018a810772be..355ac6dbcc00 100644 --- a/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java +++ b/core/tests/coretests/src/com/android/internal/os/BatteryUsageStatsTest.java @@ -67,8 +67,8 @@ public class BatteryUsageStatsTest { final BatteryStatsImpl.Uid batteryStatsUid = batteryStats.getUidStatsLocked(2000); final BatteryUsageStats.Builder builder = new BatteryUsageStats.Builder(1, 1); - builder.setConsumedPower(100); builder.setDischargePercentage(20); + builder.setDischargedPowerRange(1000, 2000); final UidBatteryConsumer.Builder uidBatteryConsumerBuilder = builder.getOrCreateUidBatteryConsumerBuilder(batteryStatsUid); @@ -100,6 +100,8 @@ public class BatteryUsageStatsTest { public void validateBatteryUsageStats(BatteryUsageStats batteryUsageStats) { assertThat(batteryUsageStats.getConsumedPower()).isEqualTo(100); assertThat(batteryUsageStats.getDischargePercentage()).isEqualTo(20); + assertThat(batteryUsageStats.getDischargedPowerRange().getLower()).isEqualTo(1000); + assertThat(batteryUsageStats.getDischargedPowerRange().getUpper()).isEqualTo(2000); final List<UidBatteryConsumer> uidBatteryConsumers = batteryUsageStats.getUidBatteryConsumers(); diff --git a/core/tests/coretests/src/com/android/internal/os/CustomMeasuredPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/CustomMeasuredPowerCalculatorTest.java new file mode 100644 index 000000000000..a4ea8923794a --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/os/CustomMeasuredPowerCalculatorTest.java @@ -0,0 +1,76 @@ +/* + * Copyright (C) 2021 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.internal.os; + +import static com.google.common.truth.Truth.assertThat; + +import android.os.BatteryConsumer; +import android.os.Process; +import android.os.SystemBatteryConsumer; +import android.os.UidBatteryConsumer; +import android.util.SparseLongArray; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidJUnit4.class) +@SmallTest +public class CustomMeasuredPowerCalculatorTest { + private static final double PRECISION = 0.00001; + + private static final int APP_UID = Process.FIRST_APPLICATION_UID + 42; + + @Rule + public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule(); + + @Test + public void testMeasuredEnergyCopiedIntoBatteryConsumers() { + final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats(); + SparseLongArray uidEnergies = new SparseLongArray(); + uidEnergies.put(APP_UID, 30_000_000); + batteryStats.updateCustomMeasuredEnergyDataLocked(0, 100_000_000, uidEnergies); + + uidEnergies.put(APP_UID, 120_000_000); + batteryStats.updateCustomMeasuredEnergyDataLocked(1, 200_000_000, uidEnergies); + + CustomMeasuredPowerCalculator calculator = + new CustomMeasuredPowerCalculator(mStatsRule.getPowerProfile()); + + mStatsRule.apply(calculator); + + UidBatteryConsumer uid = mStatsRule.getUidBatteryConsumer(APP_UID); + assertThat(uid.getConsumedPowerForCustomComponent( + BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID)) + .isWithin(PRECISION).of(2.252252); + assertThat(uid.getConsumedPowerForCustomComponent( + BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 1)) + .isWithin(PRECISION).of(9.009009); + + SystemBatteryConsumer systemConsumer = mStatsRule.getSystemBatteryConsumer( + SystemBatteryConsumer.DRAIN_TYPE_CUSTOM); + assertThat(systemConsumer.getConsumedPowerForCustomComponent( + BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID)) + .isWithin(PRECISION).of(7.5075075); + assertThat(systemConsumer.getConsumedPowerForCustomComponent( + BatteryConsumer.FIRST_CUSTOM_POWER_COMPONENT_ID + 1)) + .isWithin(PRECISION).of(15.015015); + } +} diff --git a/core/tests/coretests/src/com/android/internal/os/DischargedPowerCalculatorTest.java b/core/tests/coretests/src/com/android/internal/os/DischargedPowerCalculatorTest.java new file mode 100644 index 000000000000..bec3d1644e81 --- /dev/null +++ b/core/tests/coretests/src/com/android/internal/os/DischargedPowerCalculatorTest.java @@ -0,0 +1,66 @@ +/* + * Copyright (C) 2021 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.internal.os; + + +import static com.google.common.truth.Truth.assertThat; + +import android.os.BatteryManager; +import android.os.BatteryUsageStats; + +import androidx.test.filters.SmallTest; +import androidx.test.runner.AndroidJUnit4; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.runner.RunWith; + +@RunWith(AndroidJUnit4.class) +@SmallTest +public class DischargedPowerCalculatorTest { + private static final double PRECISION = 0.00001; + + @Rule + public final BatteryUsageStatsRule mStatsRule = new BatteryUsageStatsRule() + .setAveragePower(PowerProfile.POWER_BATTERY_CAPACITY, 4000.0); + + @Test + public void testDischargeTotals() { + final BatteryStatsImpl batteryStats = mStatsRule.getBatteryStats(); + + mStatsRule.setTime(1000, 1000); + batteryStats.resetAllStatsCmdLocked(); + batteryStats.setNoAutoReset(true); + batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100, + /* plugType */ 0, 90, 72, 3700, 3_600_000, 4_000_000, 0, 1_000_000, + 1_000_000, 1_000_000); + batteryStats.setBatteryStateLocked(BatteryManager.BATTERY_STATUS_DISCHARGING, 100, + /* plugType */ 0, 80, 72, 3700, 2_400_000, 4_000_000, 0, 2_000_000, + 2_000_000, 2_000_000); + + DischargedPowerCalculator calculator = + new DischargedPowerCalculator(mStatsRule.getPowerProfile()); + + final BatteryUsageStats batteryUsageStats = mStatsRule.apply(calculator); + + assertThat(batteryUsageStats.getDischargePercentage()).isEqualTo(10); + assertThat(batteryUsageStats.getDischargedPowerRange().getLower()) + .isWithin(PRECISION).of(360.0); + assertThat(batteryUsageStats.getDischargedPowerRange().getUpper()) + .isWithin(PRECISION).of(400.0); + } +} diff --git a/keystore/java/android/security/Authorization.java b/keystore/java/android/security/Authorization.java index 21d23b1b2575..50a90820117d 100644 --- a/keystore/java/android/security/Authorization.java +++ b/keystore/java/android/security/Authorization.java @@ -33,20 +33,12 @@ import android.util.Log; */ public class Authorization { private static final String TAG = "KeystoreAuthorization"; - private static IKeystoreAuthorization sIKeystoreAuthorization; public static final int SYSTEM_ERROR = ResponseCode.SYSTEM_ERROR; - public Authorization() { - sIKeystoreAuthorization = null; - } - - private static synchronized IKeystoreAuthorization getService() { - if (sIKeystoreAuthorization == null) { - sIKeystoreAuthorization = IKeystoreAuthorization.Stub.asInterface( + private static IKeystoreAuthorization getService() { + return IKeystoreAuthorization.Stub.asInterface( ServiceManager.checkService("android.security.authorization")); - } - return sIKeystoreAuthorization; } /** @@ -55,12 +47,12 @@ public class Authorization { * @param authToken created by Android authenticators. * @return 0 if successful or {@code ResponseCode.SYSTEM_ERROR}. */ - public int addAuthToken(@NonNull HardwareAuthToken authToken) { + public static int addAuthToken(@NonNull HardwareAuthToken authToken) { if (!android.security.keystore2.AndroidKeyStoreProvider.isInstalled()) return 0; try { getService().addAuthToken(authToken); return 0; - } catch (RemoteException e) { + } catch (RemoteException | NullPointerException e) { Log.w(TAG, "Can not connect to keystore", e); return SYSTEM_ERROR; } catch (ServiceSpecificException e) { @@ -73,7 +65,7 @@ public class Authorization { * @param authToken * @return 0 if successful or a {@code ResponseCode}. */ - public int addAuthToken(@NonNull byte[] authToken) { + public static int addAuthToken(@NonNull byte[] authToken) { return addAuthToken(AuthTokenUtils.toHardwareAuthToken(authToken)); } @@ -86,7 +78,7 @@ public class Authorization { * * @return 0 if successful or a {@code ResponseCode}. */ - public int onLockScreenEvent(@NonNull boolean locked, @NonNull int userId, + public static int onLockScreenEvent(@NonNull boolean locked, @NonNull int userId, @Nullable byte[] syntheticPassword) { if (!android.security.keystore2.AndroidKeyStoreProvider.isInstalled()) return 0; try { @@ -96,7 +88,7 @@ public class Authorization { getService().onLockScreenEvent(LockScreenEvent.UNLOCK, userId, syntheticPassword); } return 0; - } catch (RemoteException e) { + } catch (RemoteException | NullPointerException e) { Log.w(TAG, "Can not connect to keystore", e); return SYSTEM_ERROR; } catch (ServiceSpecificException e) { diff --git a/keystore/java/android/security/KeyStore.java b/keystore/java/android/security/KeyStore.java index e19d88c182ff..198df40c7d7b 100644 --- a/keystore/java/android/security/KeyStore.java +++ b/keystore/java/android/security/KeyStore.java @@ -996,7 +996,7 @@ public class KeyStore { */ public int addAuthToken(byte[] authToken) { try { - new Authorization().addAuthToken(authToken); + Authorization.addAuthToken(authToken); return mBinder.addAuthToken(authToken); } catch (RemoteException e) { Log.w(TAG, "Cannot connect to keystore", e); diff --git a/keystore/java/android/security/KeyStore2.java b/keystore/java/android/security/KeyStore2.java index f7477bf92c81..476e4d7b7b18 100644 --- a/keystore/java/android/security/KeyStore2.java +++ b/keystore/java/android/security/KeyStore2.java @@ -107,7 +107,6 @@ public class KeyStore2 { try { return request.execute(service); } catch (ServiceSpecificException e) { - Log.e(TAG, "KeyStore exception", e); throw getKeyStoreException(e.errorCode); } catch (RemoteException e) { if (firstTry) { diff --git a/media/java/android/media/session/ISessionManager.aidl b/media/java/android/media/session/ISessionManager.aidl index 66d579408db0..dc476b873786 100644 --- a/media/java/android/media/session/ISessionManager.aidl +++ b/media/java/android/media/session/ISessionManager.aidl @@ -73,8 +73,10 @@ interface ISessionManager { void setOnMediaKeyListener(in IOnMediaKeyListener listener); boolean isTrusted(String controllerPackageName, int controllerPid, int controllerUid); - void setCustomMediaKeyDispatcherForTesting(String name); - void setCustomSessionPolicyProviderForTesting(String name); + void setCustomMediaKeyDispatcher(String name); + void setCustomMediaSessionPolicyProvider(String name); + boolean hasCustomMediaKeyDispatcher(String componentName); + boolean hasCustomMediaSessionPolicyProvider(String componentName); int getSessionPolicies(in MediaSession.Token token); void setSessionPolicies(in MediaSession.Token token, int policies); } diff --git a/media/java/android/media/session/MediaSessionManager.java b/media/java/android/media/session/MediaSessionManager.java index 13a3436569aa..8de5e42e93b2 100644 --- a/media/java/android/media/session/MediaSessionManager.java +++ b/media/java/android/media/session/MediaSessionManager.java @@ -958,9 +958,9 @@ public final class MediaSessionManager { * @hide */ @VisibleForTesting - public void setCustomMediaKeyDispatcherForTesting(@Nullable String name) { + public void setCustomMediaKeyDispatcher(@Nullable String name) { try { - mService.setCustomMediaKeyDispatcherForTesting(name); + mService.setCustomMediaKeyDispatcher(name); } catch (RemoteException e) { Log.e(TAG, "Failed to set custom media key dispatcher name", e); } @@ -968,22 +968,58 @@ public final class MediaSessionManager { /** * Set the component name for the custom - * {@link com.android.server.media.SessionPolicyProvider} class. Set to null to restore to the - * custom {@link com.android.server.media.SessionPolicyProvider} class name retrieved from the - * config value. + * {@link com.android.server.media.MediaSessionPolicyProvider} class. Set to null to restore to + * the custom {@link com.android.server.media.MediaSessionPolicyProvider} class name retrieved + * from the config value. * * @hide */ @VisibleForTesting - public void setCustomSessionPolicyProviderForTesting(@Nullable String name) { + public void setCustomMediaSessionPolicyProvider(@Nullable String name) { try { - mService.setCustomSessionPolicyProviderForTesting(name); + mService.setCustomMediaSessionPolicyProvider(name); } catch (RemoteException e) { Log.e(TAG, "Failed to set custom session policy provider name", e); } } /** + * Get the component name for the custom {@link com.android.server.media.MediaKeyDispatcher} + * class. + * + * @hide + */ + @VisibleForTesting + public boolean hasCustomMediaKeyDispatcher(@NonNull String componentName) { + Objects.requireNonNull(componentName, "componentName shouldn't be null"); + try { + return mService.hasCustomMediaKeyDispatcher(componentName); + } catch (RemoteException e) { + Log.e(TAG, "Failed to check if custom media key dispatcher with given component" + + " name exists", e); + } + return false; + } + + /** + * Get the component name for the custom + * {@link com.android.server.media.MediaSessionPolicyProvider} class. + * + * @hide + */ + @VisibleForTesting + public boolean hasCustomMediaSessionPolicyProvider(@NonNull String componentName) { + Objects.requireNonNull(componentName, "componentName shouldn't be null"); + try { + return mService.hasCustomMediaSessionPolicyProvider(componentName); + } catch (RemoteException e) { + Log.e(TAG, "Failed to check if custom media session policy provider with given" + + " component name exists", e); + } + return false; + } + + /** * Get session policies of the specified {@link MediaSession.Token}. * * @hide diff --git a/packages/SettingsLib/res/values-af/strings.xml b/packages/SettingsLib/res/values-af/strings.xml index 577fb6611448..4b253c459b83 100644 --- a/packages/SettingsLib/res/values-af/strings.xml +++ b/packages/SettingsLib/res/values-af/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Datasein vol."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet is ontkoppel."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Geen oproepe nie."</string> </resources> diff --git a/packages/SettingsLib/res/values-am/strings.xml b/packages/SettingsLib/res/values-am/strings.xml index c554e2ed8a8e..4982f820ff37 100644 --- a/packages/SettingsLib/res/values-am/strings.xml +++ b/packages/SettingsLib/res/values-am/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"የውሂብ አመልካች ሙሉ ነው።"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ኤተርኔት ተነቅሏል።"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ኢተርኔት።"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"መደወል የለም።"</string> </resources> diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index b23cebd19e7a..5eaefd02483b 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -596,6 +596,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"إشارة البيانات كاملة."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"تم قطع اتصال Ethernet."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"إيثرنت"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"لا يتم الاتصال."</string> </resources> diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml index 2380b2fa21ac..571f7d00ef89 100644 --- a/packages/SettingsLib/res/values-as/strings.xml +++ b/packages/SettingsLib/res/values-as/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"ডেটা ছিগনেল পূৰা আছে।"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ইথাৰনেট সংযোগ বিচ্ছিন্ন হৈছে।"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ইথাৰনেট।"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"কল কৰা নহয়"</string> </resources> diff --git a/packages/SettingsLib/res/values-az/strings.xml b/packages/SettingsLib/res/values-az/strings.xml index f70bb84c55a4..36a13f50fe11 100644 --- a/packages/SettingsLib/res/values-az/strings.xml +++ b/packages/SettingsLib/res/values-az/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Data siqnalı tamdır."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet bağlantısı kəsilib."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Zəng yoxdur."</string> </resources> diff --git a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml index 749f864f8aef..d7cc909fe15f 100644 --- a/packages/SettingsLib/res/values-b+sr+Latn/strings.xml +++ b/packages/SettingsLib/res/values-b+sr+Latn/strings.xml @@ -593,6 +593,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Signal za podatke je najjači."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Veza sa eternetom je prekinuta."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Eternet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Bez pozivanja."</string> </resources> diff --git a/packages/SettingsLib/res/values-be/strings.xml b/packages/SettingsLib/res/values-be/strings.xml index 6b2740d7d7d7..01201b34f6a8 100644 --- a/packages/SettingsLib/res/values-be/strings.xml +++ b/packages/SettingsLib/res/values-be/strings.xml @@ -594,6 +594,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Поўны сігнал перадачы дадзеных."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet адлучаны."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Ніякіх выклікаў."</string> </resources> diff --git a/packages/SettingsLib/res/values-bg/strings.xml b/packages/SettingsLib/res/values-bg/strings.xml index 1a24b9e52b36..00f5e710b727 100644 --- a/packages/SettingsLib/res/values-bg/strings.xml +++ b/packages/SettingsLib/res/values-bg/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Сигналът за данни е пълен."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Връзката с Ethernet е прекратена."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Без обаждания."</string> </resources> diff --git a/packages/SettingsLib/res/values-bn/strings.xml b/packages/SettingsLib/res/values-bn/strings.xml index 1c9f84f68962..43bb7581026c 100644 --- a/packages/SettingsLib/res/values-bn/strings.xml +++ b/packages/SettingsLib/res/values-bn/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"পূর্ণ ডেটার সংকেত রয়েছে৷"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ইথারনেটের সংযোগ বিচ্ছিন্ন হয়েছে৷"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ইথারনেট।"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"কল করবেন না।"</string> </resources> diff --git a/packages/SettingsLib/res/values-bs/strings.xml b/packages/SettingsLib/res/values-bs/strings.xml index f70142187a36..dacacfbb142d 100644 --- a/packages/SettingsLib/res/values-bs/strings.xml +++ b/packages/SettingsLib/res/values-bs/strings.xml @@ -593,6 +593,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Signal za prijenos podataka pun."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Veza sa Ethernetom je prekinuta."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Nema pozivanja."</string> </resources> diff --git a/packages/SettingsLib/res/values-ca/strings.xml b/packages/SettingsLib/res/values-ca/strings.xml index 78ef10969b72..17482ed18963 100644 --- a/packages/SettingsLib/res/values-ca/strings.xml +++ b/packages/SettingsLib/res/values-ca/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Senyal de dades: complet."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"S\'ha desconnectat l\'Ethernet."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Sense trucades."</string> </resources> diff --git a/packages/SettingsLib/res/values-cs/strings.xml b/packages/SettingsLib/res/values-cs/strings.xml index 8ca9800562a0..ddd5c523c8f9 100644 --- a/packages/SettingsLib/res/values-cs/strings.xml +++ b/packages/SettingsLib/res/values-cs/strings.xml @@ -594,6 +594,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Plný signál datové sítě."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Síť ethernet je odpojena."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Bez volání."</string> </resources> diff --git a/packages/SettingsLib/res/values-da/strings.xml b/packages/SettingsLib/res/values-da/strings.xml index 5d55a12b4d6c..421ed742bd23 100644 --- a/packages/SettingsLib/res/values-da/strings.xml +++ b/packages/SettingsLib/res/values-da/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Datasignal fuldt."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet er ikke tilsluttet."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Opkald er deaktiveret."</string> </resources> diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml index 1fbb391741b5..7cb994cb06de 100644 --- a/packages/SettingsLib/res/values-de/strings.xml +++ b/packages/SettingsLib/res/values-de/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Volle Datensignalstärke"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet nicht verbunden"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Keine Anrufe."</string> </resources> diff --git a/packages/SettingsLib/res/values-el/strings.xml b/packages/SettingsLib/res/values-el/strings.xml index 32bcf8792067..7a73ccdf2c63 100644 --- a/packages/SettingsLib/res/values-el/strings.xml +++ b/packages/SettingsLib/res/values-el/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Πλήρες σήμα δεδομένων."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Το Ethernet αποσυνδέθηκε."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Χωρίς κλήσεις."</string> </resources> diff --git a/packages/SettingsLib/res/values-es-rUS/strings.xml b/packages/SettingsLib/res/values-es-rUS/strings.xml index 0f765764dbfd..5e5b39a1bd0a 100644 --- a/packages/SettingsLib/res/values-es-rUS/strings.xml +++ b/packages/SettingsLib/res/values-es-rUS/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Señal de datos completa"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet desconectada"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Sin llamadas."</string> </resources> diff --git a/packages/SettingsLib/res/values-es/strings.xml b/packages/SettingsLib/res/values-es/strings.xml index abd209ccc717..8d791771bf05 100644 --- a/packages/SettingsLib/res/values-es/strings.xml +++ b/packages/SettingsLib/res/values-es/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Señal de datos al máximo"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Conexión Ethernet desconectada."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Sin llamadas."</string> </resources> diff --git a/packages/SettingsLib/res/values-et/strings.xml b/packages/SettingsLib/res/values-et/strings.xml index 2e9f3b8948a2..18ee62371ef6 100644 --- a/packages/SettingsLib/res/values-et/strings.xml +++ b/packages/SettingsLib/res/values-et/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Andmesignaal on tugev."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Etherneti-ühendus on katkestatud."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Helistamine pole võimalik."</string> </resources> diff --git a/packages/SettingsLib/res/values-eu/strings.xml b/packages/SettingsLib/res/values-eu/strings.xml index ecb4f7573b66..71be593a055b 100644 --- a/packages/SettingsLib/res/values-eu/strings.xml +++ b/packages/SettingsLib/res/values-eu/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Datu-seinale osoa."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet bidezko konexioa eten da."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Deirik ez."</string> </resources> diff --git a/packages/SettingsLib/res/values-fa/strings.xml b/packages/SettingsLib/res/values-fa/strings.xml index 56ade54d9212..81a2cf888d1f 100644 --- a/packages/SettingsLib/res/values-fa/strings.xml +++ b/packages/SettingsLib/res/values-fa/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"قدرت سیگنال داده کامل است."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"اترنت قطع شد."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"اترنت."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"تماس گرفته نشود."</string> </resources> diff --git a/packages/SettingsLib/res/values-fi/strings.xml b/packages/SettingsLib/res/values-fi/strings.xml index e26ecb705c9f..0703c450a2ed 100644 --- a/packages/SettingsLib/res/values-fi/strings.xml +++ b/packages/SettingsLib/res/values-fi/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Vahva kuuluvuus."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet on irrotettu."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Ei puheluita."</string> </resources> diff --git a/packages/SettingsLib/res/values-fr-rCA/strings.xml b/packages/SettingsLib/res/values-fr-rCA/strings.xml index d61ebc099934..5b8c93880446 100644 --- a/packages/SettingsLib/res/values-fr-rCA/strings.xml +++ b/packages/SettingsLib/res/values-fr-rCA/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Signal excellent"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet déconnecté."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Aucun appel."</string> </resources> diff --git a/packages/SettingsLib/res/values-fr/strings.xml b/packages/SettingsLib/res/values-fr/strings.xml index 64c06fae175d..b025357a4642 100644 --- a/packages/SettingsLib/res/values-fr/strings.xml +++ b/packages/SettingsLib/res/values-fr/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Signal excellent"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet déconnecté"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Pas d\'appels."</string> </resources> diff --git a/packages/SettingsLib/res/values-gl/strings.xml b/packages/SettingsLib/res/values-gl/strings.xml index cf63dd7176b2..d68595e98e04 100644 --- a/packages/SettingsLib/res/values-gl/strings.xml +++ b/packages/SettingsLib/res/values-gl/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Sinal de datos: completo"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Desconectouse a Ethernet."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Sen chamadas."</string> </resources> diff --git a/packages/SettingsLib/res/values-gu/strings.xml b/packages/SettingsLib/res/values-gu/strings.xml index 427ce56296fe..e151ddb428d8 100644 --- a/packages/SettingsLib/res/values-gu/strings.xml +++ b/packages/SettingsLib/res/values-gu/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"ડેટા સિગ્નલ પૂર્ણ."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ઇથરનેટ ડિસ્કનેક્ટ થયું."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ઇથરનેટ."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"કોઈ કૉલિંગ નહીં."</string> </resources> diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml index 159d2dbe7439..beab7bdcc08e 100644 --- a/packages/SettingsLib/res/values-hi/strings.xml +++ b/packages/SettingsLib/res/values-hi/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"डेटा सिग्नल पूरा."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ईथरनेट डिस्कनेक्ट किया गया."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ईथरनेट."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"वॉइस कॉल की सुविधा उपलब्ध नहीं है."</string> </resources> diff --git a/packages/SettingsLib/res/values-hr/strings.xml b/packages/SettingsLib/res/values-hr/strings.xml index 5e33ef3d0689..8989cc9c69db 100644 --- a/packages/SettingsLib/res/values-hr/strings.xml +++ b/packages/SettingsLib/res/values-hr/strings.xml @@ -593,6 +593,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Podatkovni signal pun."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Prekinuta je veza s ethernetom."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Bez poziva."</string> </resources> diff --git a/packages/SettingsLib/res/values-hu/strings.xml b/packages/SettingsLib/res/values-hu/strings.xml index 28975be7b6fb..7c5a1a004568 100644 --- a/packages/SettingsLib/res/values-hu/strings.xml +++ b/packages/SettingsLib/res/values-hu/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Adatjel teljes."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet leválasztva."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Nem kezdeményezhet hanghívást."</string> </resources> diff --git a/packages/SettingsLib/res/values-hy/strings.xml b/packages/SettingsLib/res/values-hy/strings.xml index a2075265b58c..6684d3507c77 100644 --- a/packages/SettingsLib/res/values-hy/strings.xml +++ b/packages/SettingsLib/res/values-hy/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Տվյալների ազդանշանը լրիվ է:"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet-ը անջատված է:"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet։"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Զանգել հնարավոր չէ։"</string> </resources> diff --git a/packages/SettingsLib/res/values-in/strings.xml b/packages/SettingsLib/res/values-in/strings.xml index c4d752d25cf3..075444cd04f8 100644 --- a/packages/SettingsLib/res/values-in/strings.xml +++ b/packages/SettingsLib/res/values-in/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Sinyal data penuh."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet terputus."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Tidak ada panggilan."</string> </resources> diff --git a/packages/SettingsLib/res/values-is/strings.xml b/packages/SettingsLib/res/values-is/strings.xml index 56b0a81b7c81..b079f4d9b75e 100644 --- a/packages/SettingsLib/res/values-is/strings.xml +++ b/packages/SettingsLib/res/values-is/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Fullur sendistyrkur gagnatengingar."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet aftengt."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Engin símtöl."</string> </resources> diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index f045d273ce0d..bf525c535583 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Massimo segnale dati."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Connessione Ethernet annullata."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Chiamate non disponibili."</string> </resources> diff --git a/packages/SettingsLib/res/values-iw/strings.xml b/packages/SettingsLib/res/values-iw/strings.xml index ba3a46786663..9055e77b08dd 100644 --- a/packages/SettingsLib/res/values-iw/strings.xml +++ b/packages/SettingsLib/res/values-iw/strings.xml @@ -594,6 +594,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"אות הנתונים מלא."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"אתרנט מנותק."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"אתרנט."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"אין שיחות."</string> </resources> diff --git a/packages/SettingsLib/res/values-ja/strings.xml b/packages/SettingsLib/res/values-ja/strings.xml index 6f398b6840b0..7fa0df93e2ce 100644 --- a/packages/SettingsLib/res/values-ja/strings.xml +++ b/packages/SettingsLib/res/values-ja/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"データ信号:フル"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"イーサネット接続を解除しました。"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"イーサネット。"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"通話なし。"</string> </resources> diff --git a/packages/SettingsLib/res/values-ka/strings.xml b/packages/SettingsLib/res/values-ka/strings.xml index 5bf1dd03f558..7dd1eee09f83 100644 --- a/packages/SettingsLib/res/values-ka/strings.xml +++ b/packages/SettingsLib/res/values-ka/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"მონაცემთა გადაცემის საიმედო სიგნალი."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet კავშირი შეწყვეტილია."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"ზარების გარეშე."</string> </resources> diff --git a/packages/SettingsLib/res/values-kk/strings.xml b/packages/SettingsLib/res/values-kk/strings.xml index c7c38378db6e..59b1d63af04f 100644 --- a/packages/SettingsLib/res/values-kk/strings.xml +++ b/packages/SettingsLib/res/values-kk/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Дерекқор сигналы толы."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet ажыратылған."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Қоңырау шалу мүмкін емес."</string> </resources> diff --git a/packages/SettingsLib/res/values-km/strings.xml b/packages/SettingsLib/res/values-km/strings.xml index 99a73e14daee..b01839d2280f 100644 --- a/packages/SettingsLib/res/values-km/strings.xml +++ b/packages/SettingsLib/res/values-km/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"សញ្ញាទិន្នន័យពេញ។"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"បានផ្តាច់អ៊ីសឺរណិត។"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"អ៊ីសឺរណិត។"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"គ្មានការហៅទូរសព្ទទេ។"</string> </resources> diff --git a/packages/SettingsLib/res/values-kn/strings.xml b/packages/SettingsLib/res/values-kn/strings.xml index 54a42a8b0090..217c917f1d2b 100644 --- a/packages/SettingsLib/res/values-kn/strings.xml +++ b/packages/SettingsLib/res/values-kn/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"ಡೇಟಾ ಸಂಕೇತ ತುಂಬಿದೆ."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ಇಥರ್ನೆಟ್ ಸಂಪರ್ಕ ಕಡಿತಗೊಳಿಸಲಾಗಿದೆ."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ಇಥರ್ನೆಟ್."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"ಕರೆ ಮಾಡಲಾಗುವುದಿಲ್ಲ."</string> </resources> diff --git a/packages/SettingsLib/res/values-ko/strings.xml b/packages/SettingsLib/res/values-ko/strings.xml index 9e9fea9e57ad..0b8c71d0d9cd 100644 --- a/packages/SettingsLib/res/values-ko/strings.xml +++ b/packages/SettingsLib/res/values-ko/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"데이터 신호가 강합니다."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"이더넷에서 연결 해제되었습니다."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"이더넷에 연결되었습니다."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"통화 모드가 없습니다."</string> </resources> diff --git a/packages/SettingsLib/res/values-ky/strings.xml b/packages/SettingsLib/res/values-ky/strings.xml index 2aec5cb42199..cad00a38e89d 100644 --- a/packages/SettingsLib/res/values-ky/strings.xml +++ b/packages/SettingsLib/res/values-ky/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Мобилдик интернеттин сигналы толук."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet ажырады."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Чалуу жок."</string> </resources> diff --git a/packages/SettingsLib/res/values-lo/strings.xml b/packages/SettingsLib/res/values-lo/strings.xml index e199e1f7db83..5bd297e310f5 100644 --- a/packages/SettingsLib/res/values-lo/strings.xml +++ b/packages/SettingsLib/res/values-lo/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"ສັນຍານຂໍ້ມູນເຕັມ."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ອີເທີເນັດຕັດເຊື່ອມຕໍ່ແລ້ວ."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ອີເທີເນັດ."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"ບໍ່ສາມາດໂທສຽງໄດ້."</string> </resources> diff --git a/packages/SettingsLib/res/values-lt/strings.xml b/packages/SettingsLib/res/values-lt/strings.xml index a25c59f5eb26..8c7485f29af7 100644 --- a/packages/SettingsLib/res/values-lt/strings.xml +++ b/packages/SettingsLib/res/values-lt/strings.xml @@ -594,6 +594,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Stiprus duomenų signalas."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Atsijungta nuo eterneto."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Eternetas."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Nekviečiama."</string> </resources> diff --git a/packages/SettingsLib/res/values-lv/strings.xml b/packages/SettingsLib/res/values-lv/strings.xml index f360c906d95a..d8020c7c1d05 100644 --- a/packages/SettingsLib/res/values-lv/strings.xml +++ b/packages/SettingsLib/res/values-lv/strings.xml @@ -593,6 +593,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Pilna piekļuve datu signālam."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Pārtraukts savienojums ar tīklu Ethernet."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Tīkls Ethernet"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Zvanīšana nav pieejama."</string> </resources> diff --git a/packages/SettingsLib/res/values-mk/strings.xml b/packages/SettingsLib/res/values-mk/strings.xml index a32d00b00928..e4c8425495b7 100644 --- a/packages/SettingsLib/res/values-mk/strings.xml +++ b/packages/SettingsLib/res/values-mk/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Сигналот за податоци е исполнет."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Етернетот е исклучен."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Етернет."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Без повици."</string> </resources> diff --git a/packages/SettingsLib/res/values-ml/strings.xml b/packages/SettingsLib/res/values-ml/strings.xml index 902507df89c8..28422c930683 100644 --- a/packages/SettingsLib/res/values-ml/strings.xml +++ b/packages/SettingsLib/res/values-ml/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"ഡാറ്റ സിഗ്നൽ പൂർണ്ണമാണ്."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ഇതർനെറ്റ് വിച്ഛേദിച്ചു."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ഇതർനെറ്റ്."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"വോയ്സ് കോൾ ലഭ്യമല്ല."</string> </resources> diff --git a/packages/SettingsLib/res/values-mn/strings.xml b/packages/SettingsLib/res/values-mn/strings.xml index 83009b7c03a1..0d78ea9ac2e3 100644 --- a/packages/SettingsLib/res/values-mn/strings.xml +++ b/packages/SettingsLib/res/values-mn/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Дата дохио дүүрэн."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet саллаа."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Этернэт."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Дуудлага байхгүй."</string> </resources> diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml index 359f52565934..d27f7051d1f1 100644 --- a/packages/SettingsLib/res/values-mr/strings.xml +++ b/packages/SettingsLib/res/values-mr/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"डेटा सिग्नल पूर्ण."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"इथरनेट डिस्कनेक्ट केले."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"इथरनेट."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"कॉलिंग उपलब्ध नाही."</string> </resources> diff --git a/packages/SettingsLib/res/values-ms/strings.xml b/packages/SettingsLib/res/values-ms/strings.xml index eba89daf02ed..c5a2c6276318 100644 --- a/packages/SettingsLib/res/values-ms/strings.xml +++ b/packages/SettingsLib/res/values-ms/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Isyarat data penuh."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet diputuskan sambungan."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Tiada panggilan."</string> </resources> diff --git a/packages/SettingsLib/res/values-my/strings.xml b/packages/SettingsLib/res/values-my/strings.xml index e982aa93d28e..ed34f7d3dd9e 100644 --- a/packages/SettingsLib/res/values-my/strings.xml +++ b/packages/SettingsLib/res/values-my/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"ဒေတာထုတ်လွှင့်မှုအပြည့်ဖမ်းမိခြင်း"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet နှင့်ချိတ်ဆက်မှုပြတ်တောက်"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"အီသာနက်။"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"ခေါ်ဆိုမှု မရှိပါ။"</string> </resources> diff --git a/packages/SettingsLib/res/values-nb/strings.xml b/packages/SettingsLib/res/values-nb/strings.xml index abbb5e7c64ee..5366e7e13843 100644 --- a/packages/SettingsLib/res/values-nb/strings.xml +++ b/packages/SettingsLib/res/values-nb/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Datasignal er fullt."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet er frakoblet."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Ingen ringing."</string> </resources> diff --git a/packages/SettingsLib/res/values-ne/strings.xml b/packages/SettingsLib/res/values-ne/strings.xml index d7a32bf3a038..cde7b8033509 100644 --- a/packages/SettingsLib/res/values-ne/strings.xml +++ b/packages/SettingsLib/res/values-ne/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"डेटा संकेत पूर्ण।"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"इथरनेट विच्छेद भयो।"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"इथरनेट।"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"कल गर्ने सुविधा उपलब्ध छैन।"</string> </resources> diff --git a/packages/SettingsLib/res/values-nl/strings.xml b/packages/SettingsLib/res/values-nl/strings.xml index 7e739bca9b94..bb1402a93227 100644 --- a/packages/SettingsLib/res/values-nl/strings.xml +++ b/packages/SettingsLib/res/values-nl/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Gegevenssignaal is op volle sterkte."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernetverbinding verbroken."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Geen gesprekken."</string> </resources> diff --git a/packages/SettingsLib/res/values-or/strings.xml b/packages/SettingsLib/res/values-or/strings.xml index 1e842b7f7ce0..90fc8bce9339 100644 --- a/packages/SettingsLib/res/values-or/strings.xml +++ b/packages/SettingsLib/res/values-or/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"ଡାଟା ସିଗ୍ନାଲ୍ ପୂର୍ଣ୍ଣ ଅଛି।"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ଇଥରନେଟ୍ ବିଚ୍ଛିନ୍ନ ହୋଇଛି।"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ଇଥରନେଟ୍।"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"କୌଣସି କଲିଂ ନାହିଁ।"</string> </resources> diff --git a/packages/SettingsLib/res/values-pa/strings.xml b/packages/SettingsLib/res/values-pa/strings.xml index d035fc0b5c9c..4c20e196b1bb 100644 --- a/packages/SettingsLib/res/values-pa/strings.xml +++ b/packages/SettingsLib/res/values-pa/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">" ਡਾਟਾ ਸਿਗਨਲ ਪੂਰਾ।"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ਈਥਰਨੈੱਟ ਡਿਸਕਨੈਕਟ ਹੋ ਗਿਆ।"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ਈਥਰਨੈੱਟ।"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"ਕਾਲਿੰਗ ਸੇਵਾ ਉਪਲਬਧ ਨਹੀਂ ਹੈ।"</string> </resources> diff --git a/packages/SettingsLib/res/values-pl/strings.xml b/packages/SettingsLib/res/values-pl/strings.xml index 8a732cb7710b..6d037d8e0aaf 100644 --- a/packages/SettingsLib/res/values-pl/strings.xml +++ b/packages/SettingsLib/res/values-pl/strings.xml @@ -594,6 +594,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Dane: pełna moc sygnału."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Rozłączono z siecią Ethernet."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Brak połączenia."</string> </resources> diff --git a/packages/SettingsLib/res/values-pt-rBR/strings.xml b/packages/SettingsLib/res/values-pt-rBR/strings.xml index a63b9b5660da..3feed99762ef 100644 --- a/packages/SettingsLib/res/values-pt-rBR/strings.xml +++ b/packages/SettingsLib/res/values-pt-rBR/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Sinal de dados cheio."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet desconectada."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Sem chamadas."</string> </resources> diff --git a/packages/SettingsLib/res/values-pt-rPT/strings.xml b/packages/SettingsLib/res/values-pt-rPT/strings.xml index ab23059e013c..a886aa9d4cb4 100644 --- a/packages/SettingsLib/res/values-pt-rPT/strings.xml +++ b/packages/SettingsLib/res/values-pt-rPT/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Sinal de dados completo."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet desligada."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Sem chamadas."</string> </resources> diff --git a/packages/SettingsLib/res/values-pt/strings.xml b/packages/SettingsLib/res/values-pt/strings.xml index a63b9b5660da..3feed99762ef 100644 --- a/packages/SettingsLib/res/values-pt/strings.xml +++ b/packages/SettingsLib/res/values-pt/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Sinal de dados cheio."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet desconectada."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Sem chamadas."</string> </resources> diff --git a/packages/SettingsLib/res/values-ro/strings.xml b/packages/SettingsLib/res/values-ro/strings.xml index 98edb32e2865..7fbe6225bc9c 100644 --- a/packages/SettingsLib/res/values-ro/strings.xml +++ b/packages/SettingsLib/res/values-ro/strings.xml @@ -593,6 +593,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Semnal pentru date: complet."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet deconectat."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Apelarea nu este disponibilă."</string> </resources> diff --git a/packages/SettingsLib/res/values-ru/strings.xml b/packages/SettingsLib/res/values-ru/strings.xml index 972dc205fea5..1669df6136f0 100644 --- a/packages/SettingsLib/res/values-ru/strings.xml +++ b/packages/SettingsLib/res/values-ru/strings.xml @@ -594,6 +594,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Надежный сигнал передачи данных."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Устройство отключено от Ethernet."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Совершение вызовов невозможно."</string> </resources> diff --git a/packages/SettingsLib/res/values-si/strings.xml b/packages/SettingsLib/res/values-si/strings.xml index 0dee8e1c8af9..1fdd968c9b7e 100644 --- a/packages/SettingsLib/res/values-si/strings.xml +++ b/packages/SettingsLib/res/values-si/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"දත්ත සංඥාව පිරී ඇත."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ඊතර්නෙට් විසන්ධි කරන ලදී."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ඊතර්නෙට්."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"ඇමතුම් නැත."</string> </resources> diff --git a/packages/SettingsLib/res/values-sk/strings.xml b/packages/SettingsLib/res/values-sk/strings.xml index 7d49ca3b91cd..03b454ea6a14 100644 --- a/packages/SettingsLib/res/values-sk/strings.xml +++ b/packages/SettingsLib/res/values-sk/strings.xml @@ -594,6 +594,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Plný signál dátovej siete."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Sieť ethernet je odpojená"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Žiadne volanie."</string> </resources> diff --git a/packages/SettingsLib/res/values-sl/strings.xml b/packages/SettingsLib/res/values-sl/strings.xml index 48e5dcc2284b..73b48187747c 100644 --- a/packages/SettingsLib/res/values-sl/strings.xml +++ b/packages/SettingsLib/res/values-sl/strings.xml @@ -594,6 +594,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Podatkovni signal poln."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernetna povezava je prekinjena."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Klicanje ni mogoče."</string> </resources> diff --git a/packages/SettingsLib/res/values-sq/strings.xml b/packages/SettingsLib/res/values-sq/strings.xml index 0bc905e688a1..a07bb2bc1cfd 100644 --- a/packages/SettingsLib/res/values-sq/strings.xml +++ b/packages/SettingsLib/res/values-sq/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Sinjali i të dhënave është i plotë."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Lidhja e eternetit u shkëput."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Eternet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Telefonatat nuk ofrohen"</string> </resources> diff --git a/packages/SettingsLib/res/values-sr/strings.xml b/packages/SettingsLib/res/values-sr/strings.xml index 6d19af89f47b..0faaf83e65c9 100644 --- a/packages/SettingsLib/res/values-sr/strings.xml +++ b/packages/SettingsLib/res/values-sr/strings.xml @@ -593,6 +593,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Сигнал за податке је најјачи."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Веза са етернетом је прекинута."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Етернет."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Без позивања."</string> </resources> diff --git a/packages/SettingsLib/res/values-sv/strings.xml b/packages/SettingsLib/res/values-sv/strings.xml index 944c423b35ac..87606d0f7ed5 100644 --- a/packages/SettingsLib/res/values-sv/strings.xml +++ b/packages/SettingsLib/res/values-sv/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Datasignalen är full."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet har kopplats från."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Inga anrop."</string> </resources> diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml index 442f54be37bb..d479b0b174b8 100644 --- a/packages/SettingsLib/res/values-sw/strings.xml +++ b/packages/SettingsLib/res/values-sw/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Ishara ya data imejaa."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethaneti imeondolewa."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethaneti."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Huwezi kupiga wala kupokea simu."</string> </resources> diff --git a/packages/SettingsLib/res/values-ta/strings.xml b/packages/SettingsLib/res/values-ta/strings.xml index 561a122430e7..247889bb4e83 100644 --- a/packages/SettingsLib/res/values-ta/strings.xml +++ b/packages/SettingsLib/res/values-ta/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"தரவு சிக்னல் முழுமையாக உள்ளது."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ஈத்தர்நெட் துண்டிக்கப்பட்டது."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ஈதர்நெட்."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"அழைப்பை மேற்கொள்ள முடியவில்லை."</string> </resources> diff --git a/packages/SettingsLib/res/values-te/strings.xml b/packages/SettingsLib/res/values-te/strings.xml index 18d7f281db62..b5d584f23d7e 100644 --- a/packages/SettingsLib/res/values-te/strings.xml +++ b/packages/SettingsLib/res/values-te/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"డేటా సిగ్నల్ సంపూర్ణంగా ఉంది."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ఈథర్నెట్ డిస్కనెక్ట్ చేయబడింది."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ఈథర్నెట్."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"కాలింగ్ మోడ్ ఆఫ్లో ఉంది."</string> </resources> diff --git a/packages/SettingsLib/res/values-th/strings.xml b/packages/SettingsLib/res/values-th/strings.xml index ceab26cabd9a..dc1514f2777b 100644 --- a/packages/SettingsLib/res/values-th/strings.xml +++ b/packages/SettingsLib/res/values-th/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"สัญญาณข้อมูลเต็ม"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ยกเลิกการเชื่อมต่ออีเทอร์เน็ตแล้ว"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"อีเทอร์เน็ต"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"ไม่มีการโทร"</string> </resources> diff --git a/packages/SettingsLib/res/values-tl/strings.xml b/packages/SettingsLib/res/values-tl/strings.xml index 671fa149219f..7c4ceec08dd1 100644 --- a/packages/SettingsLib/res/values-tl/strings.xml +++ b/packages/SettingsLib/res/values-tl/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Puno ang signal ng data."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Nadiskonekta ang Ethernet."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Hindi makakatawag."</string> </resources> diff --git a/packages/SettingsLib/res/values-tr/strings.xml b/packages/SettingsLib/res/values-tr/strings.xml index 98d89f3e43d5..2b5dff15d101 100644 --- a/packages/SettingsLib/res/values-tr/strings.xml +++ b/packages/SettingsLib/res/values-tr/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Veri sinyali tam."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet bağlantısı kesildi."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Çağrı yok."</string> </resources> diff --git a/packages/SettingsLib/res/values-uk/strings.xml b/packages/SettingsLib/res/values-uk/strings.xml index 4e739acb53a7..6fff40dab7f2 100644 --- a/packages/SettingsLib/res/values-uk/strings.xml +++ b/packages/SettingsLib/res/values-uk/strings.xml @@ -594,6 +594,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Максимальний сигнал даних."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Ethernet відключено."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Виклики недоступні."</string> </resources> diff --git a/packages/SettingsLib/res/values-ur/strings.xml b/packages/SettingsLib/res/values-ur/strings.xml index c7dee9513759..055d9b86e3e0 100644 --- a/packages/SettingsLib/res/values-ur/strings.xml +++ b/packages/SettingsLib/res/values-ur/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"ڈیٹا سگنل بھرا ہوا ہے۔"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"ایتھرنیٹ منقطع ہے۔"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"ایتھرنیٹ۔"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"کوئی کالنگ نہیں ہے۔"</string> </resources> diff --git a/packages/SettingsLib/res/values-uz/strings.xml b/packages/SettingsLib/res/values-uz/strings.xml index 433096b64f08..d897ba697580 100644 --- a/packages/SettingsLib/res/values-uz/strings.xml +++ b/packages/SettingsLib/res/values-uz/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Internet signali butun."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Qurilma Ethernet tarmog‘idan uzildi."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Chaqiruv imkonsiz."</string> </resources> diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml index a14462bf7efe..c6b7915b927d 100644 --- a/packages/SettingsLib/res/values-vi/strings.xml +++ b/packages/SettingsLib/res/values-vi/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Tín hiệu dữ liệu đầy đủ."</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"Đã ngắt kết nối Ethernet."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Không thể gọi điện."</string> </resources> diff --git a/packages/SettingsLib/res/values-zh-rCN/strings.xml b/packages/SettingsLib/res/values-zh-rCN/strings.xml index f6bea916c3fa..05b27d14c4f9 100644 --- a/packages/SettingsLib/res/values-zh-rCN/strings.xml +++ b/packages/SettingsLib/res/values-zh-rCN/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"数据信号满格。"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"以太网已断开连接。"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"以太网。"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"不启用通话。"</string> </resources> diff --git a/packages/SettingsLib/res/values-zh-rHK/strings.xml b/packages/SettingsLib/res/values-zh-rHK/strings.xml index 3cf15a9f3995..13398d74588c 100644 --- a/packages/SettingsLib/res/values-zh-rHK/strings.xml +++ b/packages/SettingsLib/res/values-zh-rHK/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"數據網絡訊號滿格。"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"以太網連接中斷。"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"以太網絡。"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"不啟用通話。"</string> </resources> diff --git a/packages/SettingsLib/res/values-zh-rTW/strings.xml b/packages/SettingsLib/res/values-zh-rTW/strings.xml index 7cf02978efd8..fead5e50f7e4 100644 --- a/packages/SettingsLib/res/values-zh-rTW/strings.xml +++ b/packages/SettingsLib/res/values-zh-rTW/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"數據網路訊號滿格。"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"未連上乙太網路。"</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"乙太網路。"</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"不顯示在螢幕上。"</string> </resources> diff --git a/packages/SettingsLib/res/values-zu/strings.xml b/packages/SettingsLib/res/values-zu/strings.xml index d950d58b5bf7..79b8946f1e98 100644 --- a/packages/SettingsLib/res/values-zu/strings.xml +++ b/packages/SettingsLib/res/values-zu/strings.xml @@ -592,6 +592,5 @@ <string name="accessibility_data_signal_full" msgid="1808301899314382337">"Igcwele i-signal yedatha"</string> <string name="accessibility_ethernet_disconnected" msgid="2832501530856497489">"I-Ethernet inqanyuliwe."</string> <string name="accessibility_ethernet_connected" msgid="6175942685957461563">"I-Ethernet."</string> - <!-- no translation found for accessibility_no_calling (3540827068323895748) --> - <skip /> + <string name="accessibility_no_calling" msgid="3540827068323895748">"Akukho ukwenza ikholi"</string> </resources> diff --git a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java index 0abff77c4e39..946d041bdd93 100644 --- a/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java +++ b/packages/SystemUI/src/com/android/systemui/qs/tiles/InternetTile.java @@ -248,15 +248,13 @@ public class InternetTile extends QSTileImpl<SignalState> { + "isTransient = " + isTransient + "," + "statusLabel = " + statusLabel); } - // When airplane mode is enabled, we need to refresh the Internet Tile even if the WiFi - // is not the default network. + mWifiInfo.mEnabled = enabled; if (qsIcon == null) { return; } mWifiInfo.mConnected = qsIcon.visible; mWifiInfo.mWifiSignalIconId = qsIcon.icon; mWifiInfo.mWifiSignalContentDescription = qsIcon.contentDescription; - mWifiInfo.mEnabled = enabled; mWifiInfo.mSsid = description; mWifiInfo.mActivityIn = activityIn; mWifiInfo.mActivityOut = activityOut; @@ -465,14 +463,13 @@ public class InternetTile extends QSTileImpl<SignalState> { } minimalContentDescription.append( mContext.getString(R.string.quick_settings_internet_label)).append(","); - if (state.value) { - if (wifiConnected) { - minimalStateDescription.append(cb.mWifiSignalContentDescription); - minimalContentDescription.append(removeDoubleQuotes(cb.mSsid)); - } else if (!TextUtils.isEmpty(state.secondaryLabel)) { - minimalContentDescription.append(",").append(state.secondaryLabel); - } + if (state.value && wifiConnected) { + minimalStateDescription.append(cb.mWifiSignalContentDescription); + minimalContentDescription.append(removeDoubleQuotes(cb.mSsid)); + } else if (!TextUtils.isEmpty(state.secondaryLabel)) { + minimalContentDescription.append(",").append(state.secondaryLabel); } + state.stateDescription = minimalStateDescription.toString(); state.contentDescription = minimalContentDescription.toString(); state.dualLabelContentDescription = r.getString( diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java index 7bc1bb39642b..dacd9417b22a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarSignalPolicy.java @@ -40,7 +40,7 @@ import java.util.Objects; public class StatusBarSignalPolicy implements NetworkControllerImpl.SignalCallback, SecurityController.SecurityControllerCallback, Tunable { private static final String TAG = "StatusBarSignalPolicy"; - private static final boolean DEBUG = Log.isLoggable(TAG, Log.INFO); + private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG); private final String mSlotAirplane; private final String mSlotMobile; diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java index 5ff897029543..528c0cbae0dd 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/CallbackHandler.java @@ -56,6 +56,7 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa private final String[] mHistory = new String[HISTORY_SIZE]; // Where to copy the next state into. private int mHistoryIndex; + private String mLastCallback; public CallbackHandler() { super(Looper.getMainLooper()); @@ -182,14 +183,20 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa @Override public void setConnectivityStatus(boolean noDefaultNetwork, boolean noValidatedNetwork, boolean noNetworksAvailable) { - String log = new StringBuilder() - .append(SSDF.format(System.currentTimeMillis())).append(",") + String currentCallback = new StringBuilder() .append("setConnectivityStatus: ") .append("noDefaultNetwork=").append(noDefaultNetwork).append(",") .append("noValidatedNetwork=").append(noValidatedNetwork).append(",") .append("noNetworksAvailable=").append(noNetworksAvailable) .toString(); - recordLastCallback(log); + if (!currentCallback.equals(mLastCallback)) { + mLastCallback = currentCallback; + String log = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append(currentCallback).append(",") + .toString(); + recordLastCallback(log); + } post(() -> { for (SignalCallback signalCluster : mSignalCallbacks) { signalCluster.setConnectivityStatus( @@ -200,13 +207,19 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa @Override public void setCallIndicator(IconState statusIcon, int subId) { - String log = new StringBuilder() - .append(SSDF.format(System.currentTimeMillis())).append(",") + String currentCallback = new StringBuilder() .append("setCallIndicator: ") .append("statusIcon=").append(statusIcon).append(",") .append("subId=").append(subId) .toString(); - recordLastCallback(log); + if (!currentCallback.equals(mLastCallback)) { + mLastCallback = currentCallback; + String log = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append(currentCallback).append(",") + .toString(); + recordLastCallback(log); + } post(() -> { for (SignalCallback signalCluster : mSignalCallbacks) { signalCluster.setCallIndicator(statusIcon, subId); @@ -216,12 +229,18 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa @Override public void setSubs(List<SubscriptionInfo> subs) { - String log = new StringBuilder() - .append(SSDF.format(System.currentTimeMillis())).append(",") + String currentCallback = new StringBuilder() .append("setSubs: ") .append("subs=").append(subs == null ? "" : subs.toString()) .toString(); - recordLastCallback(log); + if (!currentCallback.equals(mLastCallback)) { + mLastCallback = currentCallback; + String log = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append(currentCallback).append(",") + .toString(); + recordLastCallback(log); + } obtainMessage(MSG_SUBS_CHANGED, subs).sendToTarget(); } @@ -253,12 +272,18 @@ public class CallbackHandler extends Handler implements EmergencyListener, Signa @Override public void setIsAirplaneMode(IconState icon) { - String log = new StringBuilder() - .append(SSDF.format(System.currentTimeMillis())).append(",") + String currentCallback = new StringBuilder() .append("setIsAirplaneMode: ") .append("icon=").append(icon) .toString(); - recordLastCallback(log); + if (!currentCallback.equals(mLastCallback)) { + mLastCallback = currentCallback; + String log = new StringBuilder() + .append(SSDF.format(System.currentTimeMillis())).append(",") + .append(currentCallback).append(",") + .toString(); + recordLastCallback(log); + } obtainMessage(MSG_AIRPLANE_MODE_CHANGED, icon).sendToTarget();; } diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index f54551e3f61f..9d86f4eaa520 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -9033,7 +9033,8 @@ public class ConnectivityService extends IConnectivityManager.Stub private void updateDefaultNetworksForOemNetworkPreference( @NonNull final Set<NetworkRequestInfo> nris) { - handleRemoveNetworkRequests(mDefaultNetworkRequests); + // Pass in a defensive copy as this collection will be updated on remove. + handleRemoveNetworkRequests(new ArraySet<>(mDefaultNetworkRequests)); addPerAppDefaultNetworkRequests(nris); } diff --git a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java index c05e25367d03..4cf527415d7e 100644 --- a/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java +++ b/services/core/java/com/android/server/connectivity/NetworkAgentInfo.java @@ -899,7 +899,7 @@ public class NetworkAgentInfo implements Comparable<NetworkAgentInfo> { ? networkAgentConfig.subscriberId : null; return new NetworkState(new NetworkInfo(networkInfo), new LinkProperties(linkProperties), - new NetworkCapabilities(networkCapabilities), network, subscriberId, null); + new NetworkCapabilities(networkCapabilities), network, subscriberId); } } diff --git a/services/core/java/com/android/server/locksettings/LockSettingsService.java b/services/core/java/com/android/server/locksettings/LockSettingsService.java index 1baca10c35cf..2dd54482e2d8 100644 --- a/services/core/java/com/android/server/locksettings/LockSettingsService.java +++ b/services/core/java/com/android/server/locksettings/LockSettingsService.java @@ -1276,7 +1276,7 @@ public class LockSettingsService extends ILockSettings.Stub { private void unlockKeystore(byte[] password, int userHandle) { if (DEBUG) Slog.v(TAG, "Unlock keystore for user: " + userHandle); - new Authorization().onLockScreenEvent(false, userHandle, password); + Authorization.onLockScreenEvent(false, userHandle, password); // TODO(b/120484642): Update keystore to accept byte[] passwords String passwordString = password == null ? null : new String(password); final KeyStore ks = KeyStore.getInstance(); diff --git a/services/core/java/com/android/server/media/MediaKeyDispatcher.java b/services/core/java/com/android/server/media/MediaKeyDispatcher.java index 7ef4924879bf..55511ad637ac 100644 --- a/services/core/java/com/android/server/media/MediaKeyDispatcher.java +++ b/services/core/java/com/android/server/media/MediaKeyDispatcher.java @@ -77,7 +77,7 @@ public abstract class MediaKeyDispatcher { mOverriddenKeyEvents.put(KeyEvent.KEYCODE_VOLUME_MUTE, 0); } - // TODO: Move this method into SessionPolicyProvider.java for better readability. + // TODO: Move this method into MediaSessionPolicyProvider.java for better readability. /** * Implement this to customize the logic for which MediaSession should consume which key event. * diff --git a/services/core/java/com/android/server/media/SessionPolicyProvider.java b/services/core/java/com/android/server/media/MediaSessionPolicyProvider.java index 332c85adec01..ceadb596dd42 100644 --- a/services/core/java/com/android/server/media/SessionPolicyProvider.java +++ b/services/core/java/com/android/server/media/MediaSessionPolicyProvider.java @@ -31,7 +31,7 @@ import java.lang.annotation.RetentionPolicy; * without any parameters. */ // TODO: Move this class to apex/media/ -public abstract class SessionPolicyProvider { +public abstract class MediaSessionPolicyProvider { @IntDef(value = { SESSION_POLICY_IGNORE_BUTTON_RECEIVER, SESSION_POLICY_IGNORE_BUTTON_SESSION @@ -55,7 +55,7 @@ public abstract class SessionPolicyProvider { */ static final int SESSION_POLICY_IGNORE_BUTTON_SESSION = 1 << 1; - public SessionPolicyProvider(Context context) { + public MediaSessionPolicyProvider(Context context) { // Constructor used for reflection } diff --git a/services/core/java/com/android/server/media/MediaSessionRecord.java b/services/core/java/com/android/server/media/MediaSessionRecord.java index c462a9274117..0a074e1e7c50 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecord.java +++ b/services/core/java/com/android/server/media/MediaSessionRecord.java @@ -895,7 +895,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR throws RemoteException { final long token = Binder.clearCallingIdentity(); try { - if ((mPolicies & SessionPolicyProvider.SESSION_POLICY_IGNORE_BUTTON_RECEIVER) + if ((mPolicies & MediaSessionPolicyProvider.SESSION_POLICY_IGNORE_BUTTON_RECEIVER) != 0) { return; } @@ -911,7 +911,7 @@ public class MediaSessionRecord implements IBinder.DeathRecipient, MediaSessionR public void setMediaButtonBroadcastReceiver(ComponentName receiver) throws RemoteException { final long token = Binder.clearCallingIdentity(); try { - if ((mPolicies & SessionPolicyProvider.SESSION_POLICY_IGNORE_BUTTON_RECEIVER) + if ((mPolicies & MediaSessionPolicyProvider.SESSION_POLICY_IGNORE_BUTTON_RECEIVER) != 0) { return; } diff --git a/services/core/java/com/android/server/media/MediaSessionRecordImpl.java b/services/core/java/com/android/server/media/MediaSessionRecordImpl.java index 032523ef9694..3c50597b8cfc 100644 --- a/services/core/java/com/android/server/media/MediaSessionRecordImpl.java +++ b/services/core/java/com/android/server/media/MediaSessionRecordImpl.java @@ -20,7 +20,7 @@ import android.media.AudioManager; import android.os.ResultReceiver; import android.view.KeyEvent; -import com.android.server.media.SessionPolicyProvider.SessionPolicy; +import com.android.server.media.MediaSessionPolicyProvider.SessionPolicy; import java.io.PrintWriter; diff --git a/services/core/java/com/android/server/media/MediaSessionService.java b/services/core/java/com/android/server/media/MediaSessionService.java index 6c1d3991c4e9..18f2d8450246 100644 --- a/services/core/java/com/android/server/media/MediaSessionService.java +++ b/services/core/java/com/android/server/media/MediaSessionService.java @@ -148,7 +148,7 @@ public class MediaSessionService extends SystemService implements Monitor { final RemoteCallbackList<IRemoteSessionCallback> mRemoteVolumeControllers = new RemoteCallbackList<>(); - private SessionPolicyProvider mCustomSessionPolicyProvider; + private MediaSessionPolicyProvider mCustomMediaSessionPolicyProvider; private MediaKeyDispatcher mCustomMediaKeyDispatcher; public MediaSessionService(Context context) { @@ -191,8 +191,10 @@ public class MediaSessionService extends SystemService implements Monitor { updateUser(); - instantiateCustomProvider(null); - instantiateCustomDispatcher(null); + instantiateCustomProvider(mContext.getResources().getString( + R.string.config_customMediaSessionPolicyProvider)); + instantiateCustomDispatcher(mContext.getResources().getString( + R.string.config_customMediaKeyDispatcher)); mRecordThread.start(); final IntentFilter filter = new IntentFilter( @@ -589,8 +591,8 @@ public class MediaSessionService extends SystemService implements Monitor { String callerPackageName, ISessionCallback cb, String tag, Bundle sessionInfo) { synchronized (mLock) { int policies = 0; - if (mCustomSessionPolicyProvider != null) { - policies = mCustomSessionPolicyProvider.getSessionPoliciesForApplication( + if (mCustomMediaSessionPolicyProvider != null) { + policies = mCustomMediaSessionPolicyProvider.getSessionPoliciesForApplication( callerUid, callerPackageName); } @@ -778,16 +780,13 @@ public class MediaSessionService extends SystemService implements Monitor { return null; } - private void instantiateCustomDispatcher(String nameFromTesting) { + private void instantiateCustomDispatcher(String componentName) { synchronized (mLock) { mCustomMediaKeyDispatcher = null; - String customDispatcherClassName = (nameFromTesting == null) - ? mContext.getResources().getString(R.string.config_customMediaKeyDispatcher) - : nameFromTesting; try { - if (!TextUtils.isEmpty(customDispatcherClassName)) { - Class customDispatcherClass = Class.forName(customDispatcherClassName); + if (componentName != null && !TextUtils.isEmpty(componentName)) { + Class customDispatcherClass = Class.forName(componentName); Constructor constructor = customDispatcherClass.getDeclaredConstructor(Context.class); mCustomMediaKeyDispatcher = @@ -801,20 +800,17 @@ public class MediaSessionService extends SystemService implements Monitor { } } - private void instantiateCustomProvider(String nameFromTesting) { + private void instantiateCustomProvider(String componentName) { synchronized (mLock) { - mCustomSessionPolicyProvider = null; + mCustomMediaSessionPolicyProvider = null; - String customProviderClassName = (nameFromTesting == null) - ? mContext.getResources().getString(R.string.config_customSessionPolicyProvider) - : nameFromTesting; try { - if (!TextUtils.isEmpty(customProviderClassName)) { - Class customProviderClass = Class.forName(customProviderClassName); + if (componentName != null && !TextUtils.isEmpty(componentName)) { + Class customProviderClass = Class.forName(componentName); Constructor constructor = customProviderClass.getDeclaredConstructor(Context.class); - mCustomSessionPolicyProvider = - (SessionPolicyProvider) constructor.newInstance(mContext); + mCustomMediaSessionPolicyProvider = + (MediaSessionPolicyProvider) constructor.newInstance(mContext); } } catch (ClassNotFoundException | InstantiationException | InvocationTargetException | IllegalAccessException | NoSuchMethodException e) { @@ -1933,16 +1929,30 @@ public class MediaSessionService extends SystemService implements Monitor { } @Override - public void setCustomMediaKeyDispatcherForTesting(String name) { + public void setCustomMediaKeyDispatcher(String name) { instantiateCustomDispatcher(name); } @Override - public void setCustomSessionPolicyProviderForTesting(String name) { + public void setCustomMediaSessionPolicyProvider(String name) { instantiateCustomProvider(name); } @Override + public boolean hasCustomMediaKeyDispatcher(String componentName) { + return mCustomMediaKeyDispatcher == null ? false + : TextUtils.equals(componentName, + mCustomMediaKeyDispatcher.getClass().getName()); + } + + @Override + public boolean hasCustomMediaSessionPolicyProvider(String componentName) { + return mCustomMediaSessionPolicyProvider == null ? false + : TextUtils.equals(componentName, + mCustomMediaSessionPolicyProvider.getClass().getName()); + } + + @Override public int getSessionPolicies(MediaSession.Token token) { synchronized (mLock) { MediaSessionRecord record = getMediaSessionRecordLocked(token); diff --git a/services/core/java/com/android/server/media/MediaSessionStack.java b/services/core/java/com/android/server/media/MediaSessionStack.java index f8ff5b5f8e66..50eed19389dc 100644 --- a/services/core/java/com/android/server/media/MediaSessionStack.java +++ b/services/core/java/com/android/server/media/MediaSessionStack.java @@ -16,7 +16,7 @@ package com.android.server.media; -import static com.android.server.media.SessionPolicyProvider.SESSION_POLICY_IGNORE_BUTTON_SESSION; +import static com.android.server.media.MediaSessionPolicyProvider.SESSION_POLICY_IGNORE_BUTTON_SESSION; import android.media.Session2Token; import android.media.session.MediaSession; diff --git a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java index 15c72b34dbc0..342dbfa3f59d 100644 --- a/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java +++ b/services/core/java/com/android/server/stats/pull/StatsPullAtomService.java @@ -2134,7 +2134,9 @@ public class StatsPullAtomService extends SystemService { metrics.kernelStackKb, metrics.totalIonKb, metrics.unaccountedKb, - metrics.gpuTotalUsageKb)); + metrics.gpuTotalUsageKb, + metrics.gpuPrivateAllocationsKb, + metrics.dmaBufTotalExportedKb)); return StatsManager.PULL_SUCCESS; } diff --git a/services/core/java/com/android/server/stats/pull/SystemMemoryUtil.java b/services/core/java/com/android/server/stats/pull/SystemMemoryUtil.java index 1e80c4fe89fb..628c1d61ce9a 100644 --- a/services/core/java/com/android/server/stats/pull/SystemMemoryUtil.java +++ b/services/core/java/com/android/server/stats/pull/SystemMemoryUtil.java @@ -28,6 +28,8 @@ final class SystemMemoryUtil { static Metrics getMetrics() { int totalIonKb = (int) Debug.getIonHeapsSizeKb(); int gpuTotalUsageKb = (int) Debug.getGpuTotalUsageKb(); + int gpuDmaBufUsageKb = (int) Debug.getGpuDmaBufUsageKb(); + int dmaBufTotalExportedKb = (int) Debug.getDmabufTotalExportedKb(); long[] mInfos = new long[Debug.MEMINFO_COUNT]; Debug.getMemInfo(mInfos); @@ -49,14 +51,36 @@ final class SystemMemoryUtil { + mInfos[Debug.MEMINFO_SLAB_UNRECLAIMABLE] + kReclaimableKb + mInfos[Debug.MEMINFO_VM_ALLOC_USED] - + mInfos[Debug.MEMINFO_PAGE_TABLES] - + Math.max(totalIonKb, 0); + + mInfos[Debug.MEMINFO_PAGE_TABLES]; if (!Debug.isVmapStack()) { // See b/146088882 accountedKb += mInfos[Debug.MEMINFO_KERNEL_STACK]; } + int gpuPrivateAllocationsKb = -1; + if (gpuTotalUsageKb >= 0 && gpuDmaBufUsageKb >= 0) { + gpuPrivateAllocationsKb = gpuTotalUsageKb - gpuDmaBufUsageKb; + } + // If we can distinguish gpu private allocs it means the dmabuf metrics + // are supported already. + if (dmaBufTotalExportedKb >= 0 && gpuPrivateAllocationsKb >= 0) { + // If we can calculate the overlap between dma memory and gpu + // drivers we can do more accurate tracking. But this is only + // available on 5.4+ kernels. + accountedKb += dmaBufTotalExportedKb + gpuPrivateAllocationsKb; + } else { + // If we cannot distinguish, accept that we will double count the + // dma buffers also used by the gpu driver. + accountedKb += Math.max(0, gpuTotalUsageKb); + if (dmaBufTotalExportedKb >= 0) { + accountedKb += dmaBufTotalExportedKb; + } else if (totalIonKb >= 0) { + // ION is a subset of total exported dmabuf memory. + accountedKb += totalIonKb; + } + } + Metrics result = new Metrics(); result.unreclaimableSlabKb = (int) mInfos[Debug.MEMINFO_SLAB_UNRECLAIMABLE]; result.vmallocUsedKb = (int) mInfos[Debug.MEMINFO_VM_ALLOC_USED]; @@ -64,6 +88,8 @@ final class SystemMemoryUtil { result.kernelStackKb = (int) mInfos[Debug.MEMINFO_KERNEL_STACK]; result.totalIonKb = totalIonKb; result.gpuTotalUsageKb = gpuTotalUsageKb; + result.gpuPrivateAllocationsKb = gpuPrivateAllocationsKb; + result.dmaBufTotalExportedKb = dmaBufTotalExportedKb; result.unaccountedKb = (int) (mInfos[Debug.MEMINFO_TOTAL] - accountedKb); return result; } @@ -75,6 +101,8 @@ final class SystemMemoryUtil { public int kernelStackKb; public int totalIonKb; public int gpuTotalUsageKb; + public int gpuPrivateAllocationsKb; + public int dmaBufTotalExportedKb; public int unaccountedKb; } } diff --git a/services/core/java/com/android/server/trust/TrustManagerService.java b/services/core/java/com/android/server/trust/TrustManagerService.java index da3e48ad2c0d..4fbc79507b95 100644 --- a/services/core/java/com/android/server/trust/TrustManagerService.java +++ b/services/core/java/com/android/server/trust/TrustManagerService.java @@ -703,7 +703,7 @@ public class TrustManagerService extends SystemService { if (changed) { dispatchDeviceLocked(userId, locked); - mAuthorizationService.onLockScreenEvent(locked, userId, null); + Authorization.onLockScreenEvent(locked, userId, null); KeyStore.getInstance().onUserLockedStateChanged(userId, locked); // Also update the user's profiles who have unified challenge, since they // share the same unlocked state (see {@link #isDeviceLocked(int)}) @@ -1261,7 +1261,7 @@ public class TrustManagerService extends SystemService { mDeviceLockedForUser.put(userId, locked); } - mAuthorizationService.onLockScreenEvent(locked, userId, null); + Authorization.onLockScreenEvent(locked, userId, null); KeyStore.getInstance().onUserLockedStateChanged(userId, locked); if (locked) { diff --git a/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java b/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java index 3ebe4efee013..7d7af03ecd3d 100644 --- a/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java +++ b/services/tests/servicestests/src/com/android/server/net/NetworkPolicyManagerServiceTest.java @@ -2043,7 +2043,7 @@ public class NetworkPolicyManagerServiceTest { final NetworkCapabilities networkCapabilities = new NetworkCapabilities(); networkCapabilities.addTransportType(TRANSPORT_WIFI); networkCapabilities.setSSID(TEST_SSID); - return new NetworkState(TYPE_WIFI, prop, networkCapabilities, null, null, TEST_SSID); + return new NetworkState(TYPE_WIFI, prop, networkCapabilities, null, null); } private void expectHasInternetPermission(int uid, boolean hasIt) throws Exception { @@ -2067,7 +2067,7 @@ public class NetworkPolicyManagerServiceTest { new NetworkState(TYPE_MOBILE, buildLinkProperties(TEST_IFACE), buildNetworkCapabilities(TEST_SUB_ID, roaming), - new Network(TEST_NET_ID), TEST_IMSI, null) + new Network(TEST_NET_ID), TEST_IMSI) }); } diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java index 516d9ad1e847..8c68d856d896 100644 --- a/telephony/java/android/telephony/CarrierConfigManager.java +++ b/telephony/java/android/telephony/CarrierConfigManager.java @@ -4230,10 +4230,6 @@ public class CarrierConfigManager { public static final String KEY_RETRANSMIT_TIMER_MSEC_INT_ARRAY = KEY_PREFIX + "retransmit_timer_sec_int_array"; - /** Controls if wifi mac Id should be added to network access identifier(NAI) */ - public static final String KEY_ADD_WIFI_MAC_ADDR_TO_NAI_BOOL = - KEY_PREFIX + "add_wifi_mac_addr_to_nai_bool"; - /** * Specifies the local identity type for IKE negotiations. Possible values are {@link * #ID_TYPE_FQDN}, {@link #ID_TYPE_RFC822_ADDR}, {@link #ID_TYPE_KEY_ID} @@ -4557,7 +4553,6 @@ public class CarrierConfigManager { KEY_EPDG_ADDRESS_PRIORITY_INT_ARRAY, new int[] {EPDG_ADDRESS_PLMN, EPDG_ADDRESS_STATIC}); defaults.putStringArray(KEY_MCC_MNCS_STRING_ARRAY, new String[] {}); - defaults.putBoolean(KEY_ADD_WIFI_MAC_ADDR_TO_NAI_BOOL, false); defaults.putInt(KEY_IKE_LOCAL_ID_TYPE_INT, ID_TYPE_RFC822_ADDR); defaults.putInt(KEY_IKE_REMOTE_ID_TYPE_INT, ID_TYPE_FQDN); defaults.putBoolean(KEY_ADD_KE_TO_CHILD_SESSION_REKEY_BOOL, false); @@ -4749,7 +4744,7 @@ public class CarrierConfigManager { public static final String KEY_NETWORK_TEMP_NOT_METERED_SUPPORTED_BOOL = "network_temp_not_metered_supported_bool"; - /* + /** * Boolean indicating whether the SIM PIN can be stored and verified * seamlessly after an unattended reboot. * diff --git a/tests/net/java/android/net/NetworkTemplateTest.kt b/tests/net/java/android/net/NetworkTemplateTest.kt index 1f8f6f311069..b39555d15dcb 100644 --- a/tests/net/java/android/net/NetworkTemplateTest.kt +++ b/tests/net/java/android/net/NetworkTemplateTest.kt @@ -65,7 +65,7 @@ class NetworkTemplateTest { setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, true) setSSID(ssid) } - return NetworkState(type, lp, caps, mock(Network::class.java), subscriberId, ssid) + return NetworkState(type, lp, caps, mock(Network::class.java), subscriberId) } private fun NetworkTemplate.assertMatches(ident: NetworkIdentity) = diff --git a/tests/net/java/com/android/server/ConnectivityServiceTest.java b/tests/net/java/com/android/server/ConnectivityServiceTest.java index ad2b3a15d608..24e559225027 100644 --- a/tests/net/java/com/android/server/ConnectivityServiceTest.java +++ b/tests/net/java/com/android/server/ConnectivityServiceTest.java @@ -84,6 +84,11 @@ import static android.net.NetworkPolicyManager.RULE_ALLOW_METERED; import static android.net.NetworkPolicyManager.RULE_NONE; import static android.net.NetworkPolicyManager.RULE_REJECT_ALL; import static android.net.NetworkPolicyManager.RULE_REJECT_METERED; +import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID; +import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK; +import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; +import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY; +import static android.net.OemNetworkPreferences.OEM_NETWORK_PREFERENCE_UNINITIALIZED; import static android.net.RouteInfo.RTN_UNREACHABLE; import static android.os.Process.INVALID_UID; import static android.system.OsConstants.IPPROTO_TCP; @@ -355,6 +360,7 @@ public class ConnectivityServiceTest { private static final long TIMESTAMP = 1234L; private static final int NET_ID = 110; + private static final int OEM_PREF_ANY_NET_ID = -1; // Set a non-zero value to verify the flow to set tcp init rwnd value. private static final int TEST_TCP_INIT_RWND = 60; @@ -9488,7 +9494,7 @@ public class ConnectivityServiceTest { public void testOemNetworkRequestFactoryPreferenceUninitializedThrowsError() throws PackageManager.NameNotFoundException { @OemNetworkPreferences.OemNetworkPreference final int prefToTest = - OemNetworkPreferences.OEM_NETWORK_PREFERENCE_UNINITIALIZED; + OEM_NETWORK_PREFERENCE_UNINITIALIZED; // Act on OemNetworkRequestFactory.createNrisFromOemNetworkPreferences() assertThrows(IllegalArgumentException.class, @@ -9505,7 +9511,7 @@ public class ConnectivityServiceTest { final int expectedNumOfRequests = 3; @OemNetworkPreferences.OemNetworkPreference final int prefToTest = - OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID; + OEM_NETWORK_PREFERENCE_OEM_PAID; // Act on OemNetworkRequestFactory.createNrisFromOemNetworkPreferences() final ArraySet<ConnectivityService.NetworkRequestInfo> nris = @@ -9534,7 +9540,7 @@ public class ConnectivityServiceTest { final int expectedNumOfRequests = 2; @OemNetworkPreferences.OemNetworkPreference final int prefToTest = - OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK; + OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK; // Act on OemNetworkRequestFactory.createNrisFromOemNetworkPreferences() final ArraySet<ConnectivityService.NetworkRequestInfo> nris = @@ -9560,7 +9566,7 @@ public class ConnectivityServiceTest { final int expectedNumOfRequests = 1; @OemNetworkPreferences.OemNetworkPreference final int prefToTest = - OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; + OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; // Act on OemNetworkRequestFactory.createNrisFromOemNetworkPreferences() final ArraySet<ConnectivityService.NetworkRequestInfo> nris = @@ -9583,7 +9589,7 @@ public class ConnectivityServiceTest { final int expectedNumOfRequests = 1; @OemNetworkPreferences.OemNetworkPreference final int prefToTest = - OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY; + OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY; // Act on OemNetworkRequestFactory.createNrisFromOemNetworkPreferences() final ArraySet<ConnectivityService.NetworkRequestInfo> nris = @@ -9611,8 +9617,8 @@ public class ConnectivityServiceTest { mockGetApplicationInfo(testPackageName2, TEST_PACKAGE_UID); // Build OemNetworkPreferences object - final int testOemPref = OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID; - final int testOemPref2 = OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK; + final int testOemPref = OEM_NETWORK_PREFERENCE_OEM_PAID; + final int testOemPref2 = OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK; final OemNetworkPreferences pref = new OemNetworkPreferences.Builder() .addNetworkPreference(TEST_PACKAGE_NAME, testOemPref) .addNetworkPreference(testPackageName2, testOemPref2) @@ -9636,8 +9642,8 @@ public class ConnectivityServiceTest { mockGetApplicationInfo(testPackageName2, testPackageNameUid2); // Build OemNetworkPreferences object - final int testOemPref = OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID; - final int testOemPref2 = OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK; + final int testOemPref = OEM_NETWORK_PREFERENCE_OEM_PAID; + final int testOemPref2 = OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK; final OemNetworkPreferences pref = new OemNetworkPreferences.Builder() .addNetworkPreference(TEST_PACKAGE_NAME, testOemPref) .addNetworkPreference(testPackageName2, testOemPref2) @@ -9671,7 +9677,7 @@ public class ConnectivityServiceTest { mockGetApplicationInfo(testPackageName2, testPackageNameUid2); // Build OemNetworkPreferences object - final int testOemPref = OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID; + final int testOemPref = OEM_NETWORK_PREFERENCE_OEM_PAID; final OemNetworkPreferences pref = new OemNetworkPreferences.Builder() .addNetworkPreference(TEST_PACKAGE_NAME, testOemPref) .addNetworkPreference(testPackageName2, testOemPref) @@ -9689,8 +9695,6 @@ public class ConnectivityServiceTest { @Test public void testSetOemNetworkPreferenceNullListenerAndPrefParamThrowsNpe() { mockHasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE, true); - @OemNetworkPreferences.OemNetworkPreference final int networkPref = - OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY; // Act on ConnectivityService.setOemNetworkPreference() assertThrows(NullPointerException.class, @@ -9704,7 +9708,7 @@ public class ConnectivityServiceTest { throws Exception { mockHasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE, false); @OemNetworkPreferences.OemNetworkPreference final int networkPref = - OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY; + OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY; // Act on ConnectivityService.setOemNetworkPreference() assertThrows(UnsupportedOperationException.class, @@ -9870,7 +9874,7 @@ public class ConnectivityServiceTest { @Test public void testMultiDefaultGetActiveNetworkIsCorrect() throws Exception { @OemNetworkPreferences.OemNetworkPreference final int networkPref = - OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; + OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; final int expectedOemPrefRequestSize = 1; // Setup the test process to use networkPref for their default network. @@ -9891,7 +9895,7 @@ public class ConnectivityServiceTest { @Test public void testMultiDefaultIsActiveNetworkMeteredIsCorrect() throws Exception { @OemNetworkPreferences.OemNetworkPreference final int networkPref = - OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; + OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; final int expectedOemPrefRequestSize = 1; // Setup the test process to use networkPref for their default network. @@ -9918,7 +9922,7 @@ public class ConnectivityServiceTest { @Test public void testPerAppDefaultRegisterDefaultNetworkCallback() throws Exception { @OemNetworkPreferences.OemNetworkPreference final int networkPref = - OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; + OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; final int expectedOemPrefRequestSize = 1; final TestNetworkCallback defaultNetworkCallback = new TestNetworkCallback(); @@ -9955,7 +9959,7 @@ public class ConnectivityServiceTest { @Test public void testPerAppDefaultRegisterDefaultNetworkCallbackAfterPrefSet() throws Exception { @OemNetworkPreferences.OemNetworkPreference final int networkPref = - OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; + OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; final int expectedOemPrefRequestSize = 1; final TestNetworkCallback defaultNetworkCallback = new TestNetworkCallback(); @@ -9992,7 +9996,7 @@ public class ConnectivityServiceTest { @Test public void testPerAppDefaultRegisterDefaultNetworkCallbackDoesNotFire() throws Exception { @OemNetworkPreferences.OemNetworkPreference final int networkPref = - OemNetworkPreferences.OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; + OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; final int expectedOemPrefRequestSize = 1; final TestNetworkCallback defaultNetworkCallback = new TestNetworkCallback(); final int userId = UserHandle.getUserId(Process.myUid()); @@ -10042,4 +10046,296 @@ public class ConnectivityServiceTest { // Confirm we can unregister without issues. mCm.unregisterNetworkCallback(defaultNetworkCallback); } + + private void verifySetOemNetworkPreferenceForPreference( + @NonNull final UidRangeParcel[] uidRanges, + final int addUidRangesNetId, + final int addUidRangesTimes, + final int removeUidRangesNetId, + final int removeUidRangesTimes, + final boolean shouldDestroyNetwork) throws RemoteException { + final boolean useAnyIdForAdd = OEM_PREF_ANY_NET_ID == addUidRangesNetId; + final boolean useAnyIdForRemove = OEM_PREF_ANY_NET_ID == removeUidRangesNetId; + + // Validate netd. + verify(mMockNetd, times(addUidRangesTimes)) + .networkAddUidRanges( + (useAnyIdForAdd ? anyInt() : eq(addUidRangesNetId)), eq(uidRanges)); + verify(mMockNetd, times(removeUidRangesTimes)) + .networkRemoveUidRanges( + (useAnyIdForRemove ? anyInt() : eq(removeUidRangesNetId)), eq(uidRanges)); + if (shouldDestroyNetwork) { + verify(mMockNetd, times(1)) + .networkDestroy((useAnyIdForRemove ? anyInt() : eq(removeUidRangesNetId))); + } + reset(mMockNetd); + } + + /** + * Test the tracked default requests clear previous OEM requests on setOemNetworkPreference(). + * @throws Exception + */ + @Test + public void testSetOemNetworkPreferenceClearPreviousOemValues() throws Exception { + @OemNetworkPreferences.OemNetworkPreference int networkPref = + OEM_NETWORK_PREFERENCE_OEM_PAID; + final int testPackageUid = 123; + final String testPackageName = "com.google.apps.contacts"; + final UidRangeParcel[] uidRanges = + toUidRangeStableParcels(uidRangesForUid(testPackageUid)); + + // Validate the starting requests only includes the fallback request. + assertEquals(1, mService.mDefaultNetworkRequests.size()); + + // Add an OEM default network request to track. + setupSetOemNetworkPreferenceForPreferenceTest(networkPref, uidRanges, testPackageName); + + // Two requests should exist, one for the fallback and one for the pref. + assertEquals(2, mService.mDefaultNetworkRequests.size()); + + networkPref = OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY; + setupSetOemNetworkPreferenceForPreferenceTest(networkPref, uidRanges, testPackageName); + + // Two requests should still exist validating the previous per-app request was replaced. + assertEquals(2, mService.mDefaultNetworkRequests.size()); + } + + /** + * Test network priority for preference OEM_NETWORK_PREFERENCE_OEM_PAID following in order: + * NET_CAPABILITY_NOT_METERED -> NET_CAPABILITY_OEM_PAID -> fallback + * @throws Exception + */ + @Test + public void testMultilayerForPreferenceOemPaidEvaluatesCorrectly() + throws Exception { + @OemNetworkPreferences.OemNetworkPreference final int networkPref = + OEM_NETWORK_PREFERENCE_OEM_PAID; + + // Arrange PackageManager mocks + final int testPackageNameUid = 123; + final UidRangeParcel[] uidRanges = + toUidRangeStableParcels(uidRangesForUid(testPackageNameUid)); + setupSetOemNetworkPreferenceForPreferenceTest(networkPref, uidRanges, TEST_PACKAGE_NAME); + + // Verify the starting state. No networks should be connected. + verifySetOemNetworkPreferenceForPreference(uidRanges, + OEM_PREF_ANY_NET_ID, 0 /* times */, + OEM_PREF_ANY_NET_ID, 0 /* times */, + false /* shouldDestroyNetwork */); + + // Test lowest to highest priority requests. + // Bring up metered cellular. This will satisfy the fallback network. + setOemNetworkPreferenceAgentConnected(TRANSPORT_CELLULAR, true); + verifySetOemNetworkPreferenceForPreference(uidRanges, + mCellNetworkAgent.getNetwork().netId, 1 /* times */, + OEM_PREF_ANY_NET_ID, 0 /* times */, + false /* shouldDestroyNetwork */); + + // Bring up ethernet with OEM_PAID. This will satisfy NET_CAPABILITY_OEM_PAID. + setOemNetworkPreferenceAgentConnected(TRANSPORT_ETHERNET, true); + verifySetOemNetworkPreferenceForPreference(uidRanges, + mEthernetNetworkAgent.getNetwork().netId, 1 /* times */, + mCellNetworkAgent.getNetwork().netId, 1 /* times */, + false /* shouldDestroyNetwork */); + + // Bring up unmetered Wi-Fi. This will satisfy NET_CAPABILITY_NOT_METERED. + setOemNetworkPreferenceAgentConnected(TRANSPORT_WIFI, true); + verifySetOemNetworkPreferenceForPreference(uidRanges, + mWiFiNetworkAgent.getNetwork().netId, 1 /* times */, + mEthernetNetworkAgent.getNetwork().netId, 1 /* times */, + false /* shouldDestroyNetwork */); + + // Disconnecting OEM_PAID should have no effect as it is lower in priority then unmetered. + setOemNetworkPreferenceAgentConnected(TRANSPORT_ETHERNET, false); + // netd should not be called as default networks haven't changed. + verifySetOemNetworkPreferenceForPreference(uidRanges, + OEM_PREF_ANY_NET_ID, 0 /* times */, + OEM_PREF_ANY_NET_ID, 0 /* times */, + false /* shouldDestroyNetwork */); + + // Disconnecting unmetered should put PANS on lowest priority fallback request. + setOemNetworkPreferenceAgentConnected(TRANSPORT_WIFI, false); + verifySetOemNetworkPreferenceForPreference(uidRanges, + mCellNetworkAgent.getNetwork().netId, 1 /* times */, + mWiFiNetworkAgent.getNetwork().netId, 0 /* times */, + true /* shouldDestroyNetwork */); + + // Disconnecting the fallback network should result in no connectivity. + setOemNetworkPreferenceAgentConnected(TRANSPORT_CELLULAR, false); + verifySetOemNetworkPreferenceForPreference(uidRanges, + OEM_PREF_ANY_NET_ID, 0 /* times */, + mCellNetworkAgent.getNetwork().netId, 0 /* times */, + true /* shouldDestroyNetwork */); + } + + /** + * Test network priority for OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK following in order: + * NET_CAPABILITY_NOT_METERED -> NET_CAPABILITY_OEM_PAID + * @throws Exception + */ + @Test + public void testMultilayerForPreferenceOemPaidNoFallbackEvaluatesCorrectly() + throws Exception { + @OemNetworkPreferences.OemNetworkPreference final int networkPref = + OEM_NETWORK_PREFERENCE_OEM_PAID_NO_FALLBACK; + + // Arrange PackageManager mocks + final int testPackageNameUid = 123; + final UidRangeParcel[] uidRanges = + toUidRangeStableParcels(uidRangesForUid(testPackageNameUid)); + setupSetOemNetworkPreferenceForPreferenceTest(networkPref, uidRanges, TEST_PACKAGE_NAME); + + // Verify the starting state. This preference doesn't support using the fallback network + // therefore should be on the disconnected network as it has no networks to connect to. + verifySetOemNetworkPreferenceForPreference(uidRanges, + mService.mNoServiceNetwork.network.getNetId(), 1 /* times */, + OEM_PREF_ANY_NET_ID, 0 /* times */, + false /* shouldDestroyNetwork */); + + // Test lowest to highest priority requests. + // Bring up metered cellular. This will satisfy the fallback network. + // This preference should not use this network as it doesn't support fallback usage. + setOemNetworkPreferenceAgentConnected(TRANSPORT_CELLULAR, true); + verifySetOemNetworkPreferenceForPreference(uidRanges, + OEM_PREF_ANY_NET_ID, 0 /* times */, + OEM_PREF_ANY_NET_ID, 0 /* times */, + false /* shouldDestroyNetwork */); + + // Bring up ethernet with OEM_PAID. This will satisfy NET_CAPABILITY_OEM_PAID. + setOemNetworkPreferenceAgentConnected(TRANSPORT_ETHERNET, true); + verifySetOemNetworkPreferenceForPreference(uidRanges, + mEthernetNetworkAgent.getNetwork().netId, 1 /* times */, + mService.mNoServiceNetwork.network.getNetId(), 1 /* times */, + false /* shouldDestroyNetwork */); + + // Bring up unmetered Wi-Fi. This will satisfy NET_CAPABILITY_NOT_METERED. + setOemNetworkPreferenceAgentConnected(TRANSPORT_WIFI, true); + verifySetOemNetworkPreferenceForPreference(uidRanges, + mWiFiNetworkAgent.getNetwork().netId, 1 /* times */, + mEthernetNetworkAgent.getNetwork().netId, 1 /* times */, + false /* shouldDestroyNetwork */); + + // Disconnecting unmetered should put PANS on OEM_PAID. + setOemNetworkPreferenceAgentConnected(TRANSPORT_WIFI, false); + verifySetOemNetworkPreferenceForPreference(uidRanges, + mEthernetNetworkAgent.getNetwork().netId, 1 /* times */, + mWiFiNetworkAgent.getNetwork().netId, 0 /* times */, + true /* shouldDestroyNetwork */); + + // Disconnecting OEM_PAID should result in no connectivity. + // OEM_PAID_NO_FALLBACK not supporting a fallback now uses the disconnected network. + setOemNetworkPreferenceAgentConnected(TRANSPORT_ETHERNET, false); + verifySetOemNetworkPreferenceForPreference(uidRanges, + mService.mNoServiceNetwork.network.getNetId(), 1 /* times */, + mEthernetNetworkAgent.getNetwork().netId, 0 /* times */, + true /* shouldDestroyNetwork */); + } + + /** + * Test network priority for OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY following in order: + * NET_CAPABILITY_OEM_PAID + * This preference should only apply to OEM_PAID networks. + * @throws Exception + */ + @Test + public void testMultilayerForPreferenceOemPaidOnlyEvaluatesCorrectly() + throws Exception { + @OemNetworkPreferences.OemNetworkPreference final int networkPref = + OEM_NETWORK_PREFERENCE_OEM_PAID_ONLY; + + // Arrange PackageManager mocks + final int testPackageNameUid = 123; + final UidRangeParcel[] uidRanges = + toUidRangeStableParcels(uidRangesForUid(testPackageNameUid)); + setupSetOemNetworkPreferenceForPreferenceTest(networkPref, uidRanges, TEST_PACKAGE_NAME); + + // Verify the starting state. This preference doesn't support using the fallback network + // therefore should be on the disconnected network as it has no networks to connect to. + verifySetOemNetworkPreferenceForPreference(uidRanges, + mService.mNoServiceNetwork.network.getNetId(), 1 /* times */, + OEM_PREF_ANY_NET_ID, 0 /* times */, + false /* shouldDestroyNetwork */); + + // Bring up metered cellular. This should not apply to this preference. + setOemNetworkPreferenceAgentConnected(TRANSPORT_CELLULAR, true); + verifySetOemNetworkPreferenceForPreference(uidRanges, + OEM_PREF_ANY_NET_ID, 0 /* times */, + OEM_PREF_ANY_NET_ID, 0 /* times */, + false /* shouldDestroyNetwork */); + + // Bring up unmetered Wi-Fi. This should not apply to this preference. + setOemNetworkPreferenceAgentConnected(TRANSPORT_WIFI, true); + verifySetOemNetworkPreferenceForPreference(uidRanges, + OEM_PREF_ANY_NET_ID, 0 /* times */, + OEM_PREF_ANY_NET_ID, 0 /* times */, + false /* shouldDestroyNetwork */); + + // Bring up ethernet with OEM_PAID. This will satisfy NET_CAPABILITY_OEM_PAID. + setOemNetworkPreferenceAgentConnected(TRANSPORT_ETHERNET, true); + verifySetOemNetworkPreferenceForPreference(uidRanges, + mEthernetNetworkAgent.getNetwork().netId, 1 /* times */, + mService.mNoServiceNetwork.network.getNetId(), 1 /* times */, + false /* shouldDestroyNetwork */); + + // Disconnecting OEM_PAID should result in no connectivity. + setOemNetworkPreferenceAgentConnected(TRANSPORT_ETHERNET, false); + verifySetOemNetworkPreferenceForPreference(uidRanges, + mService.mNoServiceNetwork.network.getNetId(), 1 /* times */, + mEthernetNetworkAgent.getNetwork().netId, 0 /* times */, + true /* shouldDestroyNetwork */); + } + + /** + * Test network priority for OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY following in order: + * NET_CAPABILITY_OEM_PRIVATE + * This preference should only apply to OEM_PRIVATE networks. + * @throws Exception + */ + @Test + public void testMultilayerForPreferenceOemPrivateOnlyEvaluatesCorrectly() + throws Exception { + @OemNetworkPreferences.OemNetworkPreference final int networkPref = + OEM_NETWORK_PREFERENCE_OEM_PRIVATE_ONLY; + + // Arrange PackageManager mocks + final int testPackageNameUid = 123; + final UidRangeParcel[] uidRanges = + toUidRangeStableParcels(uidRangesForUid(testPackageNameUid)); + setupSetOemNetworkPreferenceForPreferenceTest(networkPref, uidRanges, TEST_PACKAGE_NAME); + + // Verify the starting state. This preference doesn't support using the fallback network + // therefore should be on the disconnected network as it has no networks to connect to. + verifySetOemNetworkPreferenceForPreference(uidRanges, + mService.mNoServiceNetwork.network.getNetId(), 1 /* times */, + OEM_PREF_ANY_NET_ID, 0 /* times */, + false /* shouldDestroyNetwork */); + + // Bring up metered cellular. This should not apply to this preference. + setOemNetworkPreferenceAgentConnected(TRANSPORT_CELLULAR, true); + verifySetOemNetworkPreferenceForPreference(uidRanges, + OEM_PREF_ANY_NET_ID, 0 /* times */, + OEM_PREF_ANY_NET_ID, 0 /* times */, + false /* shouldDestroyNetwork */); + + // Bring up unmetered Wi-Fi. This should not apply to this preference. + setOemNetworkPreferenceAgentConnected(TRANSPORT_WIFI, true); + verifySetOemNetworkPreferenceForPreference(uidRanges, + OEM_PREF_ANY_NET_ID, 0 /* times */, + OEM_PREF_ANY_NET_ID, 0 /* times */, + false /* shouldDestroyNetwork */); + + // Bring up ethernet with OEM_PRIVATE. This will satisfy NET_CAPABILITY_OEM_PRIVATE. + startOemManagedNetwork(false); + verifySetOemNetworkPreferenceForPreference(uidRanges, + mEthernetNetworkAgent.getNetwork().netId, 1 /* times */, + mService.mNoServiceNetwork.network.getNetId(), 1 /* times */, + false /* shouldDestroyNetwork */); + + // Disconnecting OEM_PRIVATE should result in no connectivity. + stopOemManagedNetwork(); + verifySetOemNetworkPreferenceForPreference(uidRanges, + mService.mNoServiceNetwork.network.getNetId(), 1 /* times */, + mEthernetNetworkAgent.getNetwork().netId, 0 /* times */, + true /* shouldDestroyNetwork */); + } } diff --git a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java index 214c82da17dc..d644739ea25e 100644 --- a/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java +++ b/tests/net/java/com/android/server/net/NetworkStatsServiceTest.java @@ -1461,7 +1461,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest { capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, true); capabilities.addTransportType(NetworkCapabilities.TRANSPORT_WIFI); capabilities.setSSID(TEST_SSID); - return new NetworkState(TYPE_WIFI, prop, capabilities, WIFI_NETWORK, null, TEST_SSID); + return new NetworkState(TYPE_WIFI, prop, capabilities, WIFI_NETWORK, null); } private static NetworkState buildMobile3gState(String subscriberId) { @@ -1475,8 +1475,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest { capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED, false); capabilities.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, !isRoaming); capabilities.addTransportType(NetworkCapabilities.TRANSPORT_CELLULAR); - return new NetworkState( - TYPE_MOBILE, prop, capabilities, MOBILE_NETWORK, subscriberId, null); + return new NetworkState(TYPE_MOBILE, prop, capabilities, MOBILE_NETWORK, subscriberId); } private NetworkStats buildEmptyStats() { @@ -1486,7 +1485,7 @@ public class NetworkStatsServiceTest extends NetworkStatsBaseTest { private static NetworkState buildVpnState() { final LinkProperties prop = new LinkProperties(); prop.setInterfaceName(TUN_IFACE); - return new NetworkState(TYPE_VPN, prop, new NetworkCapabilities(), VPN_NETWORK, null, null); + return new NetworkState(TYPE_VPN, prop, new NetworkCapabilities(), VPN_NETWORK, null); } private long getElapsedRealtime() { |