aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMichael Groover <mpgroover@google.com>2023-03-09 15:55:06 -0600
committerMichael Groover <mpgroover@google.com>2023-03-09 16:22:00 -0600
commit3932195a50fe0e4ab5918d21c9c7b29c11c253ba (patch)
treecab7f18002c813c289f9100b5ca0f706295fdc96
parent213f4d56042c73a3d64753bdcad52fe67d75433b (diff)
downloadlatinime-3932195a50fe0e4ab5918d21c9c7b29c11c253ba.tar.gz
latinime-3932195a50fe0e4ab5918d21c9c7b29c11c253ba.tar.xz
latinime-3932195a50fe0e4ab5918d21c9c7b29c11c253ba.zip
Add required flag to receivers in LatinIME
Android T allows apps to declare a runtime receiver as not exported by invoking registerReceiver with a new RECEIVER_NOT_EXPORTED flag; receivers registered with this flag will only receive broadcasts from the platform and the app itself. However to ensure developers can properly protect their receivers, all apps targeting U and registering a receiver for non-system broadcasts must specify either the exported or not exported flag when invoking registerReceiver; if one of these flags is not provided, the platform will throw a SecurityException. This commit updates the dictionary receivers with the RECEIVER_NOT_EXPORTED flag since these are only sent from the local app. The HIDE_SOFT_INPUT receiver is flagged with the RECEIVER_EXPORTED flag since it can be sent by any app with the corresponding permission. Bug: 234659204 Test: Build Change-Id: I2b9a1360e0eb1c1965c07cc71dca9f11eb153517
Diffstat (limited to '')
-rw-r--r--java/src/com/android/inputmethod/latin/LatinIME.java23
1 files changed, 19 insertions, 4 deletions
diff --git a/java/src/com/android/inputmethod/latin/LatinIME.java b/java/src/com/android/inputmethod/latin/LatinIME.java
index 8ed3a59bf..e68b43b39 100644
--- a/java/src/com/android/inputmethod/latin/LatinIME.java
+++ b/java/src/com/android/inputmethod/latin/LatinIME.java
@@ -628,16 +628,31 @@ public class LatinIME extends InputMethodService implements KeyboardActionListen
final IntentFilter newDictFilter = new IntentFilter();
newDictFilter.addAction(DictionaryPackConstants.NEW_DICTIONARY_INTENT_ACTION);
- registerReceiver(mDictionaryPackInstallReceiver, newDictFilter);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ registerReceiver(mDictionaryPackInstallReceiver, newDictFilter,
+ Context.RECEIVER_NOT_EXPORTED);
+ } else {
+ registerReceiver(mDictionaryPackInstallReceiver, newDictFilter);
+ }
final IntentFilter dictDumpFilter = new IntentFilter();
dictDumpFilter.addAction(DictionaryDumpBroadcastReceiver.DICTIONARY_DUMP_INTENT_ACTION);
- registerReceiver(mDictionaryDumpBroadcastReceiver, dictDumpFilter);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ registerReceiver(mDictionaryDumpBroadcastReceiver, dictDumpFilter,
+ Context.RECEIVER_NOT_EXPORTED);
+ } else {
+ registerReceiver(mDictionaryDumpBroadcastReceiver, dictDumpFilter);
+ }
final IntentFilter hideSoftInputFilter = new IntentFilter();
hideSoftInputFilter.addAction(ACTION_HIDE_SOFT_INPUT);
- registerReceiver(mHideSoftInputReceiver, hideSoftInputFilter, PERMISSION_HIDE_SOFT_INPUT,
- null /* scheduler */);
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
+ registerReceiver(mHideSoftInputReceiver, hideSoftInputFilter,
+ PERMISSION_HIDE_SOFT_INPUT, null /* scheduler */, Context.RECEIVER_EXPORTED);
+ } else {
+ registerReceiver(mHideSoftInputReceiver, hideSoftInputFilter,
+ PERMISSION_HIDE_SOFT_INPUT, null /* scheduler */);
+ }
StatsUtils.onCreate(mSettings.getCurrent(), mRichImm);
}