android 10.0 双屏异显(1)

在android10.0上做双屏异显快一年了,现在做一个总结;便于以后查看,也便于做异显的兄弟借鉴及共同探讨。

一.android 起来默认为异显模式,并且SystemUI 与键盘启动异显。

添加文件display_settings.xml,并且将文件copy到vendor/etc/display_settings.xml
--- a/build/make/target/product/base_system.mk
+++ b/build/make/target/product/base_system.mk
@@ -392,4 +392,8 @@ PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists,\
 PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists,\
     frameworks/base/config/dirty-image-objects:system/etc/dirty-image-objects)
 
+# display_settings.xml
+PRODUCT_COPY_FILES += $(call add-to-product-copy-files-if-exists,\
+    packages/apps/ActionApps/dualfile/display_settings.xml:vendor/etc/display_settings.xml)
+


--- /dev/null
+++ b/packages/apps/ActionApps/dualfile/display_settings.xml
@@ -0,0 +1,5 @@
+<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
+<display-settings>
+<config identifier="0" />
+<display name="local:1" shouldShowSystemDecors="true" shouldShowIme="true" />
+</display-settings>

默认异显模式

--- a/frameworks/base/services/core/java/com/android/server/wm/DisplayWindowSettings.java
+++ b/frameworks/base/services/core/java/com/android/server/wm/DisplayWindowSettings.java
@@ -555,8 +556,10 @@ class DisplayWindowSettings {
                     REMOVE_CONTENT_MODE_UNDEFINED);
             entry.mShouldShowWithInsecureKeyguard = getBooleanAttribute(parser,
                     "shouldShowWithInsecureKeyguard");
-            entry.mShouldShowSystemDecors = getBooleanAttribute(parser, "shouldShowSystemDecors");
-            entry.mShouldShowIme = getBooleanAttribute(parser, "shouldShowIme");
+            //entry.mShouldShowSystemDecors = getBooleanAttribute(parser, "shouldShowSystemDecors");
+            //entry.mShouldShowIme = getBooleanAttribute(parser, "shouldShowIme");
+           entry.mShouldShowSystemDecors = true; // defual ture modify by hdb
+            entry.mShouldShowIme = true;
             entry.mFixedToUserRotation = getIntAttribute(parser, "fixedToUserRotation");
             mEntries.put(name, entry);
         }


--- a/frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
+++ b/frameworks/base/services/core/java/com/android/server/wm/RootWindowContainer.java
@@ -915,6 +915,9 @@ class RootWindowContainer extends WindowContainer<DisplayContent>
                             /*|| (obscured && type == TYPE_KEYGUARD_DIALOG)*/)) {
                 // Allow full screen keyguard presentation dialogs to be seen.
                 displayHasContent = !(obscured && type == TYPE_KEYGUARD_DIALOG);
+               if(!displayContent.supportsSystemDecorations()){//rk patch for dualscreen
+                   displayHasContent=false;
+               }
             }
             if ((privateflags & PRIVATE_FLAG_SUSTAINED_PERFORMANCE_MODE) != 0) {
                 mSustainedPerformanceModeCurrent = true;


--- a/frameworks/base/core/res/res/values/config.xml
+++ b/frameworks/base/core/res/res/values/config.xml
@@ -2225,7 +2226,7 @@
 
     <!-- Whether the system enables per-display focus. If the system has the input method for each
          display, this value should be true. -->
-    <bool name="config_perDisplayFocusEnabled">false</bool>
+    <bool name="config_perDisplayFocusEnabled">true</bool>
 
     <!-- Whether a software navigation bar should be shown. NOTE: in the future this may be

//异声时互不影响播放
--- a/frameworks/base/services/core/java/com/android/server/audio/MediaFocusControl.java
+++ b/frameworks/base/services/core/java/com/android/server/audio/MediaFocusControl.java
@@ -754,6 +754,7 @@ public class MediaFocusControl implements PlayerFocusEnforcer {
                     + " flags=0x" + Integer.toHexString(flags)
                     + " sdk=" + sdk))
                 .printLog(TAG));
+        focusChangeHint = 3;
         // we need a valid binder callback for clients
         if (!cb.pingBinder()) {

 

2.此时在可以通过StartActivity的setLaunchDisplayId来决定app是显示在主屏还是副屏

//displayId = 0显示到主屏,1显示到副屏
ActivityOptions options = ActivityOptions.makeBasic();
options.setLaunchDisplayId(displayId);
startActivity(launchIntentForPackage,options.toBundle());

 

3.同显与异显切换

diff=true 为同显,false为异显
mWindowManager.setShouldShowSystemDecors(1,diff);
mWindowManager.setShouldShowIme(1, diff);

 

 

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值