Discuz! Board

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 5|回复: 5
打印 上一主题 下一主题

解决Luancher的overscan设置不一致的问题

[复制链接]

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
跳转到指定楼层
楼主
发表于 2016-5-1 10:40:22 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
1,setDisplayOverscan这个函数起作用的:
这个函数是被谁调用的呢?
2,根据搜索的结果:
base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java:    public void setDisplayOverscan(Display display, int left, int top, int right, int bottom) {
base/core/java/android/view/WindowManagerPolicy.java:    public void setDisplayOverscan(Display display, int left, int top, int right, int bottom);
base/services/core/java/com/android/server/wm/WindowManagerService.java:        mPolicy.setDisplayOverscan(displayContent.getDisplay(),

应该是WindowManagerService.java调用的。
    private void configureDisplayPolicyLocked(DisplayContent displayContent) {
        mPolicy.setInitialDisplaySize(displayContent.getDisplay(),
                displayContent.mBaseDisplayWidth,
                displayContent.mBaseDisplayHeight,
                displayContent.mBaseDisplayDensity);

        DisplayInfo displayInfo = displayContent.getDisplayInfo();
        mPolicy.setDisplayOverscan(displayContent.getDisplay(),
                displayInfo.overscanLeft, displayInfo.overscanTop,
                displayInfo.overscanRight, displayInfo.overscanBottom);
    }


3,继续:
    private void setOverscanLocked(DisplayContent displayContent,
            int left, int top, int right, int bottom) {
        final DisplayInfo displayInfo = displayContent.getDisplayInfo();
        synchronized (displayContent.mDisplaySizeLock) {
            displayInfo.overscanLeft = left;
            displayInfo.overscanTop = top;
            displayInfo.overscanRight = right;
            displayInfo.overscanBottom = bottom;
        }

        mDisplaySettings.setOverscanLocked(displayInfo.name, left, top, right, bottom);
        mDisplaySettings.writeSettingsLocked();

        reconfigureDisplayLocked(displayContent);
    }

4,    @Override
    public void setOverscan(int displayId, int left, int top, int right, int bottom) {
        if (mContext.checkCallingOrSelfPermission(
                android.Manifest.permission.WRITE_SECURE_SETTINGS) !=
                PackageManager.PERMISSION_GRANTED) {
            throw new SecurityException("Must hold permission " +
                    android.Manifest.permission.WRITE_SECURE_SETTINGS);
        }
        final long ident = Binder.clearCallingIdentity();
        try {
            synchronized(mWindowMap) {
                DisplayContent displayContent = getDisplayContentLocked(displayId);
                if (displayContent != null) {
                    setOverscanLocked(displayContent, left, top, right, bottom);
                }
            }
        } finally {
            Binder.restoreCallingIdentity(ident);
        }
    }

5,继续:
base/cmds/wm/src/com/android/commands/wm/Wm.java

    private void runDisplayOverscan() throws Exception {
        String overscanStr = nextArgRequired();
        Rect rect = new Rect();
        int density;
        if ("reset".equals(overscanStr)) {
            rect.set(0, 0, 0, 0);
        } else {
            final Pattern FLATTENED_PATTERN = Pattern.compile(
                    "(-?\\d+),(-?\\d+),(-?\\d+),(-?\\d+)");
            Matcher matcher = FLATTENED_PATTERN.matcher(overscanStr);
            if (!matcher.matches()) {
                System.err.println("Error: bad rectangle arg: " + overscanStr);
                return;
            }
            rect.left = Integer.parseInt(matcher.group(1));
            rect.top = Integer.parseInt(matcher.group(2));
            rect.right = Integer.parseInt(matcher.group(3));
            rect.bottom = Integer.parseInt(matcher.group(4));
        }

        try {
            mWm.setOverscan(Display.DEFAULT_DISPLAY, rect.left, rect.top, rect.right, rect.bottom);
        } catch (RemoteException e) {
        }
    }


是这里导致的吗?
回复

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
沙发
 楼主| 发表于 2016-5-1 11:31:01 | 只看该作者
本帖最后由 zangcf 于 2016-5-1 12:01 编辑

debug WMS中间的几个函数有没有被调用过呢?
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
板凳
 楼主| 发表于 2016-5-1 20:10:45 | 只看该作者
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
地板
 楼主| 发表于 2016-5-1 20:20:24 | 只看该作者
kernel-3.10/arch/arm64/configs/konka6735_bk929_l_debug_defconfig:::
中间有:
CONFIG_LCM_HEIGHT="1920"
CONFIG_LCM_WIDTH="1080"
device/konka/konka6735_bk929_l/ProjectConfig.mk:::
中间有
LCM_HEIGHT = 1920
LCM_WIDTH = 1080
这里参数如果修改会如何呢?
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
5#
 楼主| 发表于 2016-5-2 07:27:15 | 只看该作者
修改这个文件:
/media/doraemon/express/alps_ok/packages/apps/Launcher3/src/com/android/launcher3/Launcher.java
    protected void onCreate(Bundle savedInstanceState) {
        if (DEBUG_STRICT_MODE) {
            StrictMode.setThreadPolicy(new StrictMode.ThreadPolicy.Builder()
                    .detectDiskReads()
                    .detectDiskWrites()
                    .detectNetwork()   // or .detectAll() for all detectable problems
                    .penaltyLog()
                    .build());
            StrictMode.setVmPolicy(new StrictMode.VmPolicy.Builder()
                    .detectLeakedSqlLiteObjects()
                    .detectLeakedClosableObjects()
                    .penaltyLog()
                    .penaltyDeath()
                    .build());
        }

        super.onCreate(savedInstanceState);

        /// M: [OP09]Whether Edit and Hide Apps support or not.@{
        mSupportEditAndHideApps = LauncherExtPlugin.getInstance().getWorkspaceExt(
                          this.getApplicationContext()).supportEditAndHideApps();
        //}@

        LauncherAppState.setApplicationContext(getApplicationContext());
        LauncherAppState app = LauncherAppState.getInstance();
        LauncherAppState.getLauncherProvider().setLauncherProviderChangeListener(this);

        /// M: Add for smart book feature. Change DB if UI layout is changed.
        boolean isDatabaseIdChanged = false;
        if (SystemProperties.get("ro.mtk_smartbook_support").equals("1")) {
            int originalDatabaseId = app.getLauncherProvider().getDatabaseId();
            int newDatabaseId = getResources().getInteger(R.integer.database_id);
            if (LauncherLog.DEBUG) {
                LauncherLog.d(TAG, "+++++++++[Smartbook or Phone+++++++++"
                    + "\n" + "originalDatabaseId = " + originalDatabaseId
            + "\n" + "newDatabaseId = " + newDatabaseId
                    + "\n" + "+++++++++Smartbook or Phone]+++++++++");
            }
            if (originalDatabaseId != newDatabaseId) {
                isDatabaseIdChanged = true;
                app.updateScreenInfo();
                app.getIconCache().flush();
                Utilities.initStatics(this);
                app.getLauncherProvider().setDatabaseId(newDatabaseId);
            }
        }

        // Determine the dynamic grid properties
        Point smallestSize = new Point();
        Point largestSize = new Point();
        Point realSize = new Point();
        Display display = getWindowManager().getDefaultDisplay();
        display.getCurrentSizeRange(smallestSize, largestSize);
        display.getRealSize(realSize);
        DisplayMetrics dm = new DisplayMetrics();
        display.getMetrics(dm);

//zcfdebug++<<               
                realSize.x=realSize.x/2;
                dm.widthPixels=dm.widthPixels/2;
//zcfdebug>>++
        // Lazy-initialize the dynamic grid
        /// M: Add for smart book feature. Force re-init dynamic grid if database ID is changed.
        DeviceProfile grid = app.initDynamicGrid(this,
                Math.min(smallestSize.x, smallestSize.y),
                Math.min(largestSize.x, largestSize.y),
                realSize.x, realSize.y,
                dm.widthPixels, dm.heightPixels, isDatabaseIdChanged);
这样,图标就不乱了
回复 支持 反对

使用道具 举报

1198

主题

2060

帖子

7058

积分

超级版主

Rank: 8Rank: 8

积分
7058
6#
 楼主| 发表于 2016-5-23 18:25:28 | 只看该作者
注意新的目录不是仅仅/system/app
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Comsenz Inc.

GMT+8, 2025-12-14 18:49 , Processed in 0.013379 second(s), 8 queries , Apc On.

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表