From 3bb2849a88f278a780f42ad31baabba2adc6fa86 Mon Sep 17 00:00:00 2001 From: David Kramer Date: Mon, 18 Jun 2018 13:06:34 -0600 Subject: [PATCH] Sends broadcast on app open to notify addon termux receivers --- .../java/com/termux/app/TermuxActivity.java | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/app/src/main/java/com/termux/app/TermuxActivity.java b/app/src/main/java/com/termux/app/TermuxActivity.java index d50ab430..9478ca7c 100644 --- a/app/src/main/java/com/termux/app/TermuxActivity.java +++ b/app/src/main/java/com/termux/app/TermuxActivity.java @@ -17,6 +17,7 @@ import android.content.Intent; import android.content.IntentFilter; import android.content.ServiceConnection; import android.content.pm.PackageManager; +import android.content.pm.ResolveInfo; import android.graphics.Color; import android.graphics.Paint; import android.graphics.Typeface; @@ -104,6 +105,8 @@ public final class TermuxActivity extends Activity implements ServiceConnection private static final String RELOAD_STYLE_ACTION = "com.termux.app.reload_style"; + private static final String BROADCAST_TERMUX_OPENED = "com.termux.app.OPENED"; + /** The main view of the activity showing the terminal. Initialized in onCreate(). */ @SuppressWarnings("NullableProblems") @NonNull @@ -334,6 +337,26 @@ public final class TermuxActivity extends Activity implements ServiceConnection checkForFontAndColors(); mBellSoundId = mBellSoundPool.load(this, R.raw.bell, 1); + + sendOpenedBroadcast(); + } + + /** + * Send a broadcast notifying Termux app has been opened + */ + void sendOpenedBroadcast() { + Intent broadcast = new Intent(BROADCAST_TERMUX_OPENED); + List matches = getPackageManager().queryBroadcastReceivers(broadcast, 0); + + // send broadcast to registered Termux receivers + // this technique is needed to work around broadcast changes that Oreo introduced + for (ResolveInfo info : matches) { + Intent explicitBroadcast = new Intent(broadcast); + ComponentName cname = new ComponentName(info.activityInfo.applicationInfo.packageName, + info.activityInfo.name); + explicitBroadcast.setComponent(cname); + sendBroadcast(explicitBroadcast); + } } void toggleShowExtraKeys() {