Android API >= 30: Top bar always visible after double scrolling if app pinned

62 views Asked by At

If an app is pinned (using startLockTask(), eg. for kiosk mode) and the status bar is hidden using WindowInsetsController.hide, if the user will double scroll from top, status bar will be showed and never hides again (it should hide after a second). No other gesture can hide it. The problem occurs for most devices, including emulator, for Android API >= 30.

Demo video: https://www.youtube.com/watch?v=33pnOQBR9_I

Minimum code:

public class MainActivity extends AppCompatActivity {
    private static final String TAG = "MainActivity";

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

        startLockTask();
    }

    @Override
    public void onResume() {
        super.onResume();
        hideSystemUI();
    }

    private void hideSystemUI() {
        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {
            final Window window = getWindow();
            window.setDecorFitsSystemWindows(false);
            final WindowInsetsController insetsController = window.getInsetsController();
            insetsController.hide(WindowInsets.Type.statusBars() | WindowInsets.Type.navigationBars());
            insetsController.setSystemBarsBehavior(WindowInsetsController.BEHAVIOR_SHOW_TRANSIENT_BARS_BY_SWIPE);
        } else {
            Log.i(TAG, "Run on Android API >= 30!");
        }
    }
}

How can it be fixed?

0

There are 0 answers