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