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