/* * Copyright (C) 2015 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.am; import android.graphics.Rect; import android.os.Handler; import static com.android.server.am.ActivityStackSupervisor.PRESERVE_WINDOWS; /** * When resizing the docked stack, a caller can temporarily supply task bounds that are different * from the stack bounds. In order to return to a sane state if the caller crashes or has a bug, * this class manages this cycle. */ class ResizeDockedStackTimeout { private static final long TIMEOUT_MS = 10 * 1000; private final ActivityManagerService mService; private final ActivityStackSupervisor mSupervisor; private final Handler mHandler; private final Rect mCurrentDockedBounds = new Rect(); private final Runnable mTimeoutRunnable = new Runnable() { @Override public void run() { synchronized (mService) { mSupervisor.resizeDockedStackLocked(mCurrentDockedBounds, null, null, null, null, PRESERVE_WINDOWS); } } }; ResizeDockedStackTimeout(ActivityManagerService service, ActivityStackSupervisor supervisor, Handler handler) { mService = service; mSupervisor = supervisor; mHandler = handler; } void notifyResizing(Rect dockedBounds, boolean hasTempBounds) { mHandler.removeCallbacks(mTimeoutRunnable); if (!hasTempBounds) { return; } mCurrentDockedBounds.set(dockedBounds); mHandler.postDelayed(mTimeoutRunnable, TIMEOUT_MS); } }