トラッキング コード

1/27/2012

Phone mode or Tablet mode in Ice Cream Sandwich ?

ICS has Phone UI Mode and Tablet UI Mode.
How to change Phone / Tablet in Android Frameworks ?


Definition of UI Mode

you can find in wake up Sequence.


ServerThread#run()
- WindowManagerService#displayReady
- PhoneWindowManagerService#setInitialDisplaySize


Check in PhoneWindowManagerService#setInitialDisplaySize.


// Determine whether the status bar can hide based on the size
        // of the screen.  We assume sizes > 600dp are tablets where we
        // will use the system bar.
        int shortSizeDp = shortSize
                * DisplayMetrics.DENSITY_DEFAULT
                / DisplayMetrics.DENSITY_DEVICE;
        mStatusBarCanHide = shortSizeDp < 600;


DisplayMetrics.DENSITY_DEFAULT is define in DisplayMetrics.java

/**
     * Standard quantized DPI for medium-density screens.
     */
    public static final int DENSITY_MEDIUM = 160;

    /**
     * The reference density used throughout the system.
     */
    public static final int DENSITY_DEFAULT = DENSITY_MEDIUM;

    /**
     * The device's density.
     * @hide becase eventually this should be able to change while
     * running, so shouldn't be a constant.
     */
    public static final int DENSITY_DEVICE = getDeviceDensity();

    private static int getDeviceDensity() {
        // qemu.sf.lcd_density can be used to override ro.sf.lcd_density
        // when running in the emulator, allowing for dynamic configurations.
        // The reason for this is that ro.sf.lcd_density is write-once and is
        // set by the init process when it parses build.prop before anything else.
        return SystemProperties.getInt("qemu.sf.lcd_density",
                SystemProperties.getInt("ro.sf.lcd_density", DENSITY_DEFAULT));
    }


Case of Crespo(Nexus s),
swWidth = 480
  ro.sf.lcd_density=240
  shortSizeDp = 480 * 160 / 240 = 320
Crespo has Phone UI mode.


Case of maguro(Galaxy Nexus),
swWidth = 720
  ro.sf.lcd_density=320
  shortSizeDp = 720 * 160 / 320 = 360
Maguro has Phone UI mode.


If you want to use Maguro with Tablet UI Mode, change lcd_density from 320 to 160.
swWidth = 720
  ro.sf.lcd_density=160
  shortSizeDp = 720 * 160 / 160 = 720



Check !!

\frameworks\base\policy\src\com\android\internal\policy\impl
- PhoneWindowManagerService.java

\frameworks\base\core\java\android\util
- DisplayMetrics.java

\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar
- all directory ( StatusBar / SystemBar)

No comments:

Post a Comment