RecentsConfiguration.java revision 2f2ca08baa072376b3dfd60506625496aa05903f
1303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung/*
2303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * Copyright (C) 2014 The Android Open Source Project
3303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung *
4303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * Licensed under the Apache License, Version 2.0 (the "License");
5303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * you may not use this file except in compliance with the License.
6303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * You may obtain a copy of the License at
7303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung *
8303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung *      http://www.apache.org/licenses/LICENSE-2.0
9303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung *
10303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * Unless required by applicable law or agreed to in writing, software
11303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * distributed under the License is distributed on an "AS IS" BASIS,
12303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * See the License for the specific language governing permissions and
14303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * limitations under the License.
15303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung */
16303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
17303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungpackage com.android.systemui.recents;
18303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
19303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.content.Context;
20c620bafde865f7599401f5adf0521820ee9d4a9cWinson Chungimport android.content.res.Resources;
21303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.graphics.Rect;
22303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.util.DisplayMetrics;
23303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.util.TypedValue;
242f2ca08baa072376b3dfd60506625496aa05903fWinson Chungimport com.android.systemui.R;
25303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
26303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
27303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung/** A static Recents configuration for the current context
28303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * NOTE: We should not hold any references to a Context from a static instance */
29303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungpublic class RecentsConfiguration {
30303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    static RecentsConfiguration sInstance;
31303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
32303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    DisplayMetrics mDisplayMetrics;
33303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
34303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    public Rect systemInsets = new Rect();
35c620bafde865f7599401f5adf0521820ee9d4a9cWinson Chung    public Rect displayRect = new Rect();
36303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
372f2ca08baa072376b3dfd60506625496aa05903fWinson Chung    public float animationDpsMovementPerSecond;
382f2ca08baa072376b3dfd60506625496aa05903fWinson Chung
392f2ca08baa072376b3dfd60506625496aa05903fWinson Chung    public int filteringCurrentViewsMinAnimDuration;
402f2ca08baa072376b3dfd60506625496aa05903fWinson Chung    public int filteringNewViewsMinAnimDuration;
412f2ca08baa072376b3dfd60506625496aa05903fWinson Chung
42303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    /** Private constructor */
43303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    private RecentsConfiguration() {}
44303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
45303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    /** Updates the configuration to the current context */
46303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    public static RecentsConfiguration reinitialize(Context context) {
47303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung        if (sInstance == null) {
48303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung            sInstance = new RecentsConfiguration();
49303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung        }
50303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung        sInstance.update(context);
51303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung        return sInstance;
52303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    }
53303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
54303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    /** Returns the current recents configuration */
55303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    public static RecentsConfiguration getInstance() {
56303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung        return sInstance;
57303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    }
58303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
59303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    /** Updates the state, given the specified context */
60303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    void update(Context context) {
61c620bafde865f7599401f5adf0521820ee9d4a9cWinson Chung        Resources res = context.getResources();
62c620bafde865f7599401f5adf0521820ee9d4a9cWinson Chung        DisplayMetrics dm = res.getDisplayMetrics();
63c620bafde865f7599401f5adf0521820ee9d4a9cWinson Chung        mDisplayMetrics = dm;
64303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
65c620bafde865f7599401f5adf0521820ee9d4a9cWinson Chung        displayRect.set(0, 0, dm.widthPixels, dm.heightPixels);
662f2ca08baa072376b3dfd60506625496aa05903fWinson Chung        animationDpsMovementPerSecond =
672f2ca08baa072376b3dfd60506625496aa05903fWinson Chung                res.getDimensionPixelSize(R.dimen.recents_animation_movement_in_dps_per_second);
682f2ca08baa072376b3dfd60506625496aa05903fWinson Chung        filteringCurrentViewsMinAnimDuration =
692f2ca08baa072376b3dfd60506625496aa05903fWinson Chung                res.getInteger(R.integer.recents_filter_animate_current_views_min_duration);
702f2ca08baa072376b3dfd60506625496aa05903fWinson Chung        filteringNewViewsMinAnimDuration =
712f2ca08baa072376b3dfd60506625496aa05903fWinson Chung                res.getInteger(R.integer.recents_filter_animate_new_views_min_duration);
72303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    }
73303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
74303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    public void updateSystemInsets(Rect insets) {
75303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung        systemInsets.set(insets);
76303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    }
77303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung
78303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    /** Converts from DPs to PXs */
79303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    public int pxFromDp(float size) {
80303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung        return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
81303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung                size, mDisplayMetrics));
82303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    }
83303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    /** Converts from SPs to PXs */
84303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    public int pxFromSp(float size) {
85303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung        return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
86303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung                size, mDisplayMetrics));
87303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung    }
88303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung}
89