Search code examples
javaandroidandroid-studioandroid-activityonkeydown

Use public boolean onKeyDown in all activities


I'm new in Android Studio and I have created a simple application with 10 activities.

Now, I want to intercept the KeyEvent.KEYCODE_BACK from the user in all of my activities.

I'm opening a dialog when KEYCODE_BACK. It's ok in my MainActivity but I don't want to copy this code in all of my activities.

Would anyone have an idea ?

public class MainActivity extends AppCompatActivity
    {
        Dialog myDialog;
        Button BoutonAccepter;
        Button BoutonRefuser;

        @Override
        protected void onCreate(Bundle savedInstanceState)
            {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
            }

        @Override
        public boolean onKeyDown(int keyCode, KeyEvent event)
            {
                myDialog = new Dialog(this);
                if (keyCode == KeyEvent.KEYCODE_BACK)
                    {
                        myDialog.setContentView(R.layout.popup);
                        BoutonAccepter = (Button) myDialog.findViewById(R.id.BoutonAccepter);
                        BoutonRefuser = (Button) myDialog.findViewById(R.id.BoutonRefuser);

                        BoutonAccepter.setOnClickListener(new View.OnClickListener()
                            {
                                @Override
                                public void onClick(View v)
                                {
                                    Toast.makeText(getApplicationContext(), "Non", Toast.LENGTH_LONG).show();
                                    myDialog.dismiss();
                                }
                            });

                        BoutonRefuser.setOnClickListener(new View.OnClickListener()
                            {
                                @Override
                                public void onClick(View v)
                                {
                                    Toast.makeText(getApplicationContext(), "Oui", Toast.LENGTH_LONG).show();
                                    myDialog.dismiss();
                                }
                            });
                        myDialog.show();
                    }
                else
                    {
                        return super.onKeyDown(keyCode, event);
                    }
                return true;
            }
    }

Solution

  • I think that you should separate this code into a separate abstract class and make exdends of this class for all your activities

    public abstract class BaseActivity extends AppCompatActivity
        {
            Dialog myDialog;
            Button BoutonAccepter;
            Button BoutonRefuser;
    
            @Override
            public boolean onKeyDown(int keyCode, KeyEvent event)
                {
                    myDialog = new Dialog(this);
                    if (keyCode == KeyEvent.KEYCODE_BACK)
                        {
                            myDialog.setContentView(R.layout.popup);
                            BoutonAccepter = (Button) myDialog.findViewById(R.id.BoutonAccepter);
                            BoutonRefuser = (Button) myDialog.findViewById(R.id.BoutonRefuser);
    
                            BoutonAccepter.setOnClickListener(new View.OnClickListener()
                                {
                                    @Override
                                    public void onClick(View v)
                                    {
                                        Toast.makeText(getApplicationContext(), "Non", Toast.LENGTH_LONG).show();
                                        myDialog.dismiss();
                                    }
                                });
    
                            BoutonRefuser.setOnClickListener(new View.OnClickListener()
                                {
                                    @Override
                                    public void onClick(View v)
                                    {
                                        Toast.makeText(getApplicationContext(), "Oui", Toast.LENGTH_LONG).show();
                                        myDialog.dismiss();
                                    }
                                });
                            myDialog.show();
                        }
                    else
                        {
                            return super.onKeyDown(keyCode, event);
                        }
                    return true;
                }
        }
    

    And in all activities

    public class ActivityA extends BaseActivity {
    }