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