Skip to content

Commit 3932195

Browse files
committed
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
1 parent 213f4d5 commit 3932195

1 file changed

Lines changed: 19 additions & 4 deletions

File tree

java/src/com/android/inputmethod/latin/LatinIME.java

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -628,16 +628,31 @@ public void onCreate() {
628628

629629
final IntentFilter newDictFilter = new IntentFilter();
630630
newDictFilter.addAction(DictionaryPackConstants.NEW_DICTIONARY_INTENT_ACTION);
631-
registerReceiver(mDictionaryPackInstallReceiver, newDictFilter);
631+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
632+
registerReceiver(mDictionaryPackInstallReceiver, newDictFilter,
633+
Context.RECEIVER_NOT_EXPORTED);
634+
} else {
635+
registerReceiver(mDictionaryPackInstallReceiver, newDictFilter);
636+
}
632637

633638
final IntentFilter dictDumpFilter = new IntentFilter();
634639
dictDumpFilter.addAction(DictionaryDumpBroadcastReceiver.DICTIONARY_DUMP_INTENT_ACTION);
635-
registerReceiver(mDictionaryDumpBroadcastReceiver, dictDumpFilter);
640+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
641+
registerReceiver(mDictionaryDumpBroadcastReceiver, dictDumpFilter,
642+
Context.RECEIVER_NOT_EXPORTED);
643+
} else {
644+
registerReceiver(mDictionaryDumpBroadcastReceiver, dictDumpFilter);
645+
}
636646

637647
final IntentFilter hideSoftInputFilter = new IntentFilter();
638648
hideSoftInputFilter.addAction(ACTION_HIDE_SOFT_INPUT);
639-
registerReceiver(mHideSoftInputReceiver, hideSoftInputFilter, PERMISSION_HIDE_SOFT_INPUT,
640-
null /* scheduler */);
649+
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
650+
registerReceiver(mHideSoftInputReceiver, hideSoftInputFilter,
651+
PERMISSION_HIDE_SOFT_INPUT, null /* scheduler */, Context.RECEIVER_EXPORTED);
652+
} else {
653+
registerReceiver(mHideSoftInputReceiver, hideSoftInputFilter,
654+
PERMISSION_HIDE_SOFT_INPUT, null /* scheduler */);
655+
}
641656

642657
StatsUtils.onCreate(mSettings.getCurrent(), mRichImm);
643658
}

0 commit comments

Comments
 (0)