Disable android 10 back gestures on the left and right side

Viewed 295

I want to disable back gestures in an activity. I tried this code but it does not work

Target: Disable left and right side edge back swipe gesture

1st try

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);

        if (hasFocus) {
            hideSystemUI();
        }
    }

    // Hide the system bars by adding flags
    private void hideSystemUI() {
        // Enables regular immersive mode.
        // For "lean back" mode, remove SYSTEM_UI_FLAG_IMMERSIVE.
        // Or for "sticky immersive," replace it with SYSTEM_UI_FLAG_IMMERSIVE_STICKY
        View decorView = getWindow().getDecorView();
        decorView.setSystemUiVisibility(
                View.SYSTEM_UI_FLAG_IMMERSIVE
                        // Set the content to appear under the system bars so that the
                        // content doesn't resize when the system bars hide and show.
                        | View.SYSTEM_UI_FLAG_LAYOUT_STABLE
                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
                        // Hide the nav bar and status bar
                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
                        | View.SYSTEM_UI_FLAG_FULLSCREEN);
    }

Result: click on the activity all navigation work without an issue.

2nd try

@Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);


        // Set the system navigation gesture exclusions
        this.setSystemGestureExclusions();
    }

    private void setSystemGestureExclusions() {
        if (Build.VERSION.SDK_INT < 29) {
            return;
        }

        List<Rect> exclusionRects = new ArrayList();
        Rect visibleRect = new Rect();
        this.getWindow().getDecorView().getWindowVisibleDisplayFrame(visibleRect);
        exclusionRects.add(visibleRect);
        getWindow().setSystemGestureExclusionRects(exclusionRects);
    }

Result: Navigation work without an issue.

3rd try

ConstraintLayout coordinatorLayout;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        coordinatorLayout = (ConstraintLayout) findViewById(R.id.activity_root);
        coordinatorLayout.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
            @Override
            public void onGlobalLayout()  {
                coordinatorLayout.getViewTreeObserver().removeOnGlobalLayoutListener(this);
                if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
                    updateGestureExclusion(MainActivity.this);;
                }
            }
        });
    }

    static List<Rect> exclusionRects = new ArrayList<>();
    public static void updateGestureExclusion(AppCompatActivity activity) {
        if (Build.VERSION.SDK_INT < 29) return;
        exclusionRects.clear();
        Rect rect = new Rect(0, 0, dpToPx(activity, 16), getScreenHeight(activity));
        exclusionRects.add(rect);

        activity.findViewById(android.R.id.content).setSystemGestureExclusionRects(exclusionRects);
    }

    public static int getScreenHeight(AppCompatActivity activity) {
        DisplayMetrics displayMetrics = new DisplayMetrics();
        activity.getWindowManager().getDefaultDisplay().getMetrics(displayMetrics);
        return displayMetrics.heightPixels;
    }

    public static int dpToPx(Context context, int i) {
        return (int) (((float) i) * context.getResources().getDisplayMetrics().density);
    }

Result: Navigation work without an issue.

Any suggestions ?? 
0 Answers
Related