完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
1 在路径为frameworksbasecorejavaandroidviewIWindowManager.aidl文件打上如下补丁
dongsy@build-server-100:~/work/dsy/code_rk3288/frameworks/base((e845a29...))$ git diff core/java/android/view/IWindowManager.aidl diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/v index 86b9d4f..406fa75 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -444,4 +444,5 @@ interface IWindowManager boolean isDualConfig(); boolean getDualScreenFlag(); int getSecondDisplayTaskId(); + boolean isUseSecondDisplayInfo(); } 2 在路径为frameworksbasecorejavaandroidviewWindowManagerPolicy.java文件打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/frameworks/base((e845a29...))$ git diff core/java/android/view/WindowManagerPolicy.java diff --git a/core/java/android/view/WindowManagerPolicy.java b/core/java/andr index 5317b59..514e145 100644 --- a/core/java/android/view/WindowManagerPolicy.java +++ b/core/java/android/view/WindowManagerPolicy.java @@ -946,7 +946,7 @@ public interface WindowManagerPolicy { * so you can use its Rect. Otherwise null. */ public void layoutWindowLw(WindowState win, WindowState attached); - public void layoutWindowLw(WindowState win, WindowState attached,int wid + public void layoutWindowLw(WindowState win, WindowState attached,DisplayInfo info); /** 3 在路径为frameworksbaseservicescorejavacomandroidserverdisplayDisplayManagerService.java文件中打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/frameworks/base((e845a29...))$ git diff services/core/java/com/android/server/display/DisplayManagerService.java diff --git a/services/core/java/com/android/server/display/DisplayManagerService.java b/services/co index 39f9d20..d09a288 100755 --- a/services/core/java/com/android/server/display/DisplayManagerService.java +++ b/services/core/java/com/android/server/display/DisplayManagerService.java @@ -52,6 +52,7 @@ import android.util.Slog; import android.util.SparseArray; import android.view.Display; import android.view.DisplayInfo; +import android.view.IWindowManager; import android.view.Surface; import android.view.WindowManagerInternal; @@ -881,13 +882,8 @@ public final class DisplayManagerService extends SystemService { isDefaultDisplay = true; } else { isDefaultDisplay = false; - String rotation = SystemProperties.get("persist.orientation.vhinit"); - int default_value = (device.getDisplayDeviceInfoLocked().width < device.getDisplay - if(default_value == 1) {//竖屏 - device.getDisplayDeviceInfoLocked().rotation = ("0".equals(rotation))?1:0; - } else if(default_value == 0) {//横屏 - device.getDisplayDeviceInfoLocked().rotation = ("1".equals(rotation))?1:0; - } + String rotation = SystemProperties.get("persist.sys.rotation.einit","0"); + device.getDisplayDeviceInfoLocked().rotation=Integer.valueOf(rotation); } configureDisplayInTransactionLocked(device); device.performTraversalInTransactionLocked(); @@ -980,7 +976,17 @@ public final class DisplayManagerService extends SystemService { return; } display.isDefaultDisplay = isDefaultDisplay; - display.configureDisplayInTransactionLocked(device, info.state == Display.STATE_OFF, mLogicalDisplays.get(Display.DEFAULT_DISPLAY).mInfo); + try { + IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVICE)); + if (!wm.isUseSecondDisplayInfo()) { + display.configureDisplayInTransactionLocked(device, info.state == Display.STATE_OFF, mLogicalDisplays.get(Display.DEFAULT_DISPLAY).mInfo); + } else { + display.configureDisplayInTransactionLocked(device, info.state == Display.STATE_OFF, null); + } + }catch(RemoteException e){ + e.printStackTrace(); + } + // Update the viewports if needed. if (!mDefaultViewport.valid 4 在路径为frameworksbaseservicescorejavacomandroidserverdisplayLocalDisplayAdapter.java文件中打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/frameworks/base((e845a29...))$ git diff services/core/java/com/android/server/display/LocalDisplayAdapter.java diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core index bd718e1..16092fe 100755 --- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java +++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java @@ -415,23 +415,8 @@ final class LocalDisplayAdapter extends DisplayAdapter { } else { mInfo.type = Display.TYPE_HDMI; mInfo.flags |= DisplayDeviceInfo.FLAG_PRESENTATION; - if( SystemProperties.getBoolean("ro.orientation.vhshow",false)) { - boolean noRotate = "0".equals(SystemProperties.get("ro.sf.hwrotation")); - if(noRotate && mBuiltInDisplayId == SurfaceControl.BUILT_IN_DISPLAY_ID_HDM - if (SystemProperties.getBoolean("ro.rotation.external", false)) { - mInfo.flags |= DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT; - } - String value = SystemProperties.get("ro.orientation.einit"); - /*if ("0".equals(value)) { - mInfo.rotation = Surface.ROTATION_0; - } else if ("90".equals(value)) { - mInfo.rotation = Surface.ROTATION_90; - } else if ("180".equals(value)) { - mInfo.rotation = Surface.ROTATION_180; - } else if ("270".equals(value)) { - mInfo.rotation = Surface.ROTATION_270; - }*/ - } + if (SystemProperties.getBoolean("ro.sys.rotation.sensor", false)) { + mInfo.flags |= DisplayDeviceInfo.FLAG_ROTATES_WITH_CONTENT; } mInfo.name = getContext().getResources().getString( com.android.internal.R.string.display_manager_hdmi_display_name); 5 在路径为frameworksbaseservicescorejavacomandroidserverdisplayLogicalDisplay.java文件中打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/frameworks/base((e845a29...))$ git diff services/core/java/com/android/server/display/LogicalDisplay.java diff --git a/services/core/java/com/android/server/display/LogicalDisplay.java b/services/core/java old mode 100644 new mode 100755 index b02f8a7..6f2c920 --- a/services/core/java/com/android/server/display/LogicalDisplay.java +++ b/services/core/java/com/android/server/display/LogicalDisplay.java @@ -67,7 +67,7 @@ final class LogicalDisplay { private static final int BLANK_LAYER_STACK = -1; private static final String TAG_DUALSCREEN = "DualScreen"; - private final boolean DEBUG_DUALSCREEN = false; + private final boolean DEBUG_DUALSCREEN = true; private final int mDisplayId; private final int mLayerStack; private DisplayInfo mOverrideDisplayInfo; // set by the window manager @@ -79,6 +79,7 @@ final class LogicalDisplay { // The display device that this logical display is based on and which // determines the base metrics that it uses. private DisplayDevice mPrimaryDisplayDevice; + private DisplayDeviceInfo mPrimaryDisplayDeviceInfo; // True if the logical display has unique content. @@ -148,7 +149,26 @@ final class LogicalDisplay { mInfo.physicalXDpi = mOverrideDisplayInfo.physicalXDpi; mInfo.physicalYDpi = mOverrideDisplayInfo.physicalYDpi; } + if(mDisplayId!=Display.DEFAULT_DISPLAY){ + String rotation = SystemProperties.get("persist.sys.rotation.einit","0"); + if(Integer.valueOf(rotation)%2!=0) { + + + mInfo.appWidth = mPrimaryDisplayDeviceInfo.height; + mInfo.appHeight = mPrimaryDisplayDeviceInfo.width; + mInfo.logicalWidth = mPrimaryDisplayDeviceInfo.height; + mInfo.logicalHeight=mPrimaryDisplayDeviceInfo.width; + + }else{ + mInfo.appWidth = mPrimaryDisplayDeviceInfo.width; + mInfo.appHeight = mPrimaryDisplayDeviceInfo.height; + mInfo.logicalWidth = mPrimaryDisplayDeviceInfo.width; + mInfo.logicalHeight=mPrimaryDisplayDeviceInfo.height; + } + } } + + return mInfo; } @@ -267,6 +287,7 @@ final class LogicalDisplay { mPrimaryDisplayDeviceInfo = deviceInfo; mInfo = null; + } } @@ -303,6 +324,7 @@ final class LogicalDisplay { // Only grab the display info now as it may have been changed based on the requests above. DisplayInfo displayInfo = getDisplayInfoLocked(); + Slog.d("dzy"," "+device.getUniqueId()); final DisplayDeviceInfo displayDeviceInfo = device.getDisplayDeviceInfoLocked(); IWindowManager wm = IWindowManager.Stub.asInterface(ServiceManager.getService(Context.WINDOW_SERVI try{ @@ -310,7 +332,7 @@ final class LogicalDisplay { isDualScreen = wm.getSecondDisplayTaskId() != -1; if(wm.isDualConfig()){ displayInfo = info != null?info:getDisplayInfoLocked(); - if(DEBUG_DUALSCREEN) Slog.v(TAG_DUALSCREEN,"LogicalDisplay configurDisplay displayInfo = "+displayInfo); + /*if(DEBUG_DUALSCREEN)*/ Slog.v("dzy","LogicalDisplay configurDisplay displayInfo = "+displayInfo); } } }catch(Exception e){ @@ -374,55 +396,20 @@ final class LogicalDisplay { mTempDisplayRect.top += mDisplayOffsetY; mTempDisplayRect.bottom += mDisplayOffsetY; - if(SystemProperties.getBoolean("persist.orientation.vhshow",false)) { - Rect displayRect = new Rect(mTempLayerStackRect); - if (isDefaultDisplay == false) { - if (isDualScreen == true) { - displayVhShow = true; - if(diffStackRect != null) { - displayRect = new Rect(diffStackRect); - } - } - diffStackRect = new Rect(displayRect); - int width=displayDeviceInfo.width; - int height=displayDeviceInfo.height; - device.setProjectionInTransactionLocked(orientation, displayRect, new Rect(0,0,width,height)); - return ; - //Keep mTempLayerStackRect、mTempDisplayRect、crop unchanged, will not stretch after rotation - } - } else { - try{ - if(wm.getDualScreenFlag()) { - Rect stackRect = new Rect(mTempLayerStackRect); - Rect displayRect = new Rect(mTempDisplayRect); - if(DEBUG_DUALSCREEN) Slog.v(TAG_DUALSCREEN,"mTempDisplayRect ="+mTempDisplayRect); - if(displayVhShow == true) { - displayVhShow = false; - // displayRect = new Rect(diffDisplayRect); - if(DEBUG_DUALSCREEN) Slog.v(TAG_DUALSCREEN,"diffDisplayRect ------------------ ="+diffDisplayRect); - diffStackRect = null; - diffDisplayRect = null; - } - if (isDefaultDisplay == false) { - if (isDualScreen == true) { - if(diffDisplayRect != null) { - displayRect = new Rect(diffDisplayRect); - } - if(diffStackRect != null) { - stackRect = new Rect(diffStackRect); - } - } - diffStackRect = new Rect(stackRect); - diffDisplayRect = new Rect(displayRect); - if(DEBUG_DUALSCREEN) Slog.v(TAG_DUALSCREEN,"diffDisplayRect ="+diffDisplayRect); - device.setProjectionInTransactionLocked(orientation, stackRect, displayRect); - return ; - } - } - }catch(Exception e){ - //no handle + + Slog.d(TAG_DUALSCREEN,"info= "+device.getDisplayDeviceInfoLocked()); + Slog.d(TAG_DUALSCREEN,"mTempDisplayRect="+mTempDisplayRect); + if(device.getDisplayDeviceInfoLocked().type==Display.TYPE_HDMI){ + if(SystemProperties.getBoolean("persist.sys.rotation.efull",false)){ + mTempDisplayRect.top=0; + mTempDisplayRect.left=0; + mTempDisplayRect.right=physWidth; + mTempDisplayRect.bottom=physHeight; + } + Slog.d(TAG_DUALSCREEN,"+++++++++mTempDisplayRect="+mTempDisplayRect); } + Slog.d(TAG_DUALSCREEN," orientation="+orientation); device.setProjectionInTransactionLocked(orientation, mTempLayerStackRect, mTempDisplayRect); } /** @@ -507,5 +494,6 @@ final class LogicalDisplay { mPrimaryDisplayDevice.getNameLocked() : "null")); pw.println("mBaseDisplayInfo=" + mBaseDisplayInfo); pw.println("mOverrideDisplayInfo=" + mOverrideDisplayInfo); + pw.println("mInfo=" + mInfo); } } 6 在路径为frameworksbaseservicescorejavacomandroidserverpolicyPhoneWindowManager.java文件中打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/frameworks/base((e845a29...))$ git diff services/core/java/com/android/server/policy/PhoneWindowManager.java diff --git a/services/core/java/com/android/server/policy/PhoneWindowManager.java b/services/core/java/com/ index a55fee6..c0a9b31 100755 --- a/services/core/java/com/android/server/policy/PhoneWindowManager.java +++ b/services/core/java/com/android/server/policy/PhoneWindowManager.java @@ -115,6 +115,7 @@ import android.util.Slog; import android.util.SparseArray; import android.util.LongSparseArray; import android.view.Display; +import android.view.DisplayInfo; import android.view.Gravity; import android.view.HapticFeedbackConstants; import android.view.IApplicationToken; @@ -4601,7 +4602,7 @@ public class PhoneWindowManager implements WindowManagerPolicy { public void layoutWindowLw(WindowState win, WindowState attached) { } - public void layoutWindowLw(WindowState win, WindowState attached, int width, int height) { + public void layoutWindowLw(WindowState win, WindowState attached, DisplayInfo info) { // We've already done the navigation bar and status bar. If the status bar can receive // input, we need to layout it again to accomodate for the IME window. if ((win == mStatusBar && !canReceiveInput(win)) || win == mNavigationBar) { @@ -4655,11 +4656,12 @@ public class PhoneWindowManager implements WindowManagerPolicy { = mOverscanScreenLeft + mOverscanScreenWidth; pf.bottom = df.bottom = of.bottom = cf.bottom = mOverscanScreenTop + mOverscanScreenHeight; - - pf.left = df.left = of.left = cf.left = vf.left = 0; - pf.top = df.top = of.top = cf.top = vf.top = 0; - pf.right = df.right = of.right = cf.right = vf.right = width; - pf.bottom = df.bottom = of.bottom = cf.bottom = vf.bottom = height; + if(info!=null) { + pf.left = df.left = of.left = cf.left = vf.left = 0; + pf.top = df.top = of.top = cf.top = vf.top = 0; + pf.right = df.right = of.right = cf.right = vf.right = info.logicalWidth; + pf.bottom = df.bottom = of.bottom = cf.bottom = vf.bottom = info.logicalHeight; + } } } else if (attrs.type == TYPE_INPUT_METHOD) { pf.left = df.left = of.left = cf.left = vf.left = mDockLeft; 7 在路径为frameworksbaseservicescorejavacomandroidserverwmWindowManagerService.java文件中打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/frameworks/base((e845a29...))$ git diff services/core/java/com/android/server/wm/WindowManagerService.java diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/an index f4ba143..c6545d1 100755 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -1540,6 +1540,9 @@ public class WindowManagerService extends IWindowManager.Stub public List return mSecondTaskIds; } + public boolean isUseSecondDisplayInfo(){ + return SystemProperties.get("persist.sys.draw.einfo","1").equals("1"); + } //get All stacks 8 在路径为frameworksbaseservicescorejavacomandroidserverwmWindowStateAnimator.java文件中打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/frameworks/base((e845a29...))$ git diff services/core/java/com/android/server/wm/WindowStateAnimator.java diff --git a/services/core/java/com/android/server/wm/WindowStateAnimator.java b/services/core/java/com/and index 86ff7eb..bb93d4e 100644 --- a/services/core/java/com/android/server/wm/WindowStateAnimator.java +++ b/services/core/java/com/android/server/wm/WindowStateAnimator.java @@ -1235,7 +1235,7 @@ class WindowStateAnimator { if (!w.isDefaultDisplay()) { // On a different display there is no system decor. Crop the window // by the screen boundaries - if(mService.getDualScreenFlag()) { + if(!mService.isUseSecondDisplayInfo()) { if (tempInfo == null) { tempInfo = new DisplayInfo(mService.getDefaultDisplayInfoLocked()); } 9 在路径为frameworksbaseservicescorejavacomandroidserverwmWindowSurfacePlacer.java文件中打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/frameworks/base((e845a29...))$ git diff services/core/java/com/android/server/wm/WindowSurfacePlacer.java diff --git a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java b/services/core/java/com/and old mode 100644 new mode 100755 index 2ffcd83..a9ef9d2 --- a/services/core/java/com/android/server/wm/WindowSurfacePlacer.java +++ b/services/core/java/com/android/server/wm/WindowSurfacePlacer.java @@ -991,9 +991,15 @@ class WindowSurfacePlacer { } win.mLayoutNeeded = false; win.prelayout(); - //mService.mPolicy.layoutWindowLw(win, null); - DisplayInfo defaultDisplayInfo = mService.getDefaultDisplayInfoLocked(); - mService.mPolicy.layoutWindowLw(win ,null ,defaultDisplayInfo.logicalWidth,defaultDisplayInfo.logicalHeight); + + if (!mService.isUseSecondDisplayInfo()) { + DisplayInfo defaultDisplayInfo = mService.getDefaultDisplayInfoLocked(); + mService.mPolicy.layoutWindowLw(win, null, defaultDisplayInfo); + } else { + mService.mPolicy.layoutWindowLw(win, null, null); + } + + win.mLayoutSeq = seq; // Window frames may have changed. Update dim layer with the new bounds. @@ -1046,9 +1052,14 @@ class WindowSurfacePlacer { } win.mLayoutNeeded = false; win.prelayout(); - //mService.mPolicy.layoutWindowLw(win, win.mAttachedWindow); - DisplayInfo defaultDisplayInfo = mService.getDefaultDisplayInfoLocked(); - mService.mPolicy.layoutWindowLw(win, win.mAttachedWindow, defaultDisplayInfo.logicalWidth,defaultDisplayInfo.logicalHeight); + if(!mService.isUseSecondDisplayInfo()){ + DisplayInfo defaultDisplayInfo = mService.getDefaultDisplayInfoLocked(); + mService.mPolicy.layoutWindowLw(win, win.mAttachedWindow,defaultDisplayInfo); + }else{ + mService.mPolicy.layoutWindowLw(win, win.mAttachedWindow,null); + } + + win.mLayoutSeq = seq; if (DEBUG_LAYOUT) Slog.v(TAG, 10 在路径为frameworksnativeservicessurfaceflingerDisplayDevice.cpp文件中打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/frameworks/native((4e55453...))$ git diff services/surfaceflinger/DisplayDevice.cpp diff --git a/services/surfaceflinger/DisplayDevice.cpp b/services/surfaceflinger/DisplayDevice.cpp index 3b16130..7da6c31 100755 --- a/services/surfaceflinger/DisplayDevice.cpp +++ b/services/surfaceflinger/DisplayDevice.cpp @@ -538,6 +538,8 @@ void DisplayDevice::setProjection(int orientation, #endif #if !RK_VR & RK_HW_ROTATION +#if 0 + bool isHdmiScreen = mType == DisplayDevice::DISPLAY_EXTERNAL; if (isHdmiScreen) { int eInitOrientation = 0; @@ -616,6 +618,7 @@ void DisplayDevice::setProjection(int orientation, } ALOGV("update frame [%d,%d]",frame.getWidth(),frame.getHeight()); } +#endif if (mType == DisplayDevice::DISPLAY_PRIMARY) { mClientOrientation = orientation; orientation = (mHardwareOrientation + orientation) % 4; 11 在路径为packagesappsSettingsresvalues-zh-rCNarrays.xml文件中打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/packages/apps/Settings((465d84e...))$ git diff res/values-zh-rCN/arrays.xml diff --git a/res/values-zh-rCN/arrays.xml b/res/values-zh-rCN/arrays.xml index 2ef6881..e127220 100755 --- a/res/values-zh-rCN/arrays.xml +++ b/res/values-zh-rCN/arrays.xml @@ -29,10 +29,6 @@ - - - - 12 在路径为packagesappsSettingsresvalues-zh-rCNstrings.xml文件中打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/packages/apps/Settings((465d84e...))$ git diff res/values-zh-rCN/strings.xml diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml index a602128..27c25dd 100755 --- a/res/values-zh-rCN/strings.xml +++ b/res/values-zh-rCN/strings.xml @@ -3273,8 +3273,8 @@ - - + + 13 在路径为packagesappsSettingsresvaluesarrays.xml文件中打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/packages/apps/Settings((465d84e...))$ git diff res/values/arrays.xml diff --git a/res/values/arrays.xml b/res/values/arrays.xml index 012fae9..9c2bbc6 100755 --- a/res/values/arrays.xml +++ b/res/values/arrays.xml @@ -1100,12 +1100,16 @@ - - + + + + + + 14 在路径为packagesappsSettingsresvaluesstrings.xml文件中打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/packages/apps/Settings((465d84e...))$ git diff res/values/strings.xml diff --git a/res/values/strings.xml b/res/values/strings.xml index f051ccf..eeb8941 100755 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -7960,8 +7960,8 @@ - - + + @@ -7983,4 +7983,5 @@ 15 在路径为packagesappsSettingssrccomandroidsettingsHdmiSettings.java文件中打上如下补丁 dongsy@build-server-100:~/work/dsy/code_rk3288/packages/apps/Settings((465d84e...))$ git diff src/com/android/settings/HdmiSettings.java diff --git a/src/com/android/settings/HdmiSettings.java b/src/com/android/settings/HdmiSettings.java index f21085c..9fe6a92 100755 --- a/src/com/android/settings/HdmiSettings.java +++ b/src/com/android/settings/HdmiSettings.java @@ -156,16 +156,12 @@ public class HdmiSettings extends SettingsPreferenceFragment mHdmiDualScreen.setOnPreferenceChangeListener(this); mHdmiDualScreenVH = (CheckBoxPreference)findPreference(KEY_HDMI_DUAL_SCREEN_VH); - mHdmiDualScreenVH.setEnabled(enable); - if(enable) { - mHdmiDualScreenVH.setChecked(SystemProperties.getBoolean("persist.orientation.vhshow", false)); - } + mHdmiDualScreenVH.setChecked(SystemProperties.getBoolean("persist.sys.rotation.efull", false)); mHdmiDualScreenVH.setOnPreferenceChangeListener(this); mHdmiDualScreenList = (ListPreference)findPreference(KEY_HDMI_DUAL_SCREEN_LIST); mHdmiDualScreenList.setOnPreferenceChangeListener(this); mHdmiDualScreenList.setOnPreferenceClickListener(this); - mHdmiDualScreenList.setEnabled(SystemProperties.getBoolean("persist.orientation.vhshow", false)); - Log.d(TAG, "onCreate---------------------"); + Log.d(TAG, "---------onCreate---------------------"); } @@ -205,16 +201,8 @@ public class HdmiSettings extends SettingsPreferenceFragment mDisplayManager.registerDisplayListener(mDisplayListener, null); if (android.provider.Settings.System.getInt(getActivity().getContentResolver(),DOUBLE_SCREEN_STATE,0) == 0) { mHdmiDualScreen.setEnabled(true); - if(android.provider.Settings.System.getInt(getActivity().getContentResolver(),DOUBLE_SCREEN_CONFIG,0) == 1) { - mHdmiDualScreenVH.setEnabled(true); - } else { - mHdmiDualScreenVH.setEnabled(false); - } - mHdmiDualScreenList.setEnabled(SystemProperties.getBoolean("persist.orientation.vhshow", false)); } else { mHdmiDualScreen.setEnabled(false); - mHdmiDualScreenVH.setEnabled(false); - mHdmiDualScreenList.setEnabled(false); } } @@ -288,12 +276,6 @@ public class HdmiSettings extends SettingsPreferenceFragment mHdmiResolution.setEnabled(false); mHdmiScale.setEnabled(false); mHdmiRotation.setEnabled(false); - //mHdmiDualScreen.setEnabled(false); - //mHdmiDualScreenVH.setEnabled(false); - mHdmiDualScreenList.setEnabled(false); - SystemProperties.set("persist.orientation.vhshow", "false"); - SystemProperties.set("persist.orientation.vhinit", "0"); - mHdmiDualScreenVH.setChecked(false); } else { new Handler().postDelayed(new Runnable() { public void run() { public void run() { @@ -309,8 +291,6 @@ public class HdmiSettings extends SettingsPreferenceFragment if(getActivity() != null && getActivity().getContentResolver() != null) { if (android.provider.Settings.System.getInt(getActivity().getContentResolver(),DOUBLE_SCREEN_ST mHdmiDualScreen.setEnabled(true); - mHdmiDualScreenVH.setEnabled(android.provider.Settings.System.getInt(getActivity().getContentResolver( - mHdmiDualScreenList.setEnabled(SystemProperties.getBoolean("persist.orientation.vhshow", false)); } } } @@ -355,7 +335,7 @@ public class HdmiSettings extends SettingsPreferenceFragment } else if (preference == mHdmiResolution) { updateHDMIState(); } else if (preference == mHdmiDualScreenList) { - String value = SystemProperties.get("persist.orientation.vhinit","0"); + String value = SystemProperties.get("persist.sys.rotation.einit","0"); mHdmiDualScreenList.setValue(value); } return true; @@ -401,28 +381,35 @@ public class HdmiSettings extends SettingsPreferenceFragment } } else if (preference == mHdmiDualScreen) { android.provider.Settings.System.putInt(getActivity().getContentResolver(),DOUBLE_SCREEN_CONFIG,(Boolean)obj?1:0); - SystemProperties.set("persist.orientation.vhinit", "0"); - SystemProperties.set("persist.orientation.vhshow", "false"); - mHdmiDualScreenVH.setEnabled((Boolean)obj); - mHdmiDualScreenVH.setChecked(false); - mHdmiDualScreenList.setEnabled(false); this.finish(); } else if (preference == mHdmiDualScreenVH) { if((Boolean)obj) { - SystemProperties.set("persist.orientation.vhshow", "true"); - mHdmiDualScreenList.setEnabled(true); + SystemProperties.set("persist.sys.rotation.efull", "true"); } else { - SystemProperties.set("persist.orientation.vhshow", "false"); - mHdmiDualScreenList.setEnabled(false); - SystemProperties.set("persist.orientation.vhinit", "0"); + SystemProperties.set("persist.sys.rotation.efull", "false"); } - SystemProperties.set("persist.orientation.vhinit", "0"); + SystemProperties.set("sys.hdmi_status.aux", "off"); + mSwitchBar.setEnabled(false); + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + SystemProperties.set("sys.hdmi_status.aux", "on"); + mSwitchBar.setEnabled(true); + } + },500); + } else if (preference == mHdmiDualScreenList) { - if("0".equals(obj.toString())) { - SystemProperties.set("persist.orientation.vhinit", "0"); - } else if ("1".equals(obj.toString())) { - SystemProperties.set("persist.orientation.vhinit", "1"); - } + SystemProperties.set("persist.sys.rotation.einit", obj.toString()); + //mDisplayManager.forceScheduleTraversalLocked(); + SystemProperties.set("sys.hdmi_status.aux", "off"); + mSwitchBar.setEnabled(false); + new Handler().postDelayed(new Runnable() { + @Override + public void run() { + SystemProperties.set("sys.hdmi_status.aux", "on"); + mSwitchBar.setEnabled(true); + } + },500); + } return true; 同时在devicerockchiprk3288system.prop文件中配置旋转方向的属性 dongsy@build-server-100:~/work/dsy/rk3288-Android-7.0/device/rockchip/rk3288((f3c5a0a...))$ git diff system.prop diff --git a/system.prop b/system.prop old mode 100644 new mode 100755 index be3f161..440597e --- a/system.prop +++ b/system.prop @@ -36,12 +38,42 @@ ro.rk.LowBatteryBrightness=false ro.tether.denied=false sys.resolution.changed=false ro.default.size=100 ro.product.u***factory=rockchip_u*** wifi.supplicant_scan_interval=15 ro.factory.tool=0 ro.kernel.android.checkjni=0 #set default lcd density to Rockchip tablet ro.adb.secure=0 ro.rk.displayd.enable=false #set default lcd density to Rockchip tablet ro.sf.lcd_density=160 ro.adb.secure=0 ro.rk.displayd.enable=false # Dual - display configuration # 主屏 eDP sys.hwc.device.primary=eDP # 副屏 sys.hwc.device.extend=LVDS #persist.sys.framebuffer.main=800x1280 persist.sys.resolution.main=1920x1080 persist.sys.resolution.aux=800x1280 # 副屏是否全屏显示 persist.sys.rotation.efull = true # 主屏的旋转方向(0 90 180 270) ro.sf.hwrotation=0 # 副屏输出旋转方向对应 0 / 90 / 180 / 270(0 1 2 3) +persist.sys.rotation.einit =1 #副屏也随着 g-sensor 旋转(只关注方向,黑边不关注) ro.sys.rotation.sensor =false // 主副屏orientaion是否相同 ro.same.orientation=false // 副屏是否随主屏旋转 ro.rotation.external=false |
|
|
|
你正在撰写答案
如果你是对答案或其他答案精选点评或询问,请使用“评论”功能。
2067 浏览 1 评论
synopsys 的design ware:DW_fpv_div,浮点数除法器,默认32位下,想提升覆盖率(TMAX),如果用功能case去提升覆盖率呢?
2661 浏览 1 评论
RK3588 GStreamer调试四路鱼眼摄像头四宫格显示报错
5434 浏览 1 评论
【飞凌嵌入式OK3576-C开发板体验】RKNN神经网络-YOLO图像识别
254 浏览 0 评论
【飞凌嵌入式OK3576-C开发板体验】SSH远程登录网络配置及CAN通讯
1336 浏览 0 评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-28 00:13 , Processed in 0.530953 second(s), Total 70, Slave 54 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号