ResizeDockedStackTimeout.java revision dc249c4ae7c7838928f53f151bfda8a6817b8784
1dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi/* 2dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * Copyright (C) 2015 The Android Open Source Project 3dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * 4dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * Licensed under the Apache License, Version 2.0 (the "License"); 5dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * you may not use this file except in compliance with the License. 6dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * You may obtain a copy of the License at 7dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * 8dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * http://www.apache.org/licenses/LICENSE-2.0 9dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * 10dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * Unless required by applicable law or agreed to in writing, software 11dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * distributed under the License is distributed on an "AS IS" BASIS, 12dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * See the License for the specific language governing permissions and 14dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * limitations under the License. 15dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi */ 16dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi 17dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggipackage com.android.server.am; 18dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi 19dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggiimport android.graphics.Rect; 20dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggiimport android.os.Handler; 21dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi 22dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggiimport static com.android.server.am.ActivityStackSupervisor.PRESERVE_WINDOWS; 23dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi 24dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi/** 25dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * When resizing the docked stack, a caller can temporarily supply task bounds that are different 26dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * from the stack bounds. In order to return to a sane state if the caller crashes or has a bug, 27dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi * this class manages this cycle. 28dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi */ 29dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggiclass ResizeDockedStackTimeout { 30dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi 31dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi private static final long TIMEOUT_MS = 10 * 1000; 32dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi private final ActivityManagerService mService; 33dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi private final ActivityStackSupervisor mSupervisor; 34dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi private final Handler mHandler; 35dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi private final Rect mCurrentDockedBounds = new Rect(); 36dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi 37dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi private final Runnable mTimeoutRunnable = new Runnable() { 38dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi @Override 39dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi public void run() { 40dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi synchronized (mService) { 41dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi mSupervisor.resizeDockedStackLocked(mCurrentDockedBounds, null, null, null, null, 42dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi PRESERVE_WINDOWS); 43dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi } 44dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi } 45dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi }; 46dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi 47dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi ResizeDockedStackTimeout(ActivityManagerService service, ActivityStackSupervisor supervisor, 48dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi Handler handler) { 49dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi mService = service; 50dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi mSupervisor = supervisor; 51dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi mHandler = handler; 52dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi } 53dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi 54dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi void notifyResizing(Rect dockedBounds, boolean hasTempBounds) { 55dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi mHandler.removeCallbacks(mTimeoutRunnable); 56dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi if (!hasTempBounds) { 57dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi return; 58dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi } 59dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi mCurrentDockedBounds.set(dockedBounds); 60dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi mHandler.postDelayed(mTimeoutRunnable, TIMEOUT_MS); 61dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi } 62dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi 63dc249c4ae7c7838928f53f151bfda8a6817b8784Jorim Jaggi} 64