Search code examples
androidbuttonoverridingback-button

Override home and back button is case a boolean is true


I was wondering if I can override the action of the back and home button is some cases. Normally these buttons should just react like they always do, but in a case some setting is true I want to override the buttons and let them call my own methods.

I´m using these two methods to override these buttons:

  @Override
  public void onBackPressed() {    
  // call my backbutton pressed method when boolean==true
    }

  @Override
  public void onAttachedToWindow()    {                                                                                       this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);    
   super.onAttachedToWindow(); 
   // call my homebutton pressed method when boolean==true
   }

Solution

  • I was wondering if I can override the action of the back and home button is some cases.

    Yes you can do override Home button.

    I have developed an application which disable hard button, you can have a look. I have taken a toggle button which locks all hard button to work except Power button

    public class DisableHardButton extends Activity {
        /** Called when the activity is first created. */
        TextView mTextView;
        ToggleButton mToggleButton;
        boolean isLock=false;
        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.main);
            mTextView=(TextView) findViewById(R.id.tvInfo);
            mToggleButton=(ToggleButton) findViewById(R.id.btnLock);
    
    
            mToggleButton.setOnCheckedChangeListener(new OnCheckedChangeListener() {
    
            @Override
            public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
                // TODO Auto-generated method stub
                isLock=isChecked;
                onAttachedToWindow();
            }
        });
       }
    @Override
        public boolean dispatchKeyEvent(KeyEvent event) {
    
            if ( (event.getKeyCode() == KeyEvent.KEYCODE_HOME) && isLock) {
                mTextView.setText("KEYCODE_HOME");
                return true;
            }
            else
                return super.dispatchKeyEvent(event);
        }
    @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
    
            if( (keyCode==KeyEvent.KEYCODE_BACK) && isLock)
            {
                mTextView.setText("KEYCODE_BACK");
                return true;
            }
               else
                 return super.onKeyDown(keyCode, event);
        }
    @Override
        public void onAttachedToWindow()
        {  
            System.out.println("Onactivity attached :"+isLock);
            if(isLock)
            {   
                this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);     
                super.onAttachedToWindow();
            }
            else
            {
                this.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION);     
                super.onAttachedToWindow();
            }
        }
    }
    

    main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:orientation="vertical" >
    
        <TextView
            android:id="@+id/tvInfo"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content"
            android:text="@string/hello" />
    
        <ToggleButton
            android:id="@+id/btnLock"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:textOff="UnLocked"
            android:textOn="Locked" />
    
    </LinearLayout>