RecentsConfiguration.java revision b44c24fb50845dfbc1f49e78085cf5e01a32067f
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; 206736905dc0e10689f7c63f6da43b31325caf966aWinson Chungimport android.content.res.Configuration; 21c620bafde865f7599401f5adf0521820ee9d4a9cWinson Chungimport android.content.res.Resources; 22303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.graphics.Rect; 23303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.util.DisplayMetrics; 24303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungimport android.util.TypedValue; 252f2ca08baa072376b3dfd60506625496aa05903fWinson Chungimport com.android.systemui.R; 26303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 27303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 28303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung/** A static Recents configuration for the current context 29303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung * NOTE: We should not hold any references to a Context from a static instance */ 30303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chungpublic class RecentsConfiguration { 31303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung static RecentsConfiguration sInstance; 32303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 33303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung DisplayMetrics mDisplayMetrics; 34303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 35303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public Rect systemInsets = new Rect(); 36c620bafde865f7599401f5adf0521820ee9d4a9cWinson Chung public Rect displayRect = new Rect(); 37303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 3800350bb3a03e15cbde74db9a07ab98eb08b4e4dfWinson Chung public float animationPxMovementPerSecond; 392f2ca08baa072376b3dfd60506625496aa05903fWinson Chung 402f2ca08baa072376b3dfd60506625496aa05903fWinson Chung public int filteringCurrentViewsMinAnimDuration; 412f2ca08baa072376b3dfd60506625496aa05903fWinson Chung public int filteringNewViewsMinAnimDuration; 420d767551c55d9e594a0b944bd1926c21a344b5aeWinson Chung public int taskBarEnterAnimDuration; 432f2ca08baa072376b3dfd60506625496aa05903fWinson Chung 44b44c24fb50845dfbc1f49e78085cf5e01a32067fWinson Chung public boolean launchedWithThumbnailAnimation; 45b44c24fb50845dfbc1f49e78085cf5e01a32067fWinson Chung 46303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung /** Private constructor */ 47303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung private RecentsConfiguration() {} 48303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 49303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung /** Updates the configuration to the current context */ 50303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public static RecentsConfiguration reinitialize(Context context) { 51303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung if (sInstance == null) { 52303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung sInstance = new RecentsConfiguration(); 53303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 54303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung sInstance.update(context); 55303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung return sInstance; 56303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 57303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 58303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung /** Returns the current recents configuration */ 59303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public static RecentsConfiguration getInstance() { 60303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung return sInstance; 61303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 62303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 63303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung /** Updates the state, given the specified context */ 64303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung void update(Context context) { 65c620bafde865f7599401f5adf0521820ee9d4a9cWinson Chung Resources res = context.getResources(); 66c620bafde865f7599401f5adf0521820ee9d4a9cWinson Chung DisplayMetrics dm = res.getDisplayMetrics(); 67c620bafde865f7599401f5adf0521820ee9d4a9cWinson Chung mDisplayMetrics = dm; 68303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 696736905dc0e10689f7c63f6da43b31325caf966aWinson Chung boolean isLandscape = res.getConfiguration().orientation == 706736905dc0e10689f7c63f6da43b31325caf966aWinson Chung Configuration.ORIENTATION_LANDSCAPE; 716736905dc0e10689f7c63f6da43b31325caf966aWinson Chung Console.log(Constants.DebugFlags.UI.MeasureAndLayout, 726736905dc0e10689f7c63f6da43b31325caf966aWinson Chung "[RecentsConfiguration|orientation]", isLandscape ? "Landscape" : "Portrait", 736736905dc0e10689f7c63f6da43b31325caf966aWinson Chung Console.AnsiGreen); 746736905dc0e10689f7c63f6da43b31325caf966aWinson Chung 75c620bafde865f7599401f5adf0521820ee9d4a9cWinson Chung displayRect.set(0, 0, dm.widthPixels, dm.heightPixels); 7600350bb3a03e15cbde74db9a07ab98eb08b4e4dfWinson Chung animationPxMovementPerSecond = 772f2ca08baa072376b3dfd60506625496aa05903fWinson Chung res.getDimensionPixelSize(R.dimen.recents_animation_movement_in_dps_per_second); 782f2ca08baa072376b3dfd60506625496aa05903fWinson Chung filteringCurrentViewsMinAnimDuration = 792f2ca08baa072376b3dfd60506625496aa05903fWinson Chung res.getInteger(R.integer.recents_filter_animate_current_views_min_duration); 802f2ca08baa072376b3dfd60506625496aa05903fWinson Chung filteringNewViewsMinAnimDuration = 812f2ca08baa072376b3dfd60506625496aa05903fWinson Chung res.getInteger(R.integer.recents_filter_animate_new_views_min_duration); 820d767551c55d9e594a0b944bd1926c21a344b5aeWinson Chung taskBarEnterAnimDuration = 830d767551c55d9e594a0b944bd1926c21a344b5aeWinson Chung res.getInteger(R.integer.recents_animate_task_bar_enter_duration); 84303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 85303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 86303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public void updateSystemInsets(Rect insets) { 87303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung systemInsets.set(insets); 88303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 89303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung 90303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung /** Converts from DPs to PXs */ 91303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public int pxFromDp(float size) { 92303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP, 93303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung size, mDisplayMetrics)); 94303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 95303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung /** Converts from SPs to PXs */ 96303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung public int pxFromSp(float size) { 97303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung return Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP, 98303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung size, mDisplayMetrics)); 99303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung } 100303e1ff1fec8b240b587bb18b981247a99833aa8Winson Chung} 101