@@ -260,6 +260,11 @@ public class PApplet extends Object implements ActivityAPI, PConstants {
260260 */
261261 boolean keyboardIsOpen = false ;
262262
263+ /**
264+ * Flag to determine if the back key was pressed.
265+ */
266+ private boolean requestedBackPress = false ;
267+
263268 /**
264269 * Flag to determine if the user handled the back press.
265270 */
@@ -648,8 +653,8 @@ public void setHasOptionsMenu(boolean hasMenu) {
648653 }
649654
650655
651- public void onBackPressed () {
652- handledBackPressed = false ;
656+ synchronized public void onBackPressed () {
657+ requestedBackPress = true ;
653658 }
654659
655660 public void startActivity (Intent intent ) {
@@ -729,6 +734,19 @@ private void handlePermissions() {
729734 }
730735 }
731736
737+ synchronized private void handleBackPressed () {
738+ if (requestedBackPress ) {
739+ requestedBackPress = false ;
740+ backPressed ();
741+ if (!handledBackPressed ) {
742+ if (getActivity () != null ) {
743+ // Services don't have an activity associated to them, but back press could not be triggered for those anyways
744+ getActivity ().finish ();
745+ }
746+ handledBackPressed = false ;
747+ }
748+ }
749+ }
732750
733751 /**
734752 * @param method "size" or "fullScreen"
@@ -904,6 +922,10 @@ public void resume() {
904922 }
905923
906924
925+ public void backPressed () {
926+ handledBackPressed = false ;
927+ }
928+
907929 //////////////////////////////////////////////////////////////
908930
909931
@@ -1844,6 +1866,7 @@ public void handleDraw() {
18441866
18451867 handleMethods ("draw" );
18461868 handlePermissions ();
1869+ handleBackPressed ();
18471870
18481871 redraw = false ; // unset 'redraw' flag in case it was set
18491872 // (only do this once draw() has run, not just setup())
0 commit comments