blob: cbde99113f312622a15c1d7b681e8f4aac790811 [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",
Nilesh Agrawalda41ea62013-12-09 14:17:49 -080063 255, 300, 2, 3, 48, 13, (hasAA ? 5 : 5), 48));
Winson Chung5f8afe62013-08-12 16:19:28 -070064 deviceProfiles.add(new DeviceProfile("Shorter Stubby",
Nilesh Agrawalda41ea62013-12-09 14:17:49 -080065 255, 400, 3, 3, 48, 13, (hasAA ? 5 : 5), 48));
Winson Chung5f8afe62013-08-12 16:19:28 -070066 deviceProfiles.add(new DeviceProfile("Short Stubby",
Nilesh Agrawalda41ea62013-12-09 14:17:49 -080067 275, 420, 3, 4, 48, 13, (hasAA ? 5 : 5), 48));
Winson Chung5f8afe62013-08-12 16:19:28 -070068 deviceProfiles.add(new DeviceProfile("Stubby",
Nilesh Agrawalda41ea62013-12-09 14:17:49 -080069 255, 450, 3, 4, 48, 13, (hasAA ? 5 : 5), 48));
Winson Chung5f8afe62013-08-12 16:19:28 -070070 deviceProfiles.add(new DeviceProfile("Nexus S",
Nilesh Agrawalda41ea62013-12-09 14:17:49 -080071 296, 491.33f, 4, 4, 48, 13, (hasAA ? 5 : 5), 48));
Winson Chung5f8afe62013-08-12 16:19:28 -070072 deviceProfiles.add(new DeviceProfile("Nexus 4",
Nilesh Agrawalda41ea62013-12-09 14:17:49 -080073 359, 518, 4, 4, DEFAULT_ICON_SIZE_DP, 13, (hasAA ? 5 : 5), 56));
Winson Chung6d110112014-01-16 14:03:55 -080074 deviceProfiles.add(new DeviceProfile("Large Phone",
75 400, 680, 5, 5, 64, 14.4f, 5, 56));
Winson Chung5f8afe62013-08-12 16:19:28 -070076 // The tablet profile is odd in that the landscape orientation
77 // also includes the nav bar on the side
78 deviceProfiles.add(new DeviceProfile("Nexus 7",
Winson Chung59a488a2013-12-10 12:32:14 -080079 575, 904, 5, 6, 72, 14.4f, 7, 60));
Winson Chung5f8afe62013-08-12 16:19:28 -070080 // Larger tablet profiles always have system bars on the top & bottom
81 deviceProfiles.add(new DeviceProfile("Nexus 10",
Winson Chung59a488a2013-12-10 12:32:14 -080082 727, 1207, 5, 6, 76, 14.4f, 7, 64));
Winson Chung5f8afe62013-08-12 16:19:28 -070083 /*
84 deviceProfiles.add(new DeviceProfile("Nexus 7",
85 600, 960, 5, 5, 72, 14.4f, 5, 60));
86 deviceProfiles.add(new DeviceProfile("Nexus 10",
Winson Chungc58497e2013-09-03 17:48:37 -070087 800, 1280, 5, 5, 80, 14.4f, (hasAA ? 7 : 6), 64));
Winson Chung5f8afe62013-08-12 16:19:28 -070088 */
89 deviceProfiles.add(new DeviceProfile("20-inch Tablet",
90 1527, 2527, 7, 7, 100, 20, 7, 72));
91 mMinWidth = dpiFromPx(minWidthPx, dm);
92 mMinHeight = dpiFromPx(minHeightPx, dm);
Winson Chungf7d45852013-10-10 18:57:15 -070093 mProfile = new DeviceProfile(context, deviceProfiles,
Winson Chung892c74d2013-08-22 16:15:50 -070094 mMinWidth, mMinHeight,
Winson Chung5f8afe62013-08-12 16:19:28 -070095 widthPx, heightPx,
Winson Chung892c74d2013-08-22 16:15:50 -070096 awPx, ahPx,
Winson Chung5f8afe62013-08-12 16:19:28 -070097 resources);
98 }
99
Winson Chungb3800242013-10-24 11:01:54 -0700100 public DeviceProfile getDeviceProfile() {
Winson Chung5f8afe62013-08-12 16:19:28 -0700101 return mProfile;
102 }
103
104 public String toString() {
105 return "-------- DYNAMIC GRID ------- \n" +
106 "Wd: " + mProfile.minWidthDps + ", Hd: " + mProfile.minHeightDps +
107 ", W: " + mProfile.widthPx + ", H: " + mProfile.heightPx +
108 " [r: " + mProfile.numRows + ", c: " + mProfile.numColumns +
Winson Chung6e1c0d32013-10-25 15:24:24 -0700109 ", is: " + mProfile.iconSizePx + ", its: " + mProfile.iconTextSizePx +
Winson Chung5f8afe62013-08-12 16:19:28 -0700110 ", cw: " + mProfile.cellWidthPx + ", ch: " + mProfile.cellHeightPx +
111 ", hc: " + mProfile.numHotseatIcons + ", his: " + mProfile.hotseatIconSizePx + "]";
112 }
113}