summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--config/hiddenapi-light-greylist.txt4
-rw-r--r--core/java/android/view/ViewGroup.java6
-rw-r--r--core/java/android/view/ViewRootImpl.java107
-rw-r--r--core/java/com/android/internal/policy/DecorView.java2
-rw-r--r--media/java/android/media/MediaCodec.java4
-rw-r--r--media/jni/android_media_MediaExtractor.cpp14
-rw-r--r--packages/SettingsLib/res/values-as/arrays.xml4
-rw-r--r--packages/SettingsLib/res/values-as/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-de/strings.xml2
-rw-r--r--packages/SettingsLib/res/values-hi/strings.xml4
-rw-r--r--packages/SettingsLib/res/values-mr/strings.xml6
-rw-r--r--packages/SettingsLib/res/values-sw/arrays.xml18
-rw-r--r--packages/SettingsLib/res/values-sw/strings.xml10
-rw-r--r--packages/SystemUI/src/com/android/systemui/OverviewProxyService.java11
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java2
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java54
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java1
-rw-r--r--packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java3
-rw-r--r--services/core/java/com/android/server/ConnectivityService.java5
-rw-r--r--services/core/java/com/android/server/audio/AudioService.java11
21 files changed, 187 insertions, 86 deletions
diff --git a/config/hiddenapi-light-greylist.txt b/config/hiddenapi-light-greylist.txt
index 0bd11bbced44..c63c68b3d024 100644
--- a/config/hiddenapi-light-greylist.txt
+++ b/config/hiddenapi-light-greylist.txt
@@ -1474,6 +1474,7 @@ Landroid/content/pm/IPackageDeleteObserver2$Stub$Proxy;-><init>(Landroid/os/IBin
Landroid/content/pm/IPackageDeleteObserver2$Stub$Proxy;->mRemote:Landroid/os/IBinder;
Landroid/content/pm/IPackageDeleteObserver2$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageDeleteObserver2;
Landroid/content/pm/IPackageDeleteObserver2;->onPackageDeleted(Ljava/lang/String;ILjava/lang/String;)V
+Landroid/content/pm/IPackageInstaller;->uninstall(Landroid/content/pm/VersionedPackage;Ljava/lang/String;ILandroid/content/IntentSender;I)V
Landroid/content/pm/IPackageInstallerCallback$Stub$Proxy;-><init>(Landroid/os/IBinder;)V
Landroid/content/pm/IPackageInstallerCallback$Stub$Proxy;->mRemote:Landroid/os/IBinder;
Landroid/content/pm/IPackageInstallerCallback$Stub;->asInterface(Landroid/os/IBinder;)Landroid/content/pm/IPackageInstallerCallback;
@@ -1522,6 +1523,7 @@ Landroid/content/pm/IPackageManager;->getInstallLocation()I
Landroid/content/pm/IPackageManager;->getInstrumentationInfo(Landroid/content/ComponentName;I)Landroid/content/pm/InstrumentationInfo;
Landroid/content/pm/IPackageManager;->getLastChosenActivity(Landroid/content/Intent;Ljava/lang/String;I)Landroid/content/pm/ResolveInfo;
Landroid/content/pm/IPackageManager;->getNameForUid(I)Ljava/lang/String;
+Landroid/content/pm/IPackageManager;->getPackageInstaller()Landroid/content/pm/IPackageInstaller;
Landroid/content/pm/IPackageManager;->getPackagesForUid(I)[Ljava/lang/String;
Landroid/content/pm/IPackageManager;->getPackageUid(Ljava/lang/String;II)I
Landroid/content/pm/IPackageManager;->getPermissionControllerPackageName()Ljava/lang/String;
@@ -5979,6 +5981,7 @@ Landroid/view/inputmethod/InputMethodManager;->getInputMethodWindowVisibleHeight
Landroid/view/inputmethod/InputMethodManager;->getInstance()Landroid/view/inputmethod/InputMethodManager;
Landroid/view/inputmethod/InputMethodManager;->isCursorAnchorInfoEnabled()Z
Landroid/view/inputmethod/InputMethodManager;->mCurId:Ljava/lang/String;
+Landroid/view/inputmethod/InputMethodManager;->mCurMethod:Lcom/android/internal/view/IInputMethodSession;
Landroid/view/inputmethod/InputMethodManager;->mCurRootView:Landroid/view/View;
Landroid/view/inputmethod/InputMethodManager;->mCursorRect:Landroid/graphics/Rect;
Landroid/view/inputmethod/InputMethodManager;->mH:Landroid/view/inputmethod/InputMethodManager$H;
@@ -6527,6 +6530,7 @@ Landroid/view/ViewRootImpl;->mWidth:I
Landroid/view/ViewRootImpl;->mWindowSession:Landroid/view/IWindowSession;
Landroid/view/ViewRootImpl;->scheduleTraversals()V
Landroid/view/ViewRootImpl;->setLocalDragState(Ljava/lang/Object;)V
+Landroid/view/ViewRootImpl;->sRunQueues:Ljava/lang/ThreadLocal;
Landroid/view/ViewTreeObserver$InternalInsetsInfo;-><init>()V
Landroid/view/ViewTreeObserver$InternalInsetsInfo;->contentInsets:Landroid/graphics/Rect;
Landroid/view/ViewTreeObserver$InternalInsetsInfo;->mTouchableInsets:I
diff --git a/core/java/android/view/ViewGroup.java b/core/java/android/view/ViewGroup.java
index 65a612587827..baa38bb2f604 100644
--- a/core/java/android/view/ViewGroup.java
+++ b/core/java/android/view/ViewGroup.java
@@ -5060,9 +5060,9 @@ public abstract class ViewGroup extends View implements ViewParent, ViewManager
child.assignParent(this);
} else {
child.mParent = this;
- if (child.hasUnhandledKeyListener()) {
- incrementChildUnhandledKeyListeners();
- }
+ }
+ if (child.hasUnhandledKeyListener()) {
+ incrementChildUnhandledKeyListeners();
}
final boolean childHasFocus = child.hasFocus();
diff --git a/core/java/android/view/ViewRootImpl.java b/core/java/android/view/ViewRootImpl.java
index ed67075d38d6..48f380d87dcc 100644
--- a/core/java/android/view/ViewRootImpl.java
+++ b/core/java/android/view/ViewRootImpl.java
@@ -76,7 +76,6 @@ import android.util.LongArray;
import android.util.MergedConfiguration;
import android.util.Slog;
import android.util.SparseArray;
-import android.util.SparseBooleanArray;
import android.util.TimeUtils;
import android.util.TypedValue;
import android.view.Surface.OutOfResourcesException;
@@ -5008,10 +5007,7 @@ public final class ViewRootImpl implements ViewParent,
private int processKeyEvent(QueuedInputEvent q) {
final KeyEvent event = (KeyEvent)q.mEvent;
- mUnhandledKeyManager.mDispatched = false;
-
- if (mUnhandledKeyManager.hasFocus()
- && mUnhandledKeyManager.dispatchUnique(mView, event)) {
+ if (mUnhandledKeyManager.preViewDispatch(event)) {
return FINISH_HANDLED;
}
@@ -5024,7 +5020,10 @@ public final class ViewRootImpl implements ViewParent,
return FINISH_NOT_HANDLED;
}
- if (mUnhandledKeyManager.dispatchUnique(mView, event)) {
+ // This dispatch is for windows that don't have a Window.Callback. Otherwise,
+ // the Window.Callback usually will have already called this (see
+ // DecorView.superDispatchKeyEvent) leaving this call a no-op.
+ if (mUnhandledKeyManager.dispatch(mView, event)) {
return FINISH_HANDLED;
}
@@ -7062,6 +7061,10 @@ public final class ViewRootImpl implements ViewParent,
stage = q.shouldSkipIme() ? mFirstPostImeInputStage : mFirstInputStage;
}
+ if (q.mEvent instanceof KeyEvent) {
+ mUnhandledKeyManager.preDispatch((KeyEvent) q.mEvent);
+ }
+
if (stage != null) {
handleWindowFocusChanged();
stage.deliver(q);
@@ -7830,7 +7833,7 @@ public final class ViewRootImpl implements ViewParent,
* @param event
* @return {@code true} if the event was handled, {@code false} otherwise.
*/
- public boolean dispatchKeyFallbackEvent(KeyEvent event) {
+ public boolean dispatchUnhandledKeyEvent(KeyEvent event) {
return mUnhandledKeyManager.dispatch(mView, event);
}
@@ -8422,35 +8425,74 @@ public final class ViewRootImpl implements ViewParent,
}
private static class UnhandledKeyManager {
-
// This is used to ensure that unhandled events are only dispatched once. We attempt
// to dispatch more than once in order to achieve a certain order. Specifically, if we
// are in an Activity or Dialog (and have a Window.Callback), the unhandled events should
- // be dispatched after the view hierarchy, but before the Activity. However, if we aren't
+ // be dispatched after the view hierarchy, but before the Callback. However, if we aren't
// in an activity, we still want unhandled keys to be dispatched.
- boolean mDispatched = false;
+ private boolean mDispatched = true;
- SparseBooleanArray mCapturedKeys = new SparseBooleanArray();
- WeakReference<View> mCurrentReceiver = null;
+ // Keeps track of which Views have unhandled key focus for which keys. This doesn't
+ // include modifiers.
+ private final SparseArray<WeakReference<View>> mCapturedKeys = new SparseArray<>();
- private void updateCaptureState(KeyEvent event) {
- if (event.getAction() == KeyEvent.ACTION_DOWN) {
- mCapturedKeys.append(event.getKeyCode(), true);
+ // The current receiver. This value is transient and used between the pre-dispatch and
+ // pre-view phase to ensure that other input-stages don't interfere with tracking.
+ private WeakReference<View> mCurrentReceiver = null;
+
+ boolean dispatch(View root, KeyEvent event) {
+ if (mDispatched) {
+ return false;
}
- if (event.getAction() == KeyEvent.ACTION_UP) {
- mCapturedKeys.delete(event.getKeyCode());
+ View consumer;
+ try {
+ Trace.traceBegin(Trace.TRACE_TAG_VIEW, "UnhandledKeyEvent dispatch");
+ mDispatched = true;
+
+ consumer = root.dispatchUnhandledKeyEvent(event);
+
+ // If an unhandled listener handles one, then keep track of it so that the
+ // consuming view is first to receive its repeats and release as well.
+ if (event.getAction() == KeyEvent.ACTION_DOWN) {
+ int keycode = event.getKeyCode();
+ if (consumer != null && !KeyEvent.isModifierKey(keycode)) {
+ mCapturedKeys.put(keycode, new WeakReference<>(consumer));
+ }
+ }
+ } finally {
+ Trace.traceEnd(Trace.TRACE_TAG_VIEW);
}
+ return consumer != null;
}
- boolean dispatch(View root, KeyEvent event) {
- Trace.traceBegin(Trace.TRACE_TAG_VIEW, "KeyFallback dispatch");
- mDispatched = true;
-
- updateCaptureState(event);
+ /**
+ * Called before the event gets dispatched to anything
+ */
+ void preDispatch(KeyEvent event) {
+ // Always clean-up 'up' events since it's possible for earlier dispatch stages to
+ // consume them without consuming the corresponding 'down' event.
+ mCurrentReceiver = null;
+ if (event.getAction() == KeyEvent.ACTION_UP) {
+ int idx = mCapturedKeys.indexOfKey(event.getKeyCode());
+ if (idx >= 0) {
+ mCurrentReceiver = mCapturedKeys.valueAt(idx);
+ mCapturedKeys.removeAt(idx);
+ }
+ }
+ }
+ /**
+ * Called before the event gets dispatched to the view hierarchy
+ * @return {@code true} if an unhandled handler has focus and consumed the event
+ */
+ boolean preViewDispatch(KeyEvent event) {
+ mDispatched = false;
+ if (mCurrentReceiver == null) {
+ mCurrentReceiver = mCapturedKeys.get(event.getKeyCode());
+ }
if (mCurrentReceiver != null) {
View target = mCurrentReceiver.get();
- if (mCapturedKeys.size() == 0) {
+ if (event.getAction() == KeyEvent.ACTION_UP) {
mCurrentReceiver = null;
}
if (target != null && target.isAttachedToWindow()) {
@@ -8459,24 +8501,7 @@ public final class ViewRootImpl implements ViewParent,
// consume anyways so that we don't feed uncaptured key events to other views
return true;
}
-
- View consumer = root.dispatchUnhandledKeyEvent(event);
- if (consumer != null) {
- mCurrentReceiver = new WeakReference<>(consumer);
- }
- Trace.traceEnd(Trace.TRACE_TAG_VIEW);
- return consumer != null;
- }
-
- boolean hasFocus() {
- return mCurrentReceiver != null;
- }
-
- boolean dispatchUnique(View root, KeyEvent event) {
- if (mDispatched) {
- return false;
- }
- return dispatch(root, event);
+ return false;
}
}
}
diff --git a/core/java/com/android/internal/policy/DecorView.java b/core/java/com/android/internal/policy/DecorView.java
index 465957d7cfd0..6ad1d72eaec4 100644
--- a/core/java/com/android/internal/policy/DecorView.java
+++ b/core/java/com/android/internal/policy/DecorView.java
@@ -429,7 +429,7 @@ public class DecorView extends FrameLayout implements RootViewSurfaceTaker, Wind
return true;
}
- return (getViewRootImpl() != null) && getViewRootImpl().dispatchKeyFallbackEvent(event);
+ return (getViewRootImpl() != null) && getViewRootImpl().dispatchUnhandledKeyEvent(event);
}
public boolean superDispatchKeyShortcutEvent(KeyEvent event) {
diff --git a/media/java/android/media/MediaCodec.java b/media/java/android/media/MediaCodec.java
index 02bf4e343ea3..2207a2a6d4fe 100644
--- a/media/java/android/media/MediaCodec.java
+++ b/media/java/android/media/MediaCodec.java
@@ -2545,6 +2545,10 @@ final public class MediaCodec {
pattern = newPattern;
}
+ private void setPattern(int blocksToEncrypt, int blocksToSkip) {
+ pattern = new Pattern(blocksToEncrypt, blocksToSkip);
+ }
+
@Override
public String toString() {
StringBuilder builder = new StringBuilder();
diff --git a/media/jni/android_media_MediaExtractor.cpp b/media/jni/android_media_MediaExtractor.cpp
index a85552601b56..15957c6a9c5e 100644
--- a/media/jni/android_media_MediaExtractor.cpp
+++ b/media/jni/android_media_MediaExtractor.cpp
@@ -52,6 +52,7 @@ struct fields_t {
jfieldID context;
jmethodID cryptoInfoSetID;
+ jmethodID cryptoInfoSetPatternID;
};
static fields_t gFields;
@@ -654,6 +655,16 @@ static jboolean android_media_MediaExtractor_getSampleCryptoInfo(
ivObj,
mode);
+ int32_t encryptedByteBlock = 0, skipByteBlock = 0;
+ meta->findInt32(kKeyEncryptedByteBlock, &encryptedByteBlock);
+ meta->findInt32(kKeySkipByteBlock, &skipByteBlock);
+
+ env->CallVoidMethod(
+ cryptoInfoObj,
+ gFields.cryptoInfoSetPatternID,
+ encryptedByteBlock,
+ skipByteBlock);
+
return JNI_TRUE;
}
@@ -669,6 +680,9 @@ static void android_media_MediaExtractor_native_init(JNIEnv *env) {
gFields.cryptoInfoSetID =
env->GetMethodID(clazz, "set", "(I[I[I[B[BI)V");
+
+ gFields.cryptoInfoSetPatternID =
+ env->GetMethodID(clazz, "setPattern", "(II)V");
}
static void android_media_MediaExtractor_native_setup(
diff --git a/packages/SettingsLib/res/values-as/arrays.xml b/packages/SettingsLib/res/values-as/arrays.xml
index b8353eebd5a4..39c0b00f09ba 100644
--- a/packages/SettingsLib/res/values-as/arrays.xml
+++ b/packages/SettingsLib/res/values-as/arrays.xml
@@ -231,12 +231,12 @@
<item msgid="1064373276095698656">"পৰীক্ষণ কৰা চিত্ৰাংকণ কমাণ্ডবোৰ সেউজীয়া ৰঙত হাইলাইট কৰক"</item>
</string-array>
<string-array name="track_frame_time_entries">
- <item msgid="2193584639058893150">"অফ"</item>
+ <item msgid="2193584639058893150">"অফ হৈ আছে"</item>
<item msgid="2751513398307949636">"স্ক্ৰীণত দণ্ড হিচাপে"</item>
<item msgid="2355151170975410323">"<xliff:g id="AS_TYPED_COMMAND">adb shell dumpsys gfxinfo</xliff:g>ত"</item>
</string-array>
<string-array name="debug_hw_overdraw_entries">
- <item msgid="8190572633763871652">"বন্ধ কৰক"</item>
+ <item msgid="8190572633763871652">"অফ কৰক"</item>
<item msgid="7688197031296835369">"পিক্সেল একাধিকবাৰ ব্যৱহৃত অংশসমূহ দেখুৱাওক"</item>
<item msgid="2290859360633824369">"ডিউটাৰএন\'মেলীৰ অংশসমূহ দেখুৱাওক"</item>
</string-array>
diff --git a/packages/SettingsLib/res/values-as/strings.xml b/packages/SettingsLib/res/values-as/strings.xml
index 77932fd06440..da76337fe9a8 100644
--- a/packages/SettingsLib/res/values-as/strings.xml
+++ b/packages/SettingsLib/res/values-as/strings.xml
@@ -118,7 +118,7 @@
<string name="bluetooth_hearingaid_right_pairing_message" msgid="1550373802309160891">"সোঁফালৰ শ্ৰৱণ যন্ত্ৰটো যোৰ পতোৱা হৈছে…"</string>
<string name="bluetooth_hearingaid_left_battery_level" msgid="8797811465352097562">"<xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g> বেটাৰি বাকী আছে"</string>
<string name="bluetooth_hearingaid_right_battery_level" msgid="7309476148173459677">"সোঁ - বেটাৰি <xliff:g id="BATTERY_LEVEL_AS_PERCENTAGE">%1$s</xliff:g>"</string>
- <string name="accessibility_wifi_off" msgid="1166761729660614716">"ৱাই-ফাই অফহৈ আছে।"</string>
+ <string name="accessibility_wifi_off" msgid="1166761729660614716">"ৱাই-ফাই অফ হৈ আছে।"</string>
<string name="accessibility_no_wifi" msgid="8834610636137374508">"ৱাইফাই সংযোগ বিচ্ছিন্ন হৈ আছে।"</string>
<string name="accessibility_wifi_one_bar" msgid="4869376278894301820">"ৱাই-ফাই এদাল দণ্ড।"</string>
<string name="accessibility_wifi_two_bars" msgid="3569851234710034416">"ৱাই-ফাইৰ দুডাল দণ্ড।"</string>
@@ -133,7 +133,7 @@
<string name="tether_settings_title_wifi" msgid="3277144155960302049">"প\'ৰ্টেবল হ\'টস্প\'ট"</string>
<string name="tether_settings_title_bluetooth" msgid="355855408317564420">"ব্লুটুথ টেডাৰিং"</string>
<string name="tether_settings_title_usb_bluetooth" msgid="5355828977109785001">"টেডাৰ কৰি থকা হৈছে"</string>
- <string name="tether_settings_title_all" msgid="8356136101061143841">"টেদৰিং আৰু প\'ৰ্টেবল হ\'টস্পট"</string>
+ <string name="tether_settings_title_all" msgid="8356136101061143841">"টেডাৰিং আৰু প\'ৰ্টেবল হটস্পট"</string>
<string name="managed_user_title" msgid="8109605045406748842">"কৰ্মস্থানৰ সকলো এপ"</string>
<string name="user_guest" msgid="8475274842845401871">"অতিথি"</string>
<string name="unknown" msgid="1592123443519355854">"অজ্ঞাত"</string>
diff --git a/packages/SettingsLib/res/values-de/strings.xml b/packages/SettingsLib/res/values-de/strings.xml
index 135280a781b1..7fc5e4c4bd86 100644
--- a/packages/SettingsLib/res/values-de/strings.xml
+++ b/packages/SettingsLib/res/values-de/strings.xml
@@ -197,7 +197,7 @@
<string name="keep_screen_on" msgid="1146389631208760344">"Aktiv lassen"</string>
<string name="keep_screen_on_summary" msgid="2173114350754293009">"Display wird beim Laden nie in den Ruhezustand versetzt"</string>
<string name="bt_hci_snoop_log" msgid="3340699311158865670">"Bluetooth HCI-Snoop-Protokoll aktivieren"</string>
- <string name="bt_hci_snoop_log_summary" msgid="366083475849911315">"Alle Bluetooth HCI-Pakete in einer Datei erfassen (Wenn diese Einstellung geändert wurde, muss Bluetooth umgeschaltet werden)"</string>
+ <string name="bt_hci_snoop_log_summary" msgid="366083475849911315">"Alle Bluetooth HCI-Pakete in einer Datei erfassen. (Wenn diese Einstellung geändert wurde, muss Bluetooth aus- und wieder eingeschaltet werden.)"</string>
<string name="oem_unlock_enable" msgid="6040763321967327691">"OEM-Entsperrung"</string>
<string name="oem_unlock_enable_summary" msgid="4720281828891618376">"Bootloader-Entsperrung zulassen"</string>
<string name="confirm_enable_oem_unlock_title" msgid="4802157344812385674">"OEM-Entsperrung zulassen?"</string>
diff --git a/packages/SettingsLib/res/values-hi/strings.xml b/packages/SettingsLib/res/values-hi/strings.xml
index d7ee655d9592..9430345824fa 100644
--- a/packages/SettingsLib/res/values-hi/strings.xml
+++ b/packages/SettingsLib/res/values-hi/strings.xml
@@ -85,14 +85,14 @@
<string name="bluetooth_a2dp_profile_summary_connected" msgid="963376081347721598">"मीडिया ऑडियो से कनेक्‍ट किया गया"</string>
<string name="bluetooth_headset_profile_summary_connected" msgid="7661070206715520671">"फ़ोन ऑडियो से कनेक्‍ट किया गया"</string>
<string name="bluetooth_opp_profile_summary_connected" msgid="2611913495968309066">"फ़ाइल स्‍थानांतरण सर्वर से कनेक्‍ट किया गया"</string>
- <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"मानचित्र से कनेक्ट किया गया"</string>
+ <string name="bluetooth_map_profile_summary_connected" msgid="8191407438851351713">"मैप से कनेक्ट किया गया"</string>
<string name="bluetooth_sap_profile_summary_connected" msgid="8561765057453083838">"SAP से कनेक्ट किया गया"</string>
<string name="bluetooth_opp_profile_summary_not_connected" msgid="1267091356089086285">"फ़ाइल स्‍थानांतरण सर्वर से कनेक्‍ट नहीं किया गया"</string>
<string name="bluetooth_hid_profile_summary_connected" msgid="3381760054215168689">"इनपुट डिवाइस से कनेक्‍ट किया गया"</string>
<string name="bluetooth_pan_user_profile_summary_connected" msgid="6436258151814414028">"इंटरनेट के लिए डिवाइस से कनेक्ट है"</string>
<string name="bluetooth_pan_nap_profile_summary_connected" msgid="1322694224800769308">"डिवाइस से इंटरनेट शेयर हो रहा है"</string>
<string name="bluetooth_pan_profile_summary_use_for" msgid="5736111170225304239">"इंटरनेट से जुड़ने के लिए इस्तेमाल करें"</string>
- <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"मानचित्र के लिए उपयोग करें"</string>
+ <string name="bluetooth_map_profile_summary_use_for" msgid="5154200119919927434">"मैप के लिए उपयोग करें"</string>
<string name="bluetooth_sap_profile_summary_use_for" msgid="7085362712786907993">"सिम ऐक्सेस के लिए उपयोग करें"</string>
<string name="bluetooth_a2dp_profile_summary_use_for" msgid="4630849022250168427">"मीडिया ऑडियो के लिए उपयोग करें"</string>
<string name="bluetooth_headset_profile_summary_use_for" msgid="8705753622443862627">"फ़ोन ऑडियो के लिए उपयोग करें"</string>
diff --git a/packages/SettingsLib/res/values-mr/strings.xml b/packages/SettingsLib/res/values-mr/strings.xml
index 02e245f5ee43..514a55f18ba6 100644
--- a/packages/SettingsLib/res/values-mr/strings.xml
+++ b/packages/SettingsLib/res/values-mr/strings.xml
@@ -240,10 +240,10 @@
<string name="wifi_unmetered_label" msgid="6124098729457992931">"मीटरने न मोजलेले"</string>
<string name="select_logd_size_title" msgid="7433137108348553508">"लॉगर बफर आकार"</string>
<string name="select_logd_size_dialog_title" msgid="1206769310236476760">"प्रति लॉग बफर लॉगर आकार निवडा"</string>
- <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"लॉगरवर सतत असणारा संचय साफ करायचा?"</string>
+ <string name="dev_logpersist_clear_warning_title" msgid="684806692440237967">"लॉगरवर सतत असणारा स्टोरेज साफ करायचा?"</string>
<string name="dev_logpersist_clear_warning_message" msgid="2256582531342994562">"सातत्याच्या लॉगरसह आम्ही परीक्षण करीत नसतो तेव्हा, आम्हाला आपल्या डिव्हाइसवर असणारा लॉगर डेटा मिटविणे आवश्यक असते."</string>
<string name="select_logpersist_title" msgid="7530031344550073166">"डिव्हाइसवर सातत्याने लॉगर डेटा स्टोअर करा"</string>
- <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"डिव्हाइसवर सातत्याने संचयित करण्यासाठी लॉग बफर निवडा"</string>
+ <string name="select_logpersist_dialog_title" msgid="4003400579973269060">"डिव्हाइसवर सातत्याने स्टोअर करण्यासाठी लॉग बफर निवडा"</string>
<string name="select_usb_configuration_title" msgid="2649938511506971843">"USB कॉन्‍फिगरेशन निवडा"</string>
<string name="select_usb_configuration_dialog_title" msgid="6385564442851599963">"USB कॉन्‍फिगरेशन निवडा"</string>
<string name="allow_mock_location" msgid="2787962564578664888">"बनावट स्थानांना अनुमती द्या"</string>
@@ -426,7 +426,7 @@
<string name="use_system_language_to_select_input_method_subtypes" msgid="5747329075020379587">"सिस्टम भाषा वापरा"</string>
<string name="failed_to_open_app_settings_toast" msgid="1251067459298072462">"<xliff:g id="SPELL_APPLICATION_NAME">%1$s</xliff:g> साठी सेटिंग्ज उघडण्यात अयशस्वी"</string>
<string name="ime_security_warning" msgid="4135828934735934248">"ही इनपुट पद्धत पासवर्ड आणि क्रेडिट कार्ड नंबर यासह, तुम्ही टाइप करता तो सर्व मजकूर संकलित करण्यात सक्षम होऊ शकते. ही <xliff:g id="IME_APPLICATION_NAME">%1$s</xliff:g> अॅपवरून येते. ही इनपुट पद्धत वापरायची?"</string>
- <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"टीप: रीबूट केल्यानंतर, तुम्ही आपला फोन अनलॉक करे पर्यंत हे अॅप सुरू होऊ शकत नाही"</string>
+ <string name="direct_boot_unaware_dialog_message" msgid="7870273558547549125">"टीप: रीबूट केल्यानंतर, तुम्ही तुमचा फोन अनलॉक करे पर्यंत हे अॅप सुरू होऊ शकत नाही"</string>
<string name="ims_reg_title" msgid="7609782759207241443">"IMS नोंदणी स्थिती"</string>
<string name="ims_reg_status_registered" msgid="933003316932739188">"नोंदवलेले"</string>
<string name="ims_reg_status_not_registered" msgid="6529783773485229486">"नोंदवलेले नाही"</string>
diff --git a/packages/SettingsLib/res/values-sw/arrays.xml b/packages/SettingsLib/res/values-sw/arrays.xml
index d77c92dce75c..f13c2ea5b239 100644
--- a/packages/SettingsLib/res/values-sw/arrays.xml
+++ b/packages/SettingsLib/res/values-sw/arrays.xml
@@ -59,7 +59,7 @@
<item msgid="45075631231212732">"Kila wakati tumia ukakuaji wa HDCP"</item>
</string-array>
<string-array name="bluetooth_avrcp_versions">
- <item msgid="5347678900838034763">"AVRCP 1.4 (Chaguo-msingi)"</item>
+ <item msgid="5347678900838034763">"AVRCP 1.4 (Chaguo msingi)"</item>
<item msgid="2809759619990248160">"AVRCP 1.3"</item>
<item msgid="6199178154704729352">"AVRCP 1.5"</item>
<item msgid="5172170854953034852">"AVRCP 1.6"</item>
@@ -71,7 +71,7 @@
<item msgid="3422726142222090896">"avrcp16"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_titles">
- <item msgid="7065842274271279580">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
+ <item msgid="7065842274271279580">"Tumia Uteuzi wa Mfumo (Chaguo msingi)"</item>
<item msgid="7539690996561263909">"SBC"</item>
<item msgid="686685526567131661">"AAC"</item>
<item msgid="5254942598247222737">"Sauti ya <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
@@ -81,7 +81,7 @@
<item msgid="3304843301758635896">"Zima Kodeki Zisizo za Lazima"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_summaries">
- <item msgid="5062108632402595000">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
+ <item msgid="5062108632402595000">"Tumia Uteuzi wa Mfumo (Chaguo msingi)"</item>
<item msgid="6898329690939802290">"SBC"</item>
<item msgid="6839647709301342559">"AAC"</item>
<item msgid="7848030269621918608">"Sauti ya <xliff:g id="QUALCOMM">Qualcomm®</xliff:g> <xliff:g id="APTX">aptX™</xliff:g>"</item>
@@ -91,38 +91,38 @@
<item msgid="741805482892725657">"Zima Kodeki Zisizo za Lazima"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_sample_rate_titles">
- <item msgid="3093023430402746802">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
+ <item msgid="3093023430402746802">"Tumia Uteuzi wa Mfumo (Chaguo msingi)"</item>
<item msgid="8895532488906185219">"kHz 44.1"</item>
<item msgid="2909915718994807056">"kHz 48.0"</item>
<item msgid="3347287377354164611">"kHz 88.2"</item>
<item msgid="1234212100239985373">"kHz 96.0"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_sample_rate_summaries">
- <item msgid="3214516120190965356">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
+ <item msgid="3214516120190965356">"Tumia Uteuzi wa Mfumo (Chaguo msingi)"</item>
<item msgid="4482862757811638365">"kHz 44.1"</item>
<item msgid="354495328188724404">"kHz 48.0"</item>
<item msgid="7329816882213695083">"kHz 88.2"</item>
<item msgid="6967397666254430476">"kHz 96.0"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_bits_per_sample_titles">
- <item msgid="2684127272582591429">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
+ <item msgid="2684127272582591429">"Tumia Uteuzi wa Mfumo (Chaguo msingi)"</item>
<item msgid="5618929009984956469">"Biti 16 kwa kila sampuli"</item>
<item msgid="3412640499234627248">"Biti 24 kwa kila sampuli"</item>
<item msgid="121583001492929387">"Biti 32 kwa kila sampuli"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_bits_per_sample_summaries">
- <item msgid="1081159789834584363">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
+ <item msgid="1081159789834584363">"Tumia Uteuzi wa Mfumo (Chaguo msingi)"</item>
<item msgid="4726688794884191540">"Biti 16 kwa kila sampuli"</item>
<item msgid="305344756485516870">"Biti 24 kwa kila sampuli"</item>
<item msgid="244568657919675099">"Biti 32 kwa kila sampuli"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_channel_mode_titles">
- <item msgid="5226878858503393706">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
+ <item msgid="5226878858503393706">"Tumia Uteuzi wa Mfumo (Chaguo msingi)"</item>
<item msgid="4106832974775067314">"Mono"</item>
<item msgid="5571632958424639155">"Stereo"</item>
</string-array>
<string-array name="bluetooth_a2dp_codec_channel_mode_summaries">
- <item msgid="4118561796005528173">"Tumia Uteuzi wa Mfumo (Chaguo-msingi)"</item>
+ <item msgid="4118561796005528173">"Tumia Uteuzi wa Mfumo (Chaguo msingi)"</item>
<item msgid="8900559293912978337">"Mono"</item>
<item msgid="8883739882299884241">"Stereo"</item>
</string-array>
diff --git a/packages/SettingsLib/res/values-sw/strings.xml b/packages/SettingsLib/res/values-sw/strings.xml
index 70dc27632f75..6d5916b36fc2 100644
--- a/packages/SettingsLib/res/values-sw/strings.xml
+++ b/packages/SettingsLib/res/values-sw/strings.xml
@@ -138,7 +138,7 @@
<string name="user_guest" msgid="8475274842845401871">"Aliyealikwa"</string>
<string name="unknown" msgid="1592123443519355854">"Haijulikani"</string>
<string name="running_process_item_user_label" msgid="3129887865552025943">"Mtumiaji: <xliff:g id="USER_NAME">%1$s</xliff:g>"</string>
- <string name="launch_defaults_some" msgid="313159469856372621">"Baadhi ya chaguo-msingi zimewekwa"</string>
+ <string name="launch_defaults_some" msgid="313159469856372621">"Baadhi ya chaguo msingi zimewekwa"</string>
<string name="launch_defaults_none" msgid="4241129108140034876">"Hakuna chaguo-misingi zilizowekwa"</string>
<string name="tts_settings" msgid="8186971894801348327">"Mipangilio ya kusoma maandishi kwa sauti"</string>
<string name="tts_settings_title" msgid="1237820681016639683">"Kusoma maandishi kwa sauti"</string>
@@ -157,7 +157,7 @@
<string name="tts_engine_security_warning" msgid="8786238102020223650">"Hotuba hii inawezesha injini huenda ikaweza kukusanya maandishi ambayo yatazungumziwa, ikijumlisha data ya kibinafsi ya nenosiri na namba ya kaddi ya mkopo. Inatoka kwa injini ya <xliff:g id="TTS_PLUGIN_ENGINE_NAME">%s</xliff:g> Wezesha matumizi ya hotuba hii iliyowezeshwa ya injini?"</string>
<string name="tts_engine_network_required" msgid="1190837151485314743">"Lugha hii inahitaji muunganisho wa mtandao unaofanya kazi ili kipengele cha kusoma maandishi kwa sauti kifanye kazi."</string>
<string name="tts_default_sample_string" msgid="4040835213373086322">"Huu ni mfano wa usanisi usemaji"</string>
- <string name="tts_status_title" msgid="7268566550242584413">"Hali ya lugha chaguo-msingi"</string>
+ <string name="tts_status_title" msgid="7268566550242584413">"Hali ya lugha chaguo msingi"</string>
<string name="tts_status_ok" msgid="1309762510278029765">"<xliff:g id="LOCALE">%1$s</xliff:g> inaweza kutumiwa kikamilifu"</string>
<string name="tts_status_requires_network" msgid="6042500821503226892">"<xliff:g id="LOCALE">%1$s</xliff:g> inahitaji muunganisho wa mtandao"</string>
<string name="tts_status_not_supported" msgid="4491154212762472495">"<xliff:g id="LOCALE">%1$s</xliff:g> haiwezi kutumiwa"</string>
@@ -167,7 +167,7 @@
<string name="tts_engine_preference_section_title" msgid="448294500990971413">"Injini inayofaa"</string>
<string name="tts_general_section_title" msgid="4402572014604490502">"Kwa ujumla"</string>
<string name="tts_reset_speech_pitch_title" msgid="5789394019544785915">"Weka upya mipangilio ya ubora wa matamshi"</string>
- <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"Rejesha mipangilio ya ubora wa matamshi kuwa ya chaguo-msingi."</string>
+ <string name="tts_reset_speech_pitch_summary" msgid="8700539616245004418">"Rejesha mipangilio ya ubora wa matamshi kuwa ya chaguo msingi."</string>
<string-array name="tts_rate_entries">
<item msgid="6695494874362656215">"Polepole sana"</item>
<item msgid="4795095314303559268">"Polepole"</item>
@@ -333,7 +333,7 @@
<string name="local_backup_password_toast_confirmation_mismatch" msgid="7805892532752708288">"Nenosiri jipya na uthibitisho havioani"</string>
<string name="local_backup_password_toast_validation_failure" msgid="5646377234895626531">"Imeshindwa kuweka nenosiri la hifadhi rudufu"</string>
<string-array name="color_mode_names">
- <item msgid="2425514299220523812">"Maridadi (chaguo-msingi)"</item>
+ <item msgid="2425514299220523812">"Maridadi (chaguo msingi)"</item>
<item msgid="8446070607501413455">"Asili"</item>
<item msgid="6553408765810699025">"Muundo-msingi"</item>
</string-array>
@@ -412,7 +412,7 @@
<string name="charge_length_format" msgid="8978516217024434156">"<xliff:g id="ID_1">%1$s</xliff:g> zilizopita"</string>
<string name="remaining_length_format" msgid="7886337596669190587">"Zimesalia <xliff:g id="ID_1">%1$s</xliff:g>"</string>
<string name="screen_zoom_summary_small" msgid="5867245310241621570">"Ndogo"</string>
- <string name="screen_zoom_summary_default" msgid="2247006805614056507">"Chaguo-msingi"</string>
+ <string name="screen_zoom_summary_default" msgid="2247006805614056507">"Chaguo msingi"</string>
<string name="screen_zoom_summary_large" msgid="4835294730065424084">"Kubwa"</string>
<string name="screen_zoom_summary_very_large" msgid="7108563375663670067">"Kubwa kiasi"</string>
<string name="screen_zoom_summary_extremely_large" msgid="7427320168263276227">"Kubwa zaidi"</string>
diff --git a/packages/SystemUI/src/com/android/systemui/OverviewProxyService.java b/packages/SystemUI/src/com/android/systemui/OverviewProxyService.java
index 42bd66ae4a90..9fc71c813d74 100644
--- a/packages/SystemUI/src/com/android/systemui/OverviewProxyService.java
+++ b/packages/SystemUI/src/com/android/systemui/OverviewProxyService.java
@@ -166,9 +166,7 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis
long token = Binder.clearCallingIdentity();
try {
mHandler.post(() -> {
- for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) {
- mConnectionCallbacks.get(i).onBackButtonAlphaChanged(alpha, animate);
- }
+ notifyBackButtonAlphaChanged(alpha, animate);
});
} finally {
Binder.restoreCallingIdentity(token);
@@ -355,10 +353,17 @@ public class OverviewProxyService implements CallbackController<OverviewProxyLis
mOverviewProxy.asBinder().unlinkToDeath(mOverviewServiceDeathRcpt, 0);
mContext.unbindService(mOverviewServiceConnection);
mOverviewProxy = null;
+ notifyBackButtonAlphaChanged(1f, false /* animate */);
notifyConnectionChanged();
}
}
+ private void notifyBackButtonAlphaChanged(float alpha, boolean animate) {
+ for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) {
+ mConnectionCallbacks.get(i).onBackButtonAlphaChanged(alpha, animate);
+ }
+ }
+
private void notifyConnectionChanged() {
for (int i = mConnectionCallbacks.size() - 1; i >= 0; --i) {
mConnectionCallbacks.get(i).onConnectionChanged(mOverviewProxy != null);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
index f30fa6bd4b93..d647e21888dd 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableNotificationRow.java
@@ -710,6 +710,8 @@ public class ExpandableNotificationRow extends ActivatableNotificationView
updateClickAndFocus();
if (mNotificationParent != null) {
setOverrideTintColor(NO_COLOR, 0.0f);
+ // Let's reset the distance to top roundness, as this isn't applied to group children
+ setDistanceToTopRoundness(NO_ROUNDNESS);
mNotificationParent.updateBackgroundForGroupState();
}
updateIconVisibilities();
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
index 29c3ebdae326..ae8d84450404 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/ExpandableView.java
@@ -36,6 +36,7 @@ import java.util.ArrayList;
*/
public abstract class ExpandableView extends FrameLayout {
+ public static final float NO_ROUNDNESS = -1;
protected OnHeightChangedListener mOnHeightChangedListener;
private int mActualHeight;
protected int mClipTopAmount;
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java
index 9f82bcf5bfe8..39485c3c8800 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/HeadsUpStatusBarView.java
@@ -22,6 +22,7 @@ import android.content.res.Resources;
import android.graphics.Point;
import android.graphics.Rect;
import android.util.AttributeSet;
+import android.view.Display;
import android.view.DisplayCutout;
import android.view.View;
import android.widget.TextView;
@@ -31,6 +32,8 @@ import com.android.keyguard.AlphaOptimizedLinearLayout;
import com.android.systemui.R;
import com.android.systemui.statusbar.policy.DarkIconDispatcher;
+import java.util.List;
+
/**
* The view in the statusBar that contains part of the heads-up information
*/
@@ -48,8 +51,9 @@ public class HeadsUpStatusBarView extends AlphaOptimizedLinearLayout {
private View mRootView;
private int mSysWinInset;
private int mCutOutInset;
+ private List<Rect> mCutOutBounds;
private Rect mIconDrawingRect = new Rect();
- private Point mPoint;
+ private Point mDisplaySize;
private Runnable mOnDrawingRectChangedListener;
public HeadsUpStatusBarView(Context context) {
@@ -141,16 +145,19 @@ public class HeadsUpStatusBarView extends AlphaOptimizedLinearLayout {
mLayoutedIconRect.set(left, top, right, bottom);
updateDrawingRect();
int targetPadding = mAbsoluteStartPadding + mSysWinInset + mCutOutInset;
- if (left != targetPadding) {
- int start;
- if (isLayoutRtl()) {
- if (mPoint == null) {
- mPoint = new Point();
+ boolean isRtl = isLayoutRtl();
+ int start = isRtl ? (mDisplaySize.x - right) : left;
+
+ if (start != targetPadding) {
+ if (mCutOutBounds != null) {
+ for (Rect cutOutRect : mCutOutBounds) {
+ int cutOutStart = (isRtl)
+ ? (mDisplaySize.x - cutOutRect.right) : cutOutRect.left;
+ if (start > cutOutStart) {
+ start -= cutOutRect.width();
+ break;
+ }
}
- getDisplay().getRealSize(mPoint);
- start = (mPoint.x - right);
- } else {
- start = left;
}
int newPadding = targetPadding - start + getPaddingStart();
@@ -165,6 +172,11 @@ public class HeadsUpStatusBarView extends AlphaOptimizedLinearLayout {
}
}
+ /** In order to do UI alignment, this view will be notified by
+ * {@link com.android.systemui.statusbar.stack.NotificationStackScrollLayout}.
+ * After scroller laid out, the scroller will tell this view about scroller's getX()
+ * @param translationX how to translate the horizontal position
+ */
public void setPanelTranslation(float translationX) {
if (isLayoutRtl()) {
setTranslationX(translationX + mCutOutInset);
@@ -191,6 +203,15 @@ public class HeadsUpStatusBarView extends AlphaOptimizedLinearLayout {
mCutOutInset = (displayCutout != null)
? (isRtl ? displayCutout.getSafeInsetRight() : displayCutout.getSafeInsetLeft())
: 0;
+
+ getDisplaySize();
+
+ mCutOutBounds = null;
+ if (displayCutout != null && displayCutout.getSafeInsetRight() == 0
+ && displayCutout.getSafeInsetLeft() == 0) {
+ mCutOutBounds = displayCutout.getBoundingRects();
+ }
+
// For Double Cut Out mode, the System window navigation bar is at the right
// side of the left cut out. In this condition, mSysWinInset include the left cut
// out width so we set mCutOutInset to be 0. For RTL, the condition is the same.
@@ -222,4 +243,17 @@ public class HeadsUpStatusBarView extends AlphaOptimizedLinearLayout {
public void setOnDrawingRectChangedListener(Runnable onDrawingRectChangedListener) {
mOnDrawingRectChangedListener = onDrawingRectChangedListener;
}
+
+ private void getDisplaySize() {
+ if (mDisplaySize == null) {
+ mDisplaySize = new Point();
+ }
+ getDisplay().getRealSize(mDisplaySize);
+ }
+
+ @Override
+ protected void onAttachedToWindow() {
+ super.onAttachedToWindow();
+ getDisplaySize();
+ }
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
index b52e3246f5db..409a78391975 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/HeadsUpAppearanceController.java
@@ -148,7 +148,6 @@ public class HeadsUpAppearanceController implements OnHeadsUpChangedListener,
* @return the translation X value for RTL. In theory, it should be negative. i.e. -Y
*/
private int getRtlTranslation() {
- // TODO: Corner Cut Out still need to handle.
if (mPoint == null) {
mPoint = new Point();
}
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
index 804fd4161500..9c26c69045d5 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/stack/NotificationStackScrollLayout.java
@@ -776,7 +776,8 @@ public class NotificationStackScrollLayout extends ViewGroup
boolean clip = clipStart > start && clipStart < end
|| clipEnd >= start && clipEnd <= end;
clip &= !(first && mOwnScrollY == 0);
- child.setDistanceToTopRoundness(clip ? Math.max(start - clipStart, 0) : -1);
+ child.setDistanceToTopRoundness(clip ? Math.max(start - clipStart, 0)
+ : ExpandableView.NO_ROUNDNESS);
first = false;
}
}
diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java
index c3f504f6c6ed..2d2c4cd6875e 100644
--- a/services/core/java/com/android/server/ConnectivityService.java
+++ b/services/core/java/com/android/server/ConnectivityService.java
@@ -4868,7 +4868,12 @@ public class ConnectivityService extends IConnectivityManager.Stub
*/
private NetworkCapabilities mixInCapabilities(NetworkAgentInfo nai, NetworkCapabilities nc) {
// Once a NetworkAgent is connected, complain if some immutable capabilities are removed.
+ // Don't complain for VPNs since they're not driven by requests and there is no risk of
+ // causing a connect/teardown loop.
+ // TODO: remove this altogether and make it the responsibility of the NetworkFactories to
+ // avoid connect/teardown loops.
if (nai.everConnected &&
+ !nai.isVPN() &&
!nai.networkCapabilities.satisfiedByImmutableNetworkCapabilities(nc)) {
// TODO: consider not complaining when a network agent degrades its capabilities if this
// does not cause any request (that is not a listen) currently matching that agent to
diff --git a/services/core/java/com/android/server/audio/AudioService.java b/services/core/java/com/android/server/audio/AudioService.java
index 92310b92d932..3fd69ee5645c 100644
--- a/services/core/java/com/android/server/audio/AudioService.java
+++ b/services/core/java/com/android/server/audio/AudioService.java
@@ -215,6 +215,10 @@ public class AudioService extends IAudioService.Stub
return mPlatformType == AudioSystem.PLATFORM_TELEVISION;
}
+ private boolean isPlatformAutomotive() {
+ return mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_AUTOMOTIVE);
+ }
+
/** The controller for the volume UI. */
private final VolumeController mVolumeController = new VolumeController();
@@ -2367,8 +2371,11 @@ public class AudioService extends IAudioService.Stub
if (DEBUG_VOL) {
Log.d(TAG, String.format("Master mute %s, %d, user=%d", mute, flags, userId));
}
- if (mUseFixedVolume) {
- return; // If using fixed volume, we don't mute.
+ if (!isPlatformAutomotive() && mUseFixedVolume) {
+ // If using fixed volume, we don't mute.
+ // TODO: remove the isPlatformAutomotive check here.
+ // The isPlatformAutomotive check is added for safety but may not be necessary.
+ return;
}
if (getCurrentUserId() == userId) {
if (mute != AudioSystem.getMasterMute()) {