diff options
14 files changed, 197 insertions, 17 deletions
diff --git a/core/java/android/service/autofill/augmented/FillCallback.java b/core/java/android/service/autofill/augmented/FillCallback.java index 21738d80f2d3..8ba5c173890c 100644 --- a/core/java/android/service/autofill/augmented/FillCallback.java +++ b/core/java/android/service/autofill/augmented/FillCallback.java @@ -62,9 +62,10 @@ public final class FillCallback { List<Dataset> inlineSuggestions = response.getInlineSuggestions(); Bundle clientState = response.getClientState(); + // We need to report result regardless of whether inline suggestions are returned or not. + mProxy.reportResult(inlineSuggestions, clientState); if (inlineSuggestions != null && !inlineSuggestions.isEmpty()) { mProxy.logEvent(AutofillProxy.REPORT_EVENT_INLINE_RESPONSE); - mProxy.reportResult(inlineSuggestions, clientState); return; } diff --git a/packages/SettingsLib/res/values-ar/strings.xml b/packages/SettingsLib/res/values-ar/strings.xml index 2b51b54a2fe3..69f7fb086b64 100644 --- a/packages/SettingsLib/res/values-ar/strings.xml +++ b/packages/SettingsLib/res/values-ar/strings.xml @@ -557,5 +557,5 @@ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"غير مفعّل"</string> <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"مفعّل"</string> <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"يجب إعادة تشغيل جهازك ليتم تطبيق هذا التغيير. يمكنك إعادة التشغيل الآن أو إلغاء التغيير."</string> - <string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"سمّاعة رأس سلكية"</string> + <string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"سمّاعة سلكية"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rAU/strings.xml b/packages/SettingsLib/res/values-en-rAU/strings.xml index 0ef8e0677d6d..0def17e1c21a 100644 --- a/packages/SettingsLib/res/values-en-rAU/strings.xml +++ b/packages/SettingsLib/res/values-en-rAU/strings.xml @@ -553,5 +553,5 @@ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string> <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string> <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string> - <string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired headphone"</string> + <string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired headphones"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rCA/strings.xml b/packages/SettingsLib/res/values-en-rCA/strings.xml index 0ef8e0677d6d..0def17e1c21a 100644 --- a/packages/SettingsLib/res/values-en-rCA/strings.xml +++ b/packages/SettingsLib/res/values-en-rCA/strings.xml @@ -553,5 +553,5 @@ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string> <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string> <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string> - <string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired headphone"</string> + <string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired headphones"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rGB/strings.xml b/packages/SettingsLib/res/values-en-rGB/strings.xml index 0ef8e0677d6d..0def17e1c21a 100644 --- a/packages/SettingsLib/res/values-en-rGB/strings.xml +++ b/packages/SettingsLib/res/values-en-rGB/strings.xml @@ -553,5 +553,5 @@ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string> <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string> <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string> - <string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired headphone"</string> + <string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired headphones"</string> </resources> diff --git a/packages/SettingsLib/res/values-en-rIN/strings.xml b/packages/SettingsLib/res/values-en-rIN/strings.xml index 0ef8e0677d6d..0def17e1c21a 100644 --- a/packages/SettingsLib/res/values-en-rIN/strings.xml +++ b/packages/SettingsLib/res/values-en-rIN/strings.xml @@ -553,5 +553,5 @@ <string name="cached_apps_freezer_disabled" msgid="4816382260660472042">"Disabled"</string> <string name="cached_apps_freezer_enabled" msgid="8866703500183051546">"Enabled"</string> <string name="cached_apps_freezer_reboot_dialog_text" msgid="695330563489230096">"Your device must be rebooted for this change to apply. Reboot now or cancel."</string> - <string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired headphone"</string> + <string name="media_transfer_wired_usb_device_name" msgid="7699141088423210903">"Wired headphones"</string> </resources> diff --git a/packages/SettingsLib/res/values-it/strings.xml b/packages/SettingsLib/res/values-it/strings.xml index efc186aa24bb..24711ff92d05 100644 --- a/packages/SettingsLib/res/values-it/strings.xml +++ b/packages/SettingsLib/res/values-it/strings.xml @@ -64,10 +64,10 @@ <string name="wifi_passpoint_expired" msgid="6540867261754427561">"Scaduta"</string> <string name="preference_summary_default_combination" msgid="2644094566845577901">"<xliff:g id="STATE">%1$s</xliff:g>/<xliff:g id="DESCRIPTION">%2$s</xliff:g>"</string> <string name="bluetooth_disconnected" msgid="7739366554710388701">"Disconnesso"</string> - <string name="bluetooth_disconnecting" msgid="7638892134401574338">"Disconnessione..."</string> - <string name="bluetooth_connecting" msgid="5871702668260192755">"Connessione..."</string> + <string name="bluetooth_disconnecting" msgid="7638892134401574338">"Disconnessione…"</string> + <string name="bluetooth_connecting" msgid="5871702668260192755">"Connessione…"</string> <string name="bluetooth_connected" msgid="8065345572198502293">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connesso"</string> - <string name="bluetooth_pairing" msgid="4269046942588193600">"Accoppiamento..."</string> + <string name="bluetooth_pairing" msgid="4269046942588193600">"Accoppiamento…"</string> <string name="bluetooth_connected_no_headset" msgid="2224101138659967604">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connesso (telefono escluso)"</string> <string name="bluetooth_connected_no_a2dp" msgid="8566874395813947092">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connesso (contenuti multimediali esclusi)"</string> <string name="bluetooth_connected_no_map" msgid="3381860077002724689">"<xliff:g id="ACTIVE_DEVICE">%1$s</xliff:g> connesso (nessun accesso ai messaggi)"</string> @@ -406,11 +406,11 @@ <string name="select_webview_provider_dialog_title" msgid="2444261109877277714">"Imposta l\'implementazione di WebView"</string> <string name="select_webview_provider_toast_text" msgid="8512254949169359848">"La selezione non è più valida. Riprova."</string> <string name="convert_to_file_encryption" msgid="2828976934129751818">"Converti in crittografia basata su file"</string> - <string name="convert_to_file_encryption_enabled" msgid="840757431284311754">"Converti..."</string> + <string name="convert_to_file_encryption_enabled" msgid="840757431284311754">"Converti…"</string> <string name="convert_to_file_encryption_done" msgid="8965831011811180627">"Crittografia su base file già eseguita"</string> <string name="title_convert_fbe" msgid="5780013350366495149">"Conversione in crittografia basata su file"</string> - <string name="convert_to_fbe_warning" msgid="34294381569282109">"Converti la partizione di dati in crittografia basata su file.\n Attenzione. Questa operazione eliminerà tutti i tuoi dati.\n Questa funzione è in versione alpha, pertanto potrebbe non funzionare correttamente.\n Premi \"Cancella e converti...\" per continuare."</string> - <string name="button_convert_fbe" msgid="1159861795137727671">"Cancella e converti..."</string> + <string name="convert_to_fbe_warning" msgid="34294381569282109">"Converti la partizione di dati in crittografia basata su file.\n Attenzione. Questa operazione eliminerà tutti i tuoi dati.\n Questa funzione è in versione alpha, pertanto potrebbe non funzionare correttamente.\n Premi \"Cancella e converti…\" per continuare."</string> + <string name="button_convert_fbe" msgid="1159861795137727671">"Cancella e converti…"</string> <string name="picture_color_mode" msgid="1013807330552931903">"Modalità colori immagini"</string> <string name="picture_color_mode_desc" msgid="151780973768136200">"Use sRGB"</string> <string name="daltonizer_mode_disabled" msgid="403424372812399228">"Disattivato"</string> diff --git a/packages/SettingsLib/res/values-vi/strings.xml b/packages/SettingsLib/res/values-vi/strings.xml index b501c656a680..7e1b476b7a0c 100644 --- a/packages/SettingsLib/res/values-vi/strings.xml +++ b/packages/SettingsLib/res/values-vi/strings.xml @@ -195,7 +195,7 @@ </string-array> <string name="choose_profile" msgid="343803890897657450">"Chọn hồ sơ"</string> <string name="category_personal" msgid="6236798763159385225">"Cá nhân"</string> - <string name="category_work" msgid="4014193632325996115">"Cơ quan"</string> + <string name="category_work" msgid="4014193632325996115">"Công việc"</string> <string name="development_settings_title" msgid="140296922921597393">"Tùy chọn cho nhà phát triển"</string> <string name="development_settings_enable" msgid="4285094651288242183">"Bật tùy chọn nhà phát triển"</string> <string name="development_settings_summary" msgid="8718917813868735095">"Đặt tùy chọn cho phát triển ứng dụng"</string> diff --git a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java index b4f8cb290fb1..2affe0605d89 100644 --- a/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java +++ b/packages/SystemUI/src/com/android/systemui/bubbles/BubbleController.java @@ -1166,7 +1166,7 @@ public class BubbleController implements ConfigurationController.ConfigurationLi if (b.getEntry() != null) { // Updating the entry to be a bubble will trigger our normal update flow setIsBubble(b.getEntry(), isBubble, b.shouldAutoExpand()); - } else { + } else if (isBubble) { // If we have no entry to update, it's a persisted bubble so // we need to add it to the stack ourselves Bubble bubble = mBubbleData.getOrCreateBubble(null, b /* persistedBubble */); diff --git a/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java b/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java index 91f032d86a94..28bcf3a35117 100644 --- a/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java +++ b/packages/SystemUI/src/com/android/systemui/dagger/DefaultActivityBinder.java @@ -24,6 +24,8 @@ import com.android.systemui.keyguard.WorkLockActivity; import com.android.systemui.screenrecord.ScreenRecordDialog; import com.android.systemui.settings.BrightnessDialog; import com.android.systemui.tuner.TunerActivity; +import com.android.systemui.usb.UsbDebuggingActivity; +import com.android.systemui.usb.UsbDebuggingSecondaryUserActivity; import dagger.Binds; import dagger.Module; @@ -70,4 +72,17 @@ public abstract class DefaultActivityBinder { @IntoMap @ClassKey(BubbleOverflowActivity.class) public abstract Activity bindBubbleOverflowActivity(BubbleOverflowActivity activity); + + /** Inject into UsbDebuggingActivity. */ + @Binds + @IntoMap + @ClassKey(UsbDebuggingActivity.class) + public abstract Activity bindUsbDebuggingActivity(UsbDebuggingActivity activity); + + /** Inject into UsbDebuggingSecondaryUserActivity. */ + @Binds + @IntoMap + @ClassKey(UsbDebuggingSecondaryUserActivity.class) + public abstract Activity bindUsbDebuggingSecondaryUserActivity( + UsbDebuggingSecondaryUserActivity activity); } diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java index 2973e0aedd43..bc2a55c8d5c4 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingActivity.java @@ -16,13 +16,19 @@ package com.android.systemui.usb; +import android.app.Activity; import android.app.AlertDialog; +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.DialogInterface; import android.content.Intent; +import android.content.IntentFilter; import android.debug.IAdbManager; +import android.hardware.usb.UsbManager; import android.os.Bundle; import android.os.IBinder; import android.os.ServiceManager; +import android.os.SystemProperties; import android.util.Log; import android.view.LayoutInflater; import android.view.View; @@ -33,13 +39,25 @@ import android.widget.CheckBox; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; import com.android.systemui.R; +import com.android.systemui.broadcast.BroadcastDispatcher; + +import javax.inject.Inject; public class UsbDebuggingActivity extends AlertActivity implements DialogInterface.OnClickListener { private static final String TAG = "UsbDebuggingActivity"; private CheckBox mAlwaysAllow; + private UsbDisconnectedReceiver mDisconnectedReceiver; + private final BroadcastDispatcher mBroadcastDispatcher; private String mKey; + private boolean mServiceNotified; + + @Inject + public UsbDebuggingActivity(BroadcastDispatcher broadcastDispatcher) { + super(); + mBroadcastDispatcher = broadcastDispatcher; + } @Override public void onCreate(Bundle icicle) { @@ -50,6 +68,10 @@ public class UsbDebuggingActivity extends AlertActivity super.onCreate(icicle); + if (SystemProperties.getInt("service.adb.tcp.port", 0) == 0) { + mDisconnectedReceiver = new UsbDisconnectedReceiver(this); + } + Intent intent = getIntent(); String fingerprints = intent.getStringExtra("fingerprints"); mKey = intent.getStringExtra("key"); @@ -83,10 +105,77 @@ public class UsbDebuggingActivity extends AlertActivity super.onWindowAttributesChanged(params); } + private class UsbDisconnectedReceiver extends BroadcastReceiver { + private final Activity mActivity; + UsbDisconnectedReceiver(Activity activity) { + mActivity = activity; + } + + @Override + public void onReceive(Context content, Intent intent) { + String action = intent.getAction(); + if (!UsbManager.ACTION_USB_STATE.equals(action)) { + return; + } + boolean connected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false); + if (!connected) { + notifyService(false); + mActivity.finish(); + } + } + } + + @Override + public void onStart() { + super.onStart(); + if (mDisconnectedReceiver != null) { + IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_STATE); + mBroadcastDispatcher.registerReceiver(mDisconnectedReceiver, filter); + } + } + + @Override + protected void onStop() { + if (mDisconnectedReceiver != null) { + mBroadcastDispatcher.unregisterReceiver(mDisconnectedReceiver); + } + // If the ADB service has not yet been notified due to this dialog being closed in some + // other way then notify the service to deny the connection to ensure system_server sends + // a response to adbd. + if (!mServiceNotified) { + notifyService(false); + } + super.onStop(); + } + @Override public void onClick(DialogInterface dialog, int which) { boolean allow = (which == AlertDialog.BUTTON_POSITIVE); boolean alwaysAllow = allow && mAlwaysAllow.isChecked(); + notifyService(allow, alwaysAllow); + finish(); + } + + /** + * Notifies the ADB service as to whether the current ADB request should be allowed; if the + * request is allowed it is only allowed for this session, and the user should be prompted again + * on subsequent requests from this key. + * + * @param allow whether the connection should be allowed for this session + */ + private void notifyService(boolean allow) { + notifyService(allow, false); + } + + /** + * Notifies the ADB service as to whether the current ADB request should be allowed, and if + * subsequent requests from this key should be allowed without user consent. + * + * @param allow whether the connection should be allowed + * @param alwaysAllow whether subsequent requests from this key should be allowed without user + * consent + */ + private void notifyService(boolean allow, boolean alwaysAllow) { try { IBinder b = ServiceManager.getService(ADB_SERVICE); IAdbManager service = IAdbManager.Stub.asInterface(b); @@ -95,9 +184,9 @@ public class UsbDebuggingActivity extends AlertActivity } else { service.denyDebugging(); } + mServiceNotified = true; } catch (Exception e) { Log.e(TAG, "Unable to notify Usb service", e); } - finish(); } } diff --git a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java index 421424206370..4850a025b684 100644 --- a/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java +++ b/packages/SystemUI/src/com/android/systemui/usb/UsbDebuggingSecondaryUserActivity.java @@ -16,19 +16,47 @@ package com.android.systemui.usb; +import android.app.Activity; +import android.content.BroadcastReceiver; +import android.content.Context; import android.content.DialogInterface; +import android.content.Intent; +import android.content.IntentFilter; +import android.debug.IAdbManager; +import android.hardware.usb.UsbManager; import android.os.Bundle; +import android.os.IBinder; +import android.os.RemoteException; +import android.os.ServiceManager; +import android.os.SystemProperties; +import android.util.Log; import com.android.internal.app.AlertActivity; import com.android.internal.app.AlertController; import com.android.systemui.R; +import com.android.systemui.broadcast.BroadcastDispatcher; + +import javax.inject.Inject; public class UsbDebuggingSecondaryUserActivity extends AlertActivity implements DialogInterface.OnClickListener { + private static final String TAG = "UsbDebuggingSecondaryUserActivity"; + private UsbDisconnectedReceiver mDisconnectedReceiver; + private final BroadcastDispatcher mBroadcastDispatcher; + + @Inject + public UsbDebuggingSecondaryUserActivity(BroadcastDispatcher broadcastDispatcher) { + mBroadcastDispatcher = broadcastDispatcher; + } + @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); + if (SystemProperties.getInt("service.adb.tcp.port", 0) == 0) { + mDisconnectedReceiver = new UsbDisconnectedReceiver(this); + } + final AlertController.AlertParams ap = mAlertParams; ap.mTitle = getString(R.string.usb_debugging_secondary_user_title); ap.mMessage = getString(R.string.usb_debugging_secondary_user_message); @@ -38,6 +66,48 @@ public class UsbDebuggingSecondaryUserActivity extends AlertActivity setupAlert(); } + private class UsbDisconnectedReceiver extends BroadcastReceiver { + private final Activity mActivity; + UsbDisconnectedReceiver(Activity activity) { + mActivity = activity; + } + + @Override + public void onReceive(Context content, Intent intent) { + String action = intent.getAction(); + if (UsbManager.ACTION_USB_STATE.equals(action)) { + boolean connected = intent.getBooleanExtra(UsbManager.USB_CONNECTED, false); + if (!connected) { + mActivity.finish(); + } + } + } + } + + @Override + public void onStart() { + super.onStart(); + if (mDisconnectedReceiver != null) { + IntentFilter filter = new IntentFilter(UsbManager.ACTION_USB_STATE); + mBroadcastDispatcher.registerReceiver(mDisconnectedReceiver, filter); + } + } + + @Override + protected void onStop() { + if (mDisconnectedReceiver != null) { + mBroadcastDispatcher.unregisterReceiver(mDisconnectedReceiver); + } + try { + IBinder b = ServiceManager.getService(ADB_SERVICE); + IAdbManager service = IAdbManager.Stub.asInterface(b); + service.denyDebugging(); + } catch (RemoteException e) { + Log.e(TAG, "Unable to notify Usb service", e); + } + super.onStop(); + } + @Override public void onClick(DialogInterface dialog, int which) { finish(); diff --git a/services/autofill/java/com/android/server/autofill/AutofillInlineSuggestionsRequestSession.java b/services/autofill/java/com/android/server/autofill/AutofillInlineSuggestionsRequestSession.java index e7a43b75f9d5..48895ad42e99 100644 --- a/services/autofill/java/com/android/server/autofill/AutofillInlineSuggestionsRequestSession.java +++ b/services/autofill/java/com/android/server/autofill/AutofillInlineSuggestionsRequestSession.java @@ -93,7 +93,7 @@ final class AutofillInlineSuggestionsRequestSession { @Nullable private InlineFillUi mInlineFillUi; @GuardedBy("mLock") - private boolean mPreviousResponseIsNotEmpty; + private Boolean mPreviousResponseIsNotEmpty = null; @GuardedBy("mLock") private boolean mDestroyed = false; @@ -213,7 +213,7 @@ final class AutofillInlineSuggestionsRequestSession { // if IME is visible, and response is not null, send the response InlineSuggestionsResponse response = mInlineFillUi.getInlineSuggestionsResponse(); boolean isEmptyResponse = response.getInlineSuggestions().isEmpty(); - if (isEmptyResponse && !mPreviousResponseIsNotEmpty) { + if (isEmptyResponse && Boolean.FALSE.equals(mPreviousResponseIsNotEmpty)) { // No-op if both the previous response and current response are empty. return; } diff --git a/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java b/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java index 851e4cc0bfd1..a7d0061cc043 100644 --- a/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java +++ b/services/autofill/java/com/android/server/autofill/RemoteAugmentedAutofillService.java @@ -245,6 +245,11 @@ final class RemoteAugmentedAutofillService if (inlineSuggestionsData == null || inlineSuggestionsData.isEmpty() || inlineSuggestionsCallback == null || request == null || remoteRenderService == null) { + // If it was an inline request and the response doesn't have any inline suggestions, + // we will send an empty response to IME. + if (inlineSuggestionsCallback != null && request != null) { + inlineSuggestionsCallback.apply(InlineFillUi.emptyUi(focusedId)); + } return; } mCallbacks.setLastResponse(sessionId); |