blob: aa08148d2a06c4f70d712adc238716d75e1b3ce1 [file] [log] [blame]
Winson Chung5f8afe62013-08-12 16:19:28 -07001/*
2 * Copyright (C) 2008 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package com.android.launcher3;
18
Winson Chungf7d45852013-10-10 18:57:15 -070019import android.content.Context;
Winson Chung5f8afe62013-08-12 16:19:28 -070020import android.content.res.Resources;
Winson Chung5f8afe62013-08-12 16:19:28 -070021import android.util.DisplayMetrics;
22import android.util.TypedValue;
Winson Chung5f8afe62013-08-12 16:19:28 -070023
24import java.util.ArrayList;
Winson Chung5f8afe62013-08-12 16:19:28 -070025
26
Winson Chung5f8afe62013-08-12 16:19:28 -070027public class DynamicGrid {
28 @SuppressWarnings("unused")
29 private static final String TAG = "DynamicGrid";
30
31 private DeviceProfile mProfile;
32 private float mMinWidth;
33 private float mMinHeight;
34
Winson Chung67ca7e42013-10-31 16:53:19 -070035 // This is a static that we use for the default icon size on a 4/5-inch phone
36 static float DEFAULT_ICON_SIZE_DP = 60;
37 static float DEFAULT_ICON_SIZE_PX = 0;
38
Winson Chung892c74d2013-08-22 16:15:50 -070039 public static float dpiFromPx(int size, DisplayMetrics metrics){
Winson Chung5f8afe62013-08-12 16:19:28 -070040 float densityRatio = (float) metrics.densityDpi / DisplayMetrics.DENSITY_DEFAULT;
Winson Chung892c74d2013-08-22 16:15:50 -070041 return (size / densityRatio);
42 }
43 public static int pxFromDp(float size, DisplayMetrics metrics) {
44 return (int) Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_DIP,
45 size, metrics));
46 }
47 public static int pxFromSp(float size, DisplayMetrics metrics) {
48 return (int) Math.round(TypedValue.applyDimension(TypedValue.COMPLEX_UNIT_SP,
49 size, metrics));
Winson Chung5f8afe62013-08-12 16:19:28 -070050 }
51
Winson Chungf7d45852013-10-10 18:57:15 -070052 public DynamicGrid(Context context, Resources resources,
53 int minWidthPx, int minHeightPx,
Winson Chung892c74d2013-08-22 16:15:50 -070054 int widthPx, int heightPx,
55 int awPx, int ahPx) {
Winson Chung5f8afe62013-08-12 16:19:28 -070056 DisplayMetrics dm = resources.getDisplayMetrics();
57 ArrayList<DeviceProfile> deviceProfiles =
58 new ArrayList<DeviceProfile>();
Nilesh Agrawal16f3ea82014-01-09 17:14:01 -080059 boolean hasAA = !LauncherAppState.isDisableAllApps();
Winson Chung67ca7e42013-10-31 16:53:19 -070060 DEFAULT_ICON_SIZE_PX = pxFromDp(DEFAULT_ICON_SIZE_DP, dm);
Winson Chung5f8afe62013-08-12 16:19:28 -070061 // Our phone profiles include the bar sizes in each orientation
62 deviceProfiles.add(new DeviceProfile("Super Short Stubby",
Adam Cohencee8c662014-10-16 09:49:52 -070063 255, 300, 2, 3, 48, 13, (hasAA ? 3 : 5), 48, R.xml.default_workspace_4x4));
Winson Chung5f8afe62013-08-12 16:19:28 -070064 deviceProfiles.add(new DeviceProfile("Shorter Stubby",
Adam Cohencee8c662014-10-16 09:49:52 -070065 255, 400, 3, 3, 48, 13, (hasAA ? 3 : 5), 48, R.xml.default_workspace_4x4));
Winson Chung5f8afe62013-08-12 16:19:28 -070066 deviceProfiles.add(new DeviceProfile("Short Stubby",
Adam Cohencee8c662014-10-16 09:49:52 -070067 275, 420, 3, 4, 48, 13, (hasAA ? 5 : 5), 48, R.xml.default_workspace_4x4));
Winson Chung5f8afe62013-08-12 16:19:28 -070068 deviceProfiles.add(new DeviceProfile("Stubby",
Adam Cohencee8c662014-10-16 09:49:52 -070069 255, 450, 3, 4, 48, 13, (hasAA ? 5 : 5), 48, R.xml.default_workspace_4x4));
Winson Chung5f8afe62013-08-12 16:19:28 -070070 deviceProfiles.add(new DeviceProfile("Nexus S",
Adam Cohencee8c662014-10-16 09:49:52 -070071 296, 491.33f, 4, 4, 48, 13, (hasAA ? 5 : 5), 48, R.xml.default_workspace_4x4));
Winson Chung5f8afe62013-08-12 16:19:28 -070072 deviceProfiles.add(new DeviceProfile("Nexus 4",
Adam Cohencee8c662014-10-16 09:49:52 -070073 335, 567, 4, 4, DEFAULT_ICON_SIZE_DP, 13, (hasAA ? 5 : 5), 56, R.xml.default_workspace_4x4));
Winson Chung3abfd162014-01-17 14:43:02 -080074 deviceProfiles.add(new DeviceProfile("Nexus 5",
Adam Cohencee8c662014-10-16 09:49:52 -070075 359, 567, 4, 4, DEFAULT_ICON_SIZE_DP, 13, (hasAA ? 5 : 5), 56, R.xml.default_workspace_4x4));
Winson Chung6d110112014-01-16 14:03:55 -080076 deviceProfiles.add(new DeviceProfile("Large Phone",
Adam Cohencee8c662014-10-16 09:49:52 -070077 406, 694, 5, 5, 64, 14.4f, 5, 56, R.xml.default_workspace_5x5));
Winson Chung5f8afe62013-08-12 16:19:28 -070078 // The tablet profile is odd in that the landscape orientation
79 // also includes the nav bar on the side
80 deviceProfiles.add(new DeviceProfile("Nexus 7",
Adam Cohencee8c662014-10-16 09:49:52 -070081 575, 904, 5, 6, 72, 14.4f, 7, 60, R.xml.default_workspace_5x6));
Winson Chung5f8afe62013-08-12 16:19:28 -070082 // Larger tablet profiles always have system bars on the top & bottom
83 deviceProfiles.add(new DeviceProfile("Nexus 10",
Adam Cohencee8c662014-10-16 09:49:52 -070084 727, 1207, 5, 6, 76, 14.4f, 7, 64, R.xml.default_workspace_5x6));
Winson Chung5f8afe62013-08-12 16:19:28 -070085 deviceProfiles.add(new DeviceProfile("20-inch Tablet",
Adam Cohencee8c662014-10-16 09:49:52 -070086 1527, 2527, 7, 7, 100, 20, 7, 72, R.xml.default_workspace_4x4));
Winson Chung5f8afe62013-08-12 16:19:28 -070087 mMinWidth = dpiFromPx(minWidthPx, dm);
88 mMinHeight = dpiFromPx(minHeightPx, dm);
Winson Chungf7d45852013-10-10 18:57:15 -070089 mProfile = new DeviceProfile(context, deviceProfiles,
Winson Chung892c74d2013-08-22 16:15:50 -070090 mMinWidth, mMinHeight,
Winson Chung5f8afe62013-08-12 16:19:28 -070091 widthPx, heightPx,
Winson Chung892c74d2013-08-22 16:15:50 -070092 awPx, ahPx,
Winson Chung5f8afe62013-08-12 16:19:28 -070093 resources);
94 }
95
Winson Chungb3800242013-10-24 11:01:54 -070096 public DeviceProfile getDeviceProfile() {
Winson Chung5f8afe62013-08-12 16:19:28 -070097 return mProfile;
98 }
99
100 public String toString() {
101 return "-------- DYNAMIC GRID ------- \n" +
102 "Wd: " + mProfile.minWidthDps + ", Hd: " + mProfile.minHeightDps +
103 ", W: " + mProfile.widthPx + ", H: " + mProfile.heightPx +
104 " [r: " + mProfile.numRows + ", c: " + mProfile.numColumns +
Winson Chung6e1c0d32013-10-25 15:24:24 -0700105 ", is: " + mProfile.iconSizePx + ", its: " + mProfile.iconTextSizePx +
Winson Chung5f8afe62013-08-12 16:19:28 -0700106 ", cw: " + mProfile.cellWidthPx + ", ch: " + mProfile.cellHeightPx +
107 ", hc: " + mProfile.numHotseatIcons + ", his: " + mProfile.hotseatIconSizePx + "]";
108 }
109}