11fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi/*
21fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi * Copyright (C) 2015 The Android Open Source Project
31fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi *
41fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License");
51fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi * you may not use this file except in compliance with the License.
61fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi * You may obtain a copy of the License at
71fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi *
81fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi *      http://www.apache.org/licenses/LICENSE-2.0
91fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi *
101fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi * Unless required by applicable law or agreed to in writing, software
111fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS,
121fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
131fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi * See the License for the specific language governing permissions and
141fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi * limitations under the License.
151fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi */
161fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi
171fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggipackage com.android.systemui.stackdivider;
181fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi
191fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggiimport android.content.res.Configuration;
20a6c934e2a3e6ddec6549cea55b7bece02348c6f8Jorim Jaggiimport android.os.RemoteException;
21a6c934e2a3e6ddec6549cea55b7bece02348c6f8Jorim Jaggiimport android.view.IDockedStackListener;
221fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggiimport android.view.LayoutInflater;
2364cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynskiimport android.view.View;
241fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi
251fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggiimport com.android.systemui.R;
261fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggiimport com.android.systemui.SystemUI;
2764cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynskiimport com.android.systemui.recents.Recents;
2860fa64742776632de647e8e85373c887c6e96728Winson Chungimport com.android.systemui.recents.events.EventBus;
2960fa64742776632de647e8e85373c887c6e96728Winson Chungimport com.android.systemui.recents.events.ui.RecentsDrawnEvent;
3064cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynskiimport com.android.systemui.recents.misc.SystemServicesProxy;
311fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi
321fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggiimport static android.content.res.Configuration.ORIENTATION_LANDSCAPE;
331fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggiimport static android.view.ViewGroup.LayoutParams.MATCH_PARENT;
341fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi
3531f71705df97767b4b4ac7026228664995478fe0Jorim Jaggiimport java.io.FileDescriptor;
3631f71705df97767b4b4ac7026228664995478fe0Jorim Jaggiimport java.io.PrintWriter;
3731f71705df97767b4b4ac7026228664995478fe0Jorim Jaggi
381fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi/**
391fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi * Controls the docked stack divider.
401fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi */
411fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggipublic class Divider extends SystemUI {
421fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi    private DividerWindowManager mWindowManager;
43dd98d41e3a65b3bcb37007ea5b29371cf013f563Jorim Jaggi    private DividerView mView;
44a6c05d5151027f902c5c56bded008cbe15bd6301Jorim Jaggi    private final DividerState mDividerState = new DividerState();
4564cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski    private DockDividerVisibilityListener mDockDividerVisibilityListener;
4664cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski    private boolean mVisible = false;
4742625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi    private boolean mMinimized = false;
48698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi    private boolean mAdjustedForIme = false;
49e15352e516fb6ecde12866f0eb27c32470ddbdedMatthew Ng    private boolean mHomeStackResizable = false;
502adba07d75419462873dfeef40d4c983d832ed99Jorim Jaggi    private ForcedResizableInfoActivityController mForcedResizableController;
511fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi
521fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi    @Override
531fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi    public void start() {
541fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi        mWindowManager = new DividerWindowManager(mContext);
551fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi        update(mContext.getResources().getConfiguration());
56dd98d41e3a65b3bcb37007ea5b29371cf013f563Jorim Jaggi        putComponent(Divider.class, this);
5764cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski        mDockDividerVisibilityListener = new DockDividerVisibilityListener();
5864cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski        SystemServicesProxy ssp = Recents.getSystemServices();
59a6c934e2a3e6ddec6549cea55b7bece02348c6f8Jorim Jaggi        ssp.registerDockedStackListener(mDockDividerVisibilityListener);
602adba07d75419462873dfeef40d4c983d832ed99Jorim Jaggi        mForcedResizableController = new ForcedResizableInfoActivityController(mContext);
6160fa64742776632de647e8e85373c887c6e96728Winson Chung        EventBus.getDefault().register(this);
621fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi    }
631fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi
641fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi    @Override
651fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi    protected void onConfigurationChanged(Configuration newConfig) {
661fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi        super.onConfigurationChanged(newConfig);
671fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi        update(newConfig);
681fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi    }
691fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi
70dd98d41e3a65b3bcb37007ea5b29371cf013f563Jorim Jaggi    public DividerView getView() {
71dd98d41e3a65b3bcb37007ea5b29371cf013f563Jorim Jaggi        return mView;
72dd98d41e3a65b3bcb37007ea5b29371cf013f563Jorim Jaggi    }
73dd98d41e3a65b3bcb37007ea5b29371cf013f563Jorim Jaggi
748d3728806c7cdb804ba560d7178b268aefa9c12fMatthew Ng    public boolean isMinimized() {
758d3728806c7cdb804ba560d7178b268aefa9c12fMatthew Ng        return mMinimized;
768d3728806c7cdb804ba560d7178b268aefa9c12fMatthew Ng    }
778d3728806c7cdb804ba560d7178b268aefa9c12fMatthew Ng
78fb692acb647b19b078a95fab8f186f1ca1469250Matthew Ng    public boolean isHomeStackResizable() {
79fb692acb647b19b078a95fab8f186f1ca1469250Matthew Ng        return mHomeStackResizable;
80fb692acb647b19b078a95fab8f186f1ca1469250Matthew Ng    }
81fb692acb647b19b078a95fab8f186f1ca1469250Matthew Ng
821fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi    private void addDivider(Configuration configuration) {
83dd98d41e3a65b3bcb37007ea5b29371cf013f563Jorim Jaggi        mView = (DividerView)
841fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi                LayoutInflater.from(mContext).inflate(R.layout.docked_stack_divider, null);
8564cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski        mView.setVisibility(mVisible ? View.VISIBLE : View.INVISIBLE);
86e15352e516fb6ecde12866f0eb27c32470ddbdedMatthew Ng        mView.setMinimizedDockStack(mMinimized, mHomeStackResizable);
8711c62e17af9096f76d4532f26cacd809c3a5ef53Jorim Jaggi        final int size = mContext.getResources().getDimensionPixelSize(
8811c62e17af9096f76d4532f26cacd809c3a5ef53Jorim Jaggi                com.android.internal.R.dimen.docked_stack_divider_thickness);
891fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi        final boolean landscape = configuration.orientation == ORIENTATION_LANDSCAPE;
9011c62e17af9096f76d4532f26cacd809c3a5ef53Jorim Jaggi        final int width = landscape ? size : MATCH_PARENT;
9111c62e17af9096f76d4532f26cacd809c3a5ef53Jorim Jaggi        final int height = landscape ? MATCH_PARENT : size;
92dd98d41e3a65b3bcb37007ea5b29371cf013f563Jorim Jaggi        mWindowManager.add(mView, width, height);
93a6c05d5151027f902c5c56bded008cbe15bd6301Jorim Jaggi        mView.injectDependencies(mWindowManager, mDividerState);
941fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi    }
951fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi
961fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi    private void removeDivider() {
9715ba1515a8df437355e013ee9d4421e5862ced2cWale Ogunwale        if (mView != null) {
9815ba1515a8df437355e013ee9d4421e5862ced2cWale Ogunwale            mView.onDividerRemoved();
9915ba1515a8df437355e013ee9d4421e5862ced2cWale Ogunwale        }
1001fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi        mWindowManager.remove();
1011fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi    }
1021fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi
1031fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi    private void update(Configuration configuration) {
1041fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi        removeDivider();
1051fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi        addDivider(configuration);
10642625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi        if (mMinimized) {
107e15352e516fb6ecde12866f0eb27c32470ddbdedMatthew Ng            mView.setMinimizedDockStack(true, mHomeStackResizable);
108698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi            updateTouchable();
10942625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi        }
1101fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi    }
11164cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski
11264cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski    private void updateVisibility(final boolean visible) {
11364cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski        mView.post(new Runnable() {
11464cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski            @Override
11564cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski            public void run() {
11664cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski                if (mVisible != visible) {
11764cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski                    mVisible = visible;
11864cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski                    mView.setVisibility(visible ? View.VISIBLE : View.INVISIBLE);
119ef92d6fd24bb5a53daedc80a1bc4c92691e06eadJorim Jaggi
120ef92d6fd24bb5a53daedc80a1bc4c92691e06eadJorim Jaggi                    // Update state because animations won't finish.
121e15352e516fb6ecde12866f0eb27c32470ddbdedMatthew Ng                    mView.setMinimizedDockStack(mMinimized, mHomeStackResizable);
12264cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski                }
12364cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski            }
12464cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski        });
12564cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski    }
12664cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski
127e15352e516fb6ecde12866f0eb27c32470ddbdedMatthew Ng    private void updateMinimizedDockedStack(final boolean minimized, final long animDuration,
128e15352e516fb6ecde12866f0eb27c32470ddbdedMatthew Ng            final boolean isHomeStackResizable) {
12942625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi        mView.post(new Runnable() {
13042625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi            @Override
13142625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi            public void run() {
132fb692acb647b19b078a95fab8f186f1ca1469250Matthew Ng                mHomeStackResizable = isHomeStackResizable;
13342625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi                if (mMinimized != minimized) {
13442625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi                    mMinimized = minimized;
135698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi                    updateTouchable();
13642625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi                    if (animDuration > 0) {
137e15352e516fb6ecde12866f0eb27c32470ddbdedMatthew Ng                        mView.setMinimizedDockStack(minimized, animDuration, isHomeStackResizable);
13842625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi                    } else {
139e15352e516fb6ecde12866f0eb27c32470ddbdedMatthew Ng                        mView.setMinimizedDockStack(minimized, isHomeStackResizable);
14042625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi                    }
14142625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi                }
14242625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi            }
14342625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi        });
14442625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi    }
14542625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi
1462adba07d75419462873dfeef40d4c983d832ed99Jorim Jaggi    private void notifyDockedStackExistsChanged(final boolean exists) {
1472adba07d75419462873dfeef40d4c983d832ed99Jorim Jaggi        mView.post(new Runnable() {
1482adba07d75419462873dfeef40d4c983d832ed99Jorim Jaggi            @Override
1492adba07d75419462873dfeef40d4c983d832ed99Jorim Jaggi            public void run() {
1502adba07d75419462873dfeef40d4c983d832ed99Jorim Jaggi                mForcedResizableController.notifyDockedStackExistsChanged(exists);
1512adba07d75419462873dfeef40d4c983d832ed99Jorim Jaggi            }
1522adba07d75419462873dfeef40d4c983d832ed99Jorim Jaggi        });
1532adba07d75419462873dfeef40d4c983d832ed99Jorim Jaggi    }
1542adba07d75419462873dfeef40d4c983d832ed99Jorim Jaggi
155698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi    private void updateTouchable() {
156e15352e516fb6ecde12866f0eb27c32470ddbdedMatthew Ng        mWindowManager.setTouchable((mHomeStackResizable || !mMinimized) && !mAdjustedForIme);
157698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi    }
158698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi
15960fa64742776632de647e8e85373c887c6e96728Winson Chung    /**
16060fa64742776632de647e8e85373c887c6e96728Winson Chung     * Workaround for b/62528361, at the time RecentsDrawnEvent is sent, it may happen before a
16160fa64742776632de647e8e85373c887c6e96728Winson Chung     * configuration change to the Divider, and internally, the event will be posted to the
16260fa64742776632de647e8e85373c887c6e96728Winson Chung     * subscriber, or DividerView, which has been removed and prevented from resizing. Instead,
16360fa64742776632de647e8e85373c887c6e96728Winson Chung     * register the event handler here and proxy the event to the current DividerView.
16460fa64742776632de647e8e85373c887c6e96728Winson Chung     */
16560fa64742776632de647e8e85373c887c6e96728Winson Chung    public final void onBusEvent(RecentsDrawnEvent drawnEvent) {
16660fa64742776632de647e8e85373c887c6e96728Winson Chung        if (mView != null) {
16760fa64742776632de647e8e85373c887c6e96728Winson Chung            mView.onRecentsDrawn();
16860fa64742776632de647e8e85373c887c6e96728Winson Chung        }
16960fa64742776632de647e8e85373c887c6e96728Winson Chung    }
17060fa64742776632de647e8e85373c887c6e96728Winson Chung
17131f71705df97767b4b4ac7026228664995478fe0Jorim Jaggi    @Override
17231f71705df97767b4b4ac7026228664995478fe0Jorim Jaggi    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
17331f71705df97767b4b4ac7026228664995478fe0Jorim Jaggi        pw.print("  mVisible="); pw.println(mVisible);
17431f71705df97767b4b4ac7026228664995478fe0Jorim Jaggi        pw.print("  mMinimized="); pw.println(mMinimized);
17531f71705df97767b4b4ac7026228664995478fe0Jorim Jaggi        pw.print("  mAdjustedForIme="); pw.println(mAdjustedForIme);
17631f71705df97767b4b4ac7026228664995478fe0Jorim Jaggi    }
17731f71705df97767b4b4ac7026228664995478fe0Jorim Jaggi
178a6c934e2a3e6ddec6549cea55b7bece02348c6f8Jorim Jaggi    class DockDividerVisibilityListener extends IDockedStackListener.Stub {
179a6c934e2a3e6ddec6549cea55b7bece02348c6f8Jorim Jaggi
18064cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski        @Override
181a6c934e2a3e6ddec6549cea55b7bece02348c6f8Jorim Jaggi        public void onDividerVisibilityChanged(boolean visible) throws RemoteException {
18264cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski            updateVisibility(visible);
18364cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski        }
184a6c934e2a3e6ddec6549cea55b7bece02348c6f8Jorim Jaggi
185a6c934e2a3e6ddec6549cea55b7bece02348c6f8Jorim Jaggi        @Override
186a6c934e2a3e6ddec6549cea55b7bece02348c6f8Jorim Jaggi        public void onDockedStackExistsChanged(boolean exists) throws RemoteException {
1872adba07d75419462873dfeef40d4c983d832ed99Jorim Jaggi            notifyDockedStackExistsChanged(exists);
188a6c934e2a3e6ddec6549cea55b7bece02348c6f8Jorim Jaggi        }
18942625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi
19042625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi        @Override
191e15352e516fb6ecde12866f0eb27c32470ddbdedMatthew Ng        public void onDockedStackMinimizedChanged(boolean minimized, long animDuration,
192e15352e516fb6ecde12866f0eb27c32470ddbdedMatthew Ng                boolean isHomeStackResizable) throws RemoteException {
193e15352e516fb6ecde12866f0eb27c32470ddbdedMatthew Ng            mHomeStackResizable = isHomeStackResizable;
194e15352e516fb6ecde12866f0eb27c32470ddbdedMatthew Ng            updateMinimizedDockedStack(minimized, animDuration, isHomeStackResizable);
19542625d1bc7ef99c4d4435e8cdebfe3eee57b8d97Jorim Jaggi        }
1962917dc4918ab2061f6cab3d181d19ea8375df9f6Jorim Jaggi
1972917dc4918ab2061f6cab3d181d19ea8375df9f6Jorim Jaggi        @Override
198698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi        public void onAdjustedForImeChanged(boolean adjustedForIme, long animDuration)
199698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi                throws RemoteException {
200698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi            mView.post(() -> {
201698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi                if (mAdjustedForIme != adjustedForIme) {
202698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi                    mAdjustedForIme = adjustedForIme;
203698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi                    updateTouchable();
2043070e77f91a3c2ccb0be4588cbcff3936829458aJorim Jaggi                    if (!mMinimized) {
2053070e77f91a3c2ccb0be4588cbcff3936829458aJorim Jaggi                        if (animDuration > 0) {
2063070e77f91a3c2ccb0be4588cbcff3936829458aJorim Jaggi                            mView.setAdjustedForIme(adjustedForIme, animDuration);
2073070e77f91a3c2ccb0be4588cbcff3936829458aJorim Jaggi                        } else {
2083070e77f91a3c2ccb0be4588cbcff3936829458aJorim Jaggi                            mView.setAdjustedForIme(adjustedForIme);
2093070e77f91a3c2ccb0be4588cbcff3936829458aJorim Jaggi                        }
210698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi                    }
211698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi                }
212698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi            });
213698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi        }
214698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi
215698e7634aa2ced554f564f588c2e878fb35757a3Jorim Jaggi        @Override
2162917dc4918ab2061f6cab3d181d19ea8375df9f6Jorim Jaggi        public void onDockSideChanged(final int newDockSide) throws RemoteException {
2172917dc4918ab2061f6cab3d181d19ea8375df9f6Jorim Jaggi            mView.post(() -> mView.notifyDockSideChanged(newDockSide));
2182917dc4918ab2061f6cab3d181d19ea8375df9f6Jorim Jaggi        }
21964cdc1458bcf0d09781463a6e421b9b870b09687Filip Gruszczynski    }
2201fcbab6ae5c99acab70eacc015d194e2c6ddd4e2Jorim Jaggi}
221