blob: ce7855362a58b03681f390f750f483dd542bdc1d [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>();
Winson Chungc58497e2013-09-03 17:48:37 -070059 boolean hasAA = !AppsCustomizePagedView.DISABLE_ALL_APPS;
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 Agrawald85ee9b2013-12-09 20:39:28 +000063 255, 300, 2, 3, 48, 13, (hasAA ? 5 : 4), 48));
Winson Chung5f8afe62013-08-12 16:19:28 -070064 deviceProfiles.add(new DeviceProfile("Shorter Stubby",
Nilesh Agrawald85ee9b2013-12-09 20:39:28 +000065 255, 400, 3, 3, 48, 13, (hasAA ? 5 : 4), 48));
Winson Chung5f8afe62013-08-12 16:19:28 -070066 deviceProfiles.add(new DeviceProfile("Short Stubby",
Nilesh Agrawald85ee9b2013-12-09 20:39:28 +000067 275, 420, 3, 4, 48, 13, (hasAA ? 5 : 4), 48));
Winson Chung5f8afe62013-08-12 16:19:28 -070068 deviceProfiles.add(new DeviceProfile("Stubby",
Nilesh Agrawald85ee9b2013-12-09 20:39:28 +000069 255, 450, 3, 4, 48, 13, (hasAA ? 5 : 4), 48));
Winson Chung5f8afe62013-08-12 16:19:28 -070070 deviceProfiles.add(new DeviceProfile("Nexus S",
Nilesh Agrawald85ee9b2013-12-09 20:39:28 +000071 296, 491.33f, 4, 4, 48, 13, (hasAA ? 5 : 4), 48));
Winson Chung5f8afe62013-08-12 16:19:28 -070072 deviceProfiles.add(new DeviceProfile("Nexus 4",
Nilesh Agrawald85ee9b2013-12-09 20:39:28 +000073 359, 518, 4, 4, DEFAULT_ICON_SIZE_DP, 13, (hasAA ? 5 : 4), 56));
Winson Chung5f8afe62013-08-12 16:19:28 -070074 // The tablet profile is odd in that the landscape orientation
75 // also includes the nav bar on the side
76 deviceProfiles.add(new DeviceProfile("Nexus 7",
Winson Chung2c130e12013-11-19 15:10:12 -080077 575, 904, 5, 5, 72, 14.4f, 7, 60));
Winson Chung5f8afe62013-08-12 16:19:28 -070078 // Larger tablet profiles always have system bars on the top & bottom
79 deviceProfiles.add(new DeviceProfile("Nexus 10",
Winson Chung2c130e12013-11-19 15:10:12 -080080 727, 1207, 5, 5, 80, 14.4f, 7, 64));
Winson Chung5f8afe62013-08-12 16:19:28 -070081 /*
82 deviceProfiles.add(new DeviceProfile("Nexus 7",
83 600, 960, 5, 5, 72, 14.4f, 5, 60));
84 deviceProfiles.add(new DeviceProfile("Nexus 10",
Winson Chungc58497e2013-09-03 17:48:37 -070085 800, 1280, 5, 5, 80, 14.4f, (hasAA ? 7 : 6), 64));
Winson Chung5f8afe62013-08-12 16:19:28 -070086 */
87 deviceProfiles.add(new DeviceProfile("20-inch Tablet",
88 1527, 2527, 7, 7, 100, 20, 7, 72));
89 mMinWidth = dpiFromPx(minWidthPx, dm);
90 mMinHeight = dpiFromPx(minHeightPx, dm);
Winson Chungf7d45852013-10-10 18:57:15 -070091 mProfile = new DeviceProfile(context, deviceProfiles,
Winson Chung892c74d2013-08-22 16:15:50 -070092 mMinWidth, mMinHeight,
Winson Chung5f8afe62013-08-12 16:19:28 -070093 widthPx, heightPx,
Winson Chung892c74d2013-08-22 16:15:50 -070094 awPx, ahPx,
Winson Chung5f8afe62013-08-12 16:19:28 -070095 resources);
96 }
97
Winson Chungb3800242013-10-24 11:01:54 -070098 public DeviceProfile getDeviceProfile() {
Winson Chung5f8afe62013-08-12 16:19:28 -070099 return mProfile;
100 }
101
102 public String toString() {
103 return "-------- DYNAMIC GRID ------- \n" +
104 "Wd: " + mProfile.minWidthDps + ", Hd: " + mProfile.minHeightDps +
105 ", W: " + mProfile.widthPx + ", H: " + mProfile.heightPx +
106 " [r: " + mProfile.numRows + ", c: " + mProfile.numColumns +
Winson Chung6e1c0d32013-10-25 15:24:24 -0700107 ", is: " + mProfile.iconSizePx + ", its: " + mProfile.iconTextSizePx +
Winson Chung5f8afe62013-08-12 16:19:28 -0700108 ", cw: " + mProfile.cellWidthPx + ", ch: " + mProfile.cellHeightPx +
109 ", hc: " + mProfile.numHotseatIcons + ", his: " + mProfile.hotseatIconSizePx + "]";
110 }
111}