From c331e2a4180743779c07a12f17538f6393a910ae Mon Sep 17 00:00:00 2001 From: simonpunk Date: Fri, 12 Jun 2020 16:21:41 +0800 Subject: [PATCH] Fixed app takes too long to prompt user for opening new session. Whenever the device is reboot, the app can not receive the broadcast intent sent by sendOrderedBroadcast() immediately, that broadcast intent is pending way a lot behind other broadcast intent. The solution can be founded here -> https://stackoverflow.com/questions/44516173/broadcasts-are-delayed --- term/src/main/java/com/offsec/nhterm/Term.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/term/src/main/java/com/offsec/nhterm/Term.java b/term/src/main/java/com/offsec/nhterm/Term.java index 4e65514..a103bf0 100644 --- a/term/src/main/java/com/offsec/nhterm/Term.java +++ b/term/src/main/java/com/offsec/nhterm/Term.java @@ -88,6 +88,8 @@ import java.util.List; import java.util.Locale; import java.util.Objects; +import static android.content.Intent.FLAG_RECEIVER_FOREGROUND; + /** * A terminal emulator activity. */ @@ -141,6 +143,7 @@ public class Term extends Activity implements UpdateCallback, SharedPreferences. AlertDialog.Builder alertDialogBuilder; AlertDialog alertDialog = null; private BroadcastReceiver mPathReceiver = new BroadcastReceiver() { + public void onReceive(Context context, Intent intent) { String path = makePathFromBundle(getResultExtras(false)); if (intent.getAction().equals(ACTION_PATH_PREPEND_BROADCAST)) { @@ -149,7 +152,6 @@ public class Term extends Activity implements UpdateCallback, SharedPreferences. mSettings.setAppendPath(path); } mPendingPathBroadcasts--; - if (mPendingPathBroadcasts <= 0 && mTermService != null) { populateViewFlipper(); populateWindowList(); @@ -382,14 +384,19 @@ public class Term extends Activity implements UpdateCallback, SharedPreferences. mPrefs.registerOnSharedPreferenceChangeListener(this); Intent broadcast = new Intent(ACTION_PATH_BROADCAST); - if (AndroidCompat.SDK >= 12) { + if (android.os.Build.VERSION.SDK_INT >= 16) + broadcast.setFlags(FLAG_RECEIVER_FOREGROUND); + if (AndroidCompat.SDK >= 12) broadcast.addFlags(Intent.FLAG_INCLUDE_STOPPED_PACKAGES); - } + mPendingPathBroadcasts++; sendOrderedBroadcast(broadcast, PERMISSION_PATH_BROADCAST, mPathReceiver, null, RESULT_OK, null, null); broadcast = new Intent(broadcast); broadcast.setAction(ACTION_PATH_PREPEND_BROADCAST); + if (android.os.Build.VERSION.SDK_INT >= 16) + broadcast.setFlags(FLAG_RECEIVER_FOREGROUND); + mPendingPathBroadcasts++; sendOrderedBroadcast(broadcast, PERMISSION_PATH_PREPEND_BROADCAST, mPathReceiver, null, RESULT_OK, null, null); @@ -489,7 +496,6 @@ public class Term extends Activity implements UpdateCallback, SharedPreferences. mViewFlipper.onResume(); } private void populateViewFlipper() { - if (mTermService != null) { mTermSessions = mTermService.getSessions();