Android 4.0(ICS) merge handset and tablet UI together, make customer flexible to use which UI they want. On marketing nowdays, phone use phone mode directly and other product like tablet/MID/PND use tablet mode.
ICS support multi-panel in tablet mode to fully use advantage of large screen size which is the major difference with former Android version.
Following layout gives us a brief knowledge about ICS UI:
+-------------------------------------------------+
| System bar (only in phone UI) |
+-------------------------------------------------+
| (Layout with background drawable) |
| +---------------------------------------------+ |
| | Title/Action? bar (optional) |
| +---------------------------------------------+ |
| | Content, vertical extending |
| | |
| +---------------------------------------------+ |
+-------------------------------------------------+
| System bar (only in tablet UI) |
+-------------------------------------------------+
config_statusBarComponent choose which resource we want, statusBar or systemBar.if phone, use com.android.systemui.statusbar.phone.PhoneStatusBar?; while tablet, use com.android.systemui.statusbar.tablet.TabletStatusBar?. frameworks/base/packages/SystemUI/src/com/android/systemui/SystemUIService.java
public void onCreate() { // Pick status bar or system bar. IWindowManager wm = IWindowManager.Stub.asInterface( ServiceManager.getService(Context.WINDOW_SERVICE)); try { SERVICES[0] = wm.canStatusBarHide() ? R.string.config_statusBarComponent : R.string.config_systemBarComponent; } catch (RemoteException e) { Slog.w(TAG, "Failing checking whether status bar can hide", e); }
<string name="config_statusBarComponent" translatable="false"> com.android.systemui.statusbar.phone.PhoneStatusBar</string> <string name="config_systemBarComponent" translatable="false"> com.android.systemui.statusbar.tablet.TabletStatusBar<string>
public boolean canStatusBarHide() { return mStatusBarCanHide; }
int shortSizeDp = shortSize * DisplayMetrics.DENSITY_DEFAULT / DisplayMetrics.DENSITY_DEVICE; mStatusBarCanHide = shortSizeDp < 600; mStatusBarHeight = mContext.getResources().getDimensionPixelSize( mStatusBarCanHide ? com.android.internal.R.dimen.status_bar_height : com.android.internal.R.dimen.system_bar_height);
Here if shortSizeDp smaller than 600, then system use as tablet mode, otherwise phone mode. DENSITY_DEFAULT is fixed 160. Therefore, 800*480 resolution which compute as 480*160/DENSITY_DEVICE and 800*600 compute as 600*160/DENSITY_DEVICE. So 120 should be suitable value to make both needs the tablet condition.
setprop ro.sf.lcd_density 120
public static final int SCREENLAYOUT_SIZE_SMALL = 0x01; public static final int SCREENLAYOUT_SIZE_NORMAL = 0x02; public static final int SCREENLAYOUT_SIZE_LARGE = 0x03; public static final int SCREENLAYOUT_SIZE_XLARGE = 0x04;