frameworks/base/policy/src/com/android/internal/policy/impl/PhoneWindowManager.java修改:(svn chages as unified diff)
Index: PhoneWindowManager.java =================================================================== --- PhoneWindowManager.java (revision 2175) +++ PhoneWindowManager.java (revision 2176) @@ -54,8 +54,9 @@ import android.os.SystemProperties; import android.os.UEventObserver; import android.os.Vibrator; +import android.os.Build; import android.provider.Settings; - +import android.media.MediaPlayer; import com.android.internal.R; import com.android.internal.app.ShutdownThread; import com.android.internal.policy.PolicyManager; @@ -89,6 +90,7 @@ import static android.view.WindowManager.LayoutParams.FIRST_APPLICATION_WINDOW; import static android.view.WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN; import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN; +import static android.view.WindowManager.LayoutParams.FLAG_AW_HIDESTATUS; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS; @@ -163,6 +165,7 @@ // No longer recommended for desk docks; still useful in car docks. static final boolean ENABLE_CAR_DOCK_HOME_CAPTURE = true; static final boolean ENABLE_DESK_DOCK_HOME_CAPTURE = false; + static boolean mFullScreenIsEnable = true; static final int LONG_PRESS_POWER_NOTHING = 0; static final int LONG_PRESS_POWER_GLOBAL_ACTIONS = 1; @@ -283,11 +286,14 @@ /** If true, hitting shift & menu will broadcast Intent.ACTION_BUG_REPORT */ boolean mEnableShiftMenuBugReports = false; - + boolean mStatusBarShow = true; + boolean mStatusBarWillHide = true; + boolean mStatusBarReqShow = false; boolean mSafeMode; WindowState mStatusBar = null; boolean mStatusBarCanHide; - int mStatusBarHeight; + int mStatusBarHeightReserved; + int mStatusBarHeight; final ArrayList<WindowState> mStatusBarPanels = new ArrayList<WindowState>(); WindowState mNavigationBar = null; boolean mHasNavigationBar = false; @@ -411,6 +417,7 @@ WindowState mTopFullscreenOpaqueWindowState; boolean mTopIsFullscreen; + boolean mTopIsHideStatusbar; boolean mForceStatusBar; boolean mHideLockScreen; boolean mDismissKeyguard; @@ -874,11 +881,11 @@ * DisplayMetrics.DENSITY_DEFAULT / DisplayMetrics.DENSITY_DEVICE; mStatusBarCanHide = shortSizeDp < 600; - mStatusBarHeight = mContext.getResources().getDimensionPixelSize( + mStatusBarHeightReserved = mContext.getResources().getDimensionPixelSize( mStatusBarCanHide ? com.android.internal.R.dimen.status_bar_height : com.android.internal.R.dimen.system_bar_height); - + mStatusBarHeight = mStatusBarHeightReserved; mHasNavigationBar = mContext.getResources().getBoolean( com.android.internal.R.bool.config_showNavigationBar); // Allow a system property to override this. Used by the emulator. @@ -1225,8 +1232,7 @@ public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation) { // Assumes the navigation bar appears on the bottom of the display in portrait. return fullHeight - - (mStatusBarCanHide ? 0 : mStatusBarHeight) - - ((fullWidth > fullHeight) ? 0 : mNavigationBarHeight); + - ((fullWidth > fullHeight) ? 0 : mNavigationBarHeight) - ((mStatusBarCanHide ||mFullScreenIsEnable) ? 0 : mStatusBarHeight); } public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation) { @@ -1239,8 +1245,7 @@ // of the decor; however for purposes of configurations, we do want to // exclude it since applications can't generally use that part of the // screen. - return getNonDecorDisplayHeight(fullWidth, fullHeight, rotation) - - (mStatusBarCanHide ? mStatusBarHeight : 0); + return getNonDecorDisplayHeight(fullWidth, fullHeight, rotation) - ((mStatusBarCanHide ||mFullScreenIsEnable) ? mStatusBarHeight : 0); } public boolean doesForceHide(WindowState win, WindowManager.LayoutParams attrs) { @@ -1914,7 +1919,6 @@ mDockRight = mContentRight = mCurRight = displayWidth; mDockBottom = mContentBottom = mCurBottom = displayHeight; mDockLayer = 0x10000000; - // start with the current dock rect, which will be (0,0,displayWidth,displayHeight) final Rect pf = mTmpParentFrame; final Rect df = mTmpDisplayFrame; @@ -1923,7 +1927,6 @@ pf.top = df.top = vf.top = mDockTop; pf.right = df.right = vf.right = mDockRight; pf.bottom = df.bottom = vf.bottom = mDockBottom; - final boolean navVisible = (mNavigationBar == null || mNavigationBar.isVisibleLw()) && (mLastSystemUiFlags&View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) == 0; @@ -1977,6 +1980,12 @@ mTmpNavigationFrame.offset(mNavigationBarWidth, 0); } } + // Make sure the content and current rectangles are updated to + // account for the restrictions from the navigation bar. + mContentTop = mCurTop = mDockTop; + mContentBottom = mCurBottom = mDockBottom; + mContentLeft = mCurLeft = mDockLeft; + mContentRight = mCurRight = mDockRight; // And compute the final frame. mNavigationBar.computeFrameLw(mTmpNavigationFrame, mTmpNavigationFrame, mTmpNavigationFrame, mTmpNavigationFrame); @@ -2104,7 +2113,7 @@ final boolean hasNavBar = (mHasNavigationBar && mNavigationBar != null && mNavigationBar.isVisibleLw()); - + if (attrs.type == TYPE_INPUT_METHOD) { pf.left = df.left = cf.left = vf.left = mDockLeft; pf.top = df.top = cf.top = vf.top = mDockTop; @@ -2116,7 +2125,14 @@ } else { final int adjust = sim & SOFT_INPUT_MASK_ADJUST; - if ((fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_FULLSCREEN | FLAG_LAYOUT_INSET_DECOR)) + if((fl & FLAG_AW_HIDESTATUS) == FLAG_AW_HIDESTATUS) + { + pf.left = df.left = mUnrestrictedScreenLeft; + pf.top = df.top = mUnrestrictedScreenTop; + pf.right = df.right = mUnrestrictedScreenLeft+mUnrestrictedScreenWidth; + pf.bottom = df.bottom = mUnrestrictedScreenTop+mUnrestrictedScreenHeight; + } + else if ((fl & (FLAG_LAYOUT_IN_SCREEN | FLAG_FULLSCREEN | FLAG_LAYOUT_INSET_DECOR)) == (FLAG_LAYOUT_IN_SCREEN | FLAG_LAYOUT_INSET_DECOR)) { if (DEBUG_LAYOUT) Log.v(TAG, "layoutWindowLw(" + attrs.getTitle() @@ -2211,19 +2227,37 @@ "Laying out navigation bar window: (%d,%d - %d,%d)", pf.left, pf.top, pf.right, pf.bottom)); } - } else if (attrs.type == TYPE_SECURE_SYSTEM_OVERLAY + } else if ((attrs.type == TYPE_SECURE_SYSTEM_OVERLAY + || attrs.type == TYPE_BOOT_PROGRESS) && ((fl & FLAG_FULLSCREEN) != 0)) { // Fullscreen secure system overlays get what they ask for. pf.left = df.left = mUnrestrictedScreenLeft; pf.top = df.top = mUnrestrictedScreenTop; pf.right = df.right = mUnrestrictedScreenLeft+mUnrestrictedScreenWidth; pf.bottom = df.bottom = mUnrestrictedScreenTop+mUnrestrictedScreenHeight; + } else if (attrs.type == TYPE_BOOT_PROGRESS) { + // Boot progress screen always covers entire display. + pf.left = df.left = cf.left = mUnrestrictedScreenLeft; + pf.top = df.top = cf.top = mUnrestrictedScreenTop; + pf.right = df.right = cf.right = mUnrestrictedScreenLeft+mUnrestrictedScreenWidth; + pf.bottom = df.bottom = cf.bottom + = mUnrestrictedScreenTop+mUnrestrictedScreenHeight; } else { - pf.left = df.left = cf.left = mRestrictedScreenLeft; - pf.top = df.top = cf.top = mRestrictedScreenTop; - pf.right = df.right = cf.right = mRestrictedScreenLeft+mRestrictedScreenWidth; - pf.bottom = df.bottom = cf.bottom - = mRestrictedScreenTop+mRestrictedScreenHeight; + if(mFullScreenIsEnable) //mFullScreenIsEnable && mStatusBarWillHide && (mStatusBarReqShow == false) + { + pf.left = df.left = cf.left = mUnrestrictedScreenLeft; + pf.top = df.top = cf.top = mUnrestrictedScreenTop; + pf.right = df.right = cf.right = mUnrestrictedScreenLeft+mUnrestrictedScreenWidth; + pf.bottom = df.bottom = cf.bottom = mUnrestrictedScreenTop+mUnrestrictedScreenHeight; + } + else + { + pf.left = df.left = cf.left = mRestrictedScreenLeft; + pf.top = df.top = cf.top = mRestrictedScreenTop; + pf.right = df.right = cf.right = mRestrictedScreenLeft+mRestrictedScreenWidth; + pf.bottom = df.bottom = cf.bottom + = mRestrictedScreenTop+mRestrictedScreenHeight; + } } if (adjust != SOFT_INPUT_ADJUST_NOTHING) { vf.left = mCurLeft; @@ -2336,7 +2370,7 @@ if (DEBUG_LAYOUT) Slog.i(TAG, "Win " + win + ": isVisibleOrBehindKeyguardLw=" + win.isVisibleOrBehindKeyguardLw()); if (mTopFullscreenOpaqueWindowState == null && - win.isVisibleOrBehindKeyguardLw()) { + win.isVisibleOrBehindKeyguardLw() && !win.isGoneForLayoutLw()) { if ((attrs.flags & FLAG_FORCE_NOT_FULLSCREEN) != 0) { mForceStatusBar = true; } @@ -2366,6 +2400,7 @@ public int finishAnimationLw() { int changes = 0; boolean topIsFullscreen = false; + boolean topIsHideStatusbar =false; final WindowManager.LayoutParams lp = (mTopFullscreenOpaqueWindowState != null) ? mTopFullscreenOpaqueWindowState.getAttrs() @@ -2373,7 +2408,7 @@ if (mStatusBar != null) { if (DEBUG_LAYOUT) Log.i(TAG, "force=" + mForceStatusBar - + " top=" + mTopFullscreenOpaqueWindowState); + + " top=" + mTopFullscreenOpaqueWindowState); if (mForceStatusBar) { if (DEBUG_LAYOUT) Log.v(TAG, "Showing status bar: forced"); if (mStatusBar.showLw(true)) changes |= FINISH_LAYOUT_REDO_LAYOUT; @@ -2385,15 +2420,27 @@ + " lp.flags=0x" + Integer.toHexString(lp.flags)); } topIsFullscreen = (lp.flags & WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0; + topIsHideStatusbar = (lp.flags & WindowManager.LayoutParams.FLAG_AW_HIDESTATUS) != 0; + // The subtle difference between the window for mTopFullscreenOpaqueWindowState // and mTopIsFullscreen is that that mTopIsFullscreen is set only if the window // has the FLAG_FULLSCREEN set. Not sure if there is another way that to be the // case though. - if (topIsFullscreen) { + if(topIsHideStatusbar) + { + if (mStatusBar.hideLw(true)) + { + changes |= FINISH_LAYOUT_REDO_LAYOUT; + + mStatusBarShow = false; + } + } + else if (topIsFullscreen) { if (mStatusBarCanHide) { if (DEBUG_LAYOUT) Log.v(TAG, "Hiding status bar"); if (mStatusBar.hideLw(true)) { changes |= FINISH_LAYOUT_REDO_LAYOUT; + mStatusBarShow = false; mHandler.post(new Runnable() { public void run() { if (mStatusBarService != null) { @@ -2403,17 +2450,50 @@ } }}); } - } else if (DEBUG_LAYOUT) { - Log.v(TAG, "Preventing status bar from hiding by policy"); + } + else + { + if (DEBUG_LAYOUT) + { + Log.v(TAG, "Preventing status bar from hiding by policy"); + } + if(mFullScreenIsEnable) + { + if (mStatusBar.hideLw(true)) + { + changes |= FINISH_LAYOUT_REDO_LAYOUT; + mStatusBarShow = false; + } + } + else + { + if(mStatusBarShow == false) + { + if (mStatusBar.showLw(true)) + { + changes |= FINISH_LAYOUT_REDO_LAYOUT; + mStatusBarShow = true; + } + + } + } + } + + } + else + { + if (DEBUG_LAYOUT) + { + Log.v(TAG, "** SHOWING status bar: top is not fullscreen"); } - } else { - if (DEBUG_LAYOUT) Log.v(TAG, "Showing status bar: top is not fullscreen"); - if (mStatusBar.showLw(true)) changes |= FINISH_LAYOUT_REDO_LAYOUT; + if (mStatusBar.showLw(true)) + changes |= FINISH_LAYOUT_REDO_LAYOUT; } } } mTopIsFullscreen = topIsFullscreen; + mTopIsHideStatusbar = topIsHideStatusbar; // Hide the key guard if a visible window explicitly specifies that it wants to be displayed // when the screen is locked @@ -3488,6 +3568,27 @@ } }; + Runnable mStatusBarHide = new Runnable() { + public void run() { + mStatusBarWillHide = true; + try { + Log.d(TAG, "mStatusBarHide mStatusBarWillHide = " + mStatusBarWillHide); + //set orientation on WindowManager + mWindowManager.invokePerformWindow(); + } catch (RemoteException e) { + // Ignore + } + + } + }; + + public void lockNow() { + mContext.enforceCallingOrSelfPermission(android.Manifest.permission.DEVICE_POWER, null); + mHandler.removeCallbacks(mScreenLockTimeout); + mHandler.post(mScreenLockTimeout); + } + + private void updateLockScreenTimeout() { synchronized (mScreenLockTimeout) { boolean enable = (mAllowLockscreenWhenOn && mScreenOnEarly && mKeyguardMediator.isSecure()); @@ -3741,6 +3842,34 @@ return mHasNavigationBar; } + public boolean statusbarShow() + { + synchronized (this) + { + mStatusBarReqShow = true; + if(mStatusBarShow == false) + { + return true; + } + + return false; + } + } + + public boolean statusbarHide() + { + synchronized (this) + { + mStatusBarReqShow = false; + if(mStatusBarShow == true) + { + return true; + } + + return false; + } + } + public void dump(String prefix, FileDescriptor fd, PrintWriter pw, String[] args) { pw.print(prefix); pw.print("mSafeMode="); pw.print(mSafeMode); pw.print(" mSystemReady="); pw.print(mSystemReady);
Index: PhoneWindow.java =================================================================== --- PhoneWindow.java (revision 2175) +++ PhoneWindow.java (revision 2176) @@ -20,6 +20,7 @@ import static android.view.View.MeasureSpec.getMode; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; +import static android.view.WindowManager.LayoutParams.FLAG_AW_HIDESTATUS; import static android.view.WindowManager.LayoutParams.FLAG_FULLSCREEN; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_INSET_DECOR; import static android.view.WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; @@ -2559,6 +2560,10 @@ setFlags(FLAG_FULLSCREEN, FLAG_FULLSCREEN&(~getForcedWindowFlags())); } + if (a.getBoolean(com.android.internal.R.styleable.Window_windowHideStatusbar, false)) { + setFlags(FLAG_AW_HIDESTATUS, FLAG_AW_HIDESTATUS&(~getForcedWindowFlags())); + } + if (a.getBoolean(com.android.internal.R.styleable.Window_windowShowWallpaper, false)) { setFlags(FLAG_SHOW_WALLPAPER, FLAG_SHOW_WALLPAPER&(~getForcedWindowFlags())); }
Index: BridgeWindowManager.java =================================================================== --- BridgeWindowManager.java (revision 2175) +++ BridgeWindowManager.java (revision 2176) @@ -471,4 +471,28 @@ public boolean hasNavigationBar() { return false; // should this return something else? } + + public void resetInputCalibration() + { + + } + + public void statusbarShow() + { + + } + + public void statusbarHide() + { + + } + + public void invokePerformWindow() + { + + } + public void lockNow() { + // TODO Auto-generated method stub + + } }
Index: InputReader.cpp =================================================================== --- InputReader.cpp (revision 2175) +++ InputReader.cpp (revision 2176) @@ -50,6 +50,7 @@ #include <math.h> #include <cutils/properties.h> + #define INDENT " " #define INDENT2 " " #define INDENT3 " " @@ -118,6 +119,7 @@ { AKEYCODE_DPAD_UP, AKEYCODE_DPAD_LEFT, AKEYCODE_DPAD_DOWN, AKEYCODE_DPAD_RIGHT }, { AKEYCODE_DPAD_LEFT, AKEYCODE_DPAD_DOWN, AKEYCODE_DPAD_RIGHT, AKEYCODE_DPAD_UP }, }; +static bool resetTouch = false; static const size_t keyCodeRotationMapSize = sizeof(keyCodeRotationMap) / sizeof(keyCodeRotationMap[0]); @@ -701,6 +703,10 @@ } } +void InputReader::resetTouchCalibration() +{ + resetTouch = true; +} void InputReader::dump(String8& dump) { AutoMutex _l(mLock); @@ -940,7 +946,6 @@ rawEvent->deviceId, rawEvent->type, rawEvent->scanCode, rawEvent->keyCode, rawEvent->value, rawEvent->flags); #endif - if (mDropUntilNextSync) { if (rawEvent->type == EV_SYN && rawEvent->scanCode == SYN_REPORT) { mDropUntilNextSync = false; @@ -1041,6 +1046,15 @@ } } +void InputDevice::unfadePointer() { + size_t numMappers = mMappers.size(); + for (size_t i = 0; i < numMappers; i++) { + InputMapper* mapper = mMappers[i]; + mapper->unfadePointer(); + } +} + + void InputDevice::notifyReset(nsecs_t when) { NotifyDeviceResetArgs args(when, mId); mContext->getListener()->notifyDeviceReset(&args); @@ -1711,6 +1725,10 @@ void InputMapper::fadePointer() { } +void InputMapper::unfadePointer() { +} + + status_t InputMapper::getAbsoluteAxisInfo(int32_t axis, RawAbsoluteAxisInfo* axisInfo) { return getEventHub()->getAbsoluteAxisInfo(getDeviceId(), axis, axisInfo); } @@ -2323,13 +2341,21 @@ } } +void CursorInputMapper::unfadePointer() { + if (mPointerController != NULL) { + mPointerController->unfade(PointerControllerInterface::TRANSITION_GRADUAL); + } +} + + // --- TouchInputMapper --- TouchInputMapper::TouchInputMapper(InputDevice* device) : InputMapper(device), mSource(0), mDeviceMode(DEVICE_MODE_DISABLED), mSurfaceOrientation(-1), mSurfaceWidth(-1), mSurfaceHeight(-1) { + mNeedCorrect = false; } TouchInputMapper::~TouchInputMapper() { @@ -2463,6 +2489,296 @@ } } +//get tp correct params +int TouchInputMapper:: _get_str2int(char *saddr, int *flag) +{ + char *src; + char off; + unsigned int value = 0; + + src = saddr; + off = 0; //0\u017d?0\u0153疲?\u017d?6\u0153? 2\u017d?0\u0153频腬u017e菏? + if((src[0] == '0') && ((src[1] == 'x') || (src[1] == 'X'))) + { + src += 2; + off = 1; + } + else if((src[0] == '-')) { + src += 1; + off = 2; + } + if((!off) || (off == 2)) + { + while(*src != '\0') + { + if((*src >= '0') && (*src <= '9')) + { + value = value * 10 + (*src - '0'); + src ++; + } + else + { + return -1; + } + } + if(off == 2) + { + value = -value; + } + } + else if(off == 1) + { + while(*src != '\0') + { + if((*src >= '0') && (*src <= '9')) + { + value = value * 16 + (*src - '0'); + src ++; + } + else if((*src >= 'A') && (*src <= 'F')) + { + value = value * 16 + (*src - 'A' + 10); + src ++; + } + else if((*src >= 'a') && (*src <= 'f')) + { + value = value * 16 + (*src - 'a' + 10); + src ++;; + } + else + { + return -1; + } + } + } + + return value; +} +//\u017d撕袢eyname, itemname, 以\u0152癷temvalue,返回 0表蔦u0178失败,否则表蔦u0178当前\u017d\u0160理的砛u20ac度 +int TouchInputMapper::_get_item(char *saddr, char *name, char *value, unsigned int line_len) +{ + char *src; + char *dstname; + char *dstvalue; + unsigned int len; + + src = saddr; + dstname = name; + dstvalue = value; + + len = 0; + while(*src != '=') + { + if(*src != ' ') + { + *dstname++ = *src; + len ++; + } + src ++; + line_len --; + if(len > 256) + { + LOGD("key name too long\n"); + return -1; + } + } + *dstname = '\0'; + src ++; //跳过 '=' + line_len --; + + len = 0; + while((*src != 0x0A) && (line_len--)) + { + if(*src != ' ') + { + *dstvalue++ = *src; + len ++; + } + src ++; + if(len > 256) + { + LOGD("key name too long\n"); + return -1; + } + } + *dstvalue = '\0'; + + return 0; +} +//\u017d撕祷氐鼻靶械某\u20ac度,用謀u017e针返回当前的意义 +/******************************************** +* flag = 0 //当前是注释行,或空行 +* = 1 //当前是字段行 +* = 2 //当前是子项行,属于字段的下一项 +* = -1 //当前行不符合规范,出\u017d?*********************************************/ +int TouchInputMapper::_get_line(char *daddr, int *flag, unsigned int total_len) +{ + char *src; + unsigned int len = 0; + + src = daddr; + if(*src == ';') //注释行 + { + *flag = 0; + } + else if((*src == 0x0A)) //回车行 + { + *flag = 0; + len = 1; + + return len; + } + else //子字段行 + { + *flag = 1; + } + + src ++; + len = 1; + while(--total_len) + { + //LOGD("*src = %x\n",*src); + if((*src == 0x0A)) + { + len += 1; + break; + } + + src ++; + + len ++; + if(len >= 512) + { + *flag = -1; + + return 0; + } + } + + return len; +} + +int TouchInputMapper::tp_getpara(int *tp_para) +{ + FILE* pfd = 0; + char *data = 0; + char *src = 0; + unsigned int len, line_len, check_sum; + int flag, value; + char itemname[128], itemvalue[128]; + + pfd = fopen("/data/pointercal", "r+"); //只读 + if(!pfd) + { + //LOGD("para data file not exist\n"); + + goto _err_out; + } + fseek(pfd, 0, 2); + len = ftell(pfd); + fseek(pfd, 0, 0); + + data = NULL; + if(!len) + { + LOGD("bad tp cfg\n"); + goto _err_out; + } + data = (char *)malloc(len); + if(!data) + { + //LOGD("fail to malloc memory to store data\n"); + goto _err_out; + } + fread(data, 1, len, pfd); + fclose(pfd); + pfd = NULL; + src = data; + + while(len) + { + line_len = _get_line(src, &flag, len); + LOGD("line_len = %d\n",line_len); + len -= line_len; + switch(flag) + { + case 0: //注释行,回车行 + src += line_len; + break; + case 1: + if(_get_item(src, itemname, itemvalue, line_len)) + { + LOGD("get item fail\n"); + + goto _err_out; + } + src += line_len; + value = _get_str2int(itemvalue, 0); + + if(!strcmp(itemname, "TP_PARA1")) + { + tp_para[0] = value; + //LOGD("value0 = %d\n",value); + } + else if(!strcmp(itemname, "TP_PARA2")) + { + tp_para[1] = value; + //LOGD("value1 = %d\n",value); + } + else if(!strcmp(itemname, "TP_PARA3")) + { + tp_para[2] = value; + //LOGD("value2 = %d\n",value); + } + else if(!strcmp(itemname, "TP_PARA4")) + { + tp_para[3] = value; + //LOGD("value3 = %d\n",value); + } + else if(!strcmp(itemname, "TP_PARA5")) + { + tp_para[4] = value; + //LOGD("value4 = %d\n",value); + } + else if(!strcmp(itemname, "TP_PARA6")) + { + tp_para[5] = value; + //LOGD("value5 = %d\n",value); + } + else if(!strcmp(itemname, "TP_PARA7")) + { + tp_para[6] = value; + //LOGD("value6 = %d\n",value); + } + break; + default: + goto _err_out; + } + } + free(data); + + return 1; +_err_out: + tp_para[0] = -28238; + tp_para[1] = 125; + tp_para[2] = 54543608; + tp_para[3] = 89; + tp_para[4] = -19020; + tp_para[5] = 34218656; + tp_para[6] = 65536; + + if(data) + { + free(data); + } + if(pfd) + { + fclose(pfd); + } + + return 0; +} + void TouchInputMapper::configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes) { InputMapper::configure(when, config, changes); @@ -2512,65 +2828,76 @@ // Use the pointer presentation mode for devices that do not support distinct // multitouch. The spot-based presentation relies on being able to accurately // locate two or more fingers on the touch pad. - mParameters.gestureMode = getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_SEMI_MT) + if(getDeviceId() != 0x0fff0ffe) + { + mParameters.gestureMode = getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_SEMI_MT) ? Parameters::GESTURE_MODE_POINTER : Parameters::GESTURE_MODE_SPOTS; - String8 gestureModeString; - if (getDevice()->getConfiguration().tryGetProperty(String8("touch.gestureMode"), - gestureModeString)) { - if (gestureModeString == "pointer") { - mParameters.gestureMode = Parameters::GESTURE_MODE_POINTER; - } else if (gestureModeString == "spots") { - mParameters.gestureMode = Parameters::GESTURE_MODE_SPOTS; - } else if (gestureModeString != "default") { - LOGW("Invalid value for touch.gestureMode: '%s'", gestureModeString.string()); - } - } + String8 gestureModeString; + if (getDevice()->getConfiguration().tryGetProperty(String8("touch.gestureMode"), + gestureModeString)) { + if (gestureModeString == "pointer") { + mParameters.gestureMode = Parameters::GESTURE_MODE_POINTER; + } else if (gestureModeString == "spots") { + mParameters.gestureMode = Parameters::GESTURE_MODE_SPOTS; + } else if (gestureModeString != "default") { + LOGV("Invalid value for touch.gestureMode: '%s'", gestureModeString.string()); + } + } - if (getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_DIRECT)) { - // The device is a touch screen. - mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_SCREEN; - } else if (getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_POINTER)) { - // The device is a pointing device like a track pad. - mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER; - } else if (getEventHub()->hasRelativeAxis(getDeviceId(), REL_X) - || getEventHub()->hasRelativeAxis(getDeviceId(), REL_Y)) { - // The device is a cursor device with a touch pad attached. - // By default don't use the touch pad to move the pointer. - mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_PAD; - } else { - // The device is a touch pad of unknown purpose. - mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER; - } + if (getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_DIRECT)) { + // The device is a touch screen. + mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_SCREEN; + } else if (getEventHub()->hasInputProperty(getDeviceId(), INPUT_PROP_POINTER)) { + // The device is a pointing device like a track pad. + mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER; + } else if (getEventHub()->hasRelativeAxis(getDeviceId(), REL_X) + || getEventHub()->hasRelativeAxis(getDeviceId(), REL_Y)) { + // The device is a cursor device with a touch pad attached. + // By default don't use the touch pad to move the pointer. + mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_PAD; + } else { + // The device is a touch pad of unknown purpose. + mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER; + } - String8 deviceTypeString; - if (getDevice()->getConfiguration().tryGetProperty(String8("touch.deviceType"), - deviceTypeString)) { - if (deviceTypeString == "touchScreen") { - mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_SCREEN; - } else if (deviceTypeString == "touchPad") { - mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_PAD; - } else if (deviceTypeString == "pointer") { - mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER; - } else if (deviceTypeString != "default") { - LOGW("Invalid value for touch.deviceType: '%s'", deviceTypeString.string()); - } - } + String8 deviceTypeString; + if (getDevice()->getConfiguration().tryGetProperty(String8("touch.deviceType"), + deviceTypeString)) { + if (deviceTypeString == "touchScreen") { + mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_SCREEN; + } else if (deviceTypeString == "touchPad") { + mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_PAD; + } else if (deviceTypeString == "pointer") { + mParameters.deviceType = Parameters::DEVICE_TYPE_POINTER; + } else if (deviceTypeString != "default") { + LOGV("touch.deviceType: '%s'", deviceTypeString.string()); + } + } - mParameters.orientationAware = mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN; - getDevice()->getConfiguration().tryGetProperty(String8("touch.orientationAware"), - mParameters.orientationAware); + mParameters.orientationAware = mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN; + getDevice()->getConfiguration().tryGetProperty(String8("touch.orientationAware"), + mParameters.orientationAware); - mParameters.associatedDisplayId = -1; - mParameters.associatedDisplayIsExternal = false; - if (mParameters.orientationAware - || mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN - || mParameters.deviceType == Parameters::DEVICE_TYPE_POINTER) { - mParameters.associatedDisplayIsExternal = - mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN - && getDevice()->isExternal(); - mParameters.associatedDisplayId = 0; - } + mParameters.associatedDisplayId = -1; + mParameters.associatedDisplayIsExternal = false; + if (mParameters.orientationAware + || mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN + || mParameters.deviceType == Parameters::DEVICE_TYPE_POINTER) { + mParameters.associatedDisplayIsExternal = + mParameters.deviceType == Parameters::DEVICE_TYPE_TOUCH_SCREEN + && getDevice()->isExternal(); + mParameters.associatedDisplayId = 0; + } + } + else + { + mParameters.gestureMode = Parameters::GESTURE_MODE_SPOTS; + mParameters.deviceType = Parameters::DEVICE_TYPE_TOUCH_SCREEN; + mParameters.orientationAware = true; + mParameters.associatedDisplayId = 0; + } + } void TouchInputMapper::dumpParameters(String8& dump) { @@ -2646,11 +2973,16 @@ } // Ensure we have valid X and Y axes. - if (!mRawPointerAxes.x.valid || !mRawPointerAxes.y.valid) { - LOGW(INDENT "Touch device '%s' did not report support for X or Y axis! " - "The device will be inoperable.", getDeviceName().string()); - mDeviceMode = DEVICE_MODE_DISABLED; - return; + if (!mRawPointerAxes.x.valid || !mRawPointerAxes.y.valid) + { + //LOGW(INDENT "Touch device '%s' did not report support for X or Y axis! " + // "The device will be inoperable.", getDeviceName().string()); + //mDeviceMode = DEVICE_MODE_DISABLED; + //return; + mRawPointerAxes.x.maxValue = 4095; + mRawPointerAxes.x.minValue = 0; + mRawPointerAxes.y.maxValue = 4095; + mRawPointerAxes.y.minValue = 0; } // Get associated display dimensions. @@ -3878,34 +4210,62 @@ default: distance = 0; } - + //correct the one touch data here + float adjust_x,adjust_y; + adjust_x = float(in.x - mRawPointerAxes.x.minValue) * mXScale; + adjust_y = float(in.y - mRawPointerAxes.y.minValue) * mYScale; + if(mNeedCorrect == false) + { + int ret = tp_getpara(tp_para); + if(ret == 1) + { + adjust_x= ( tp_para[2] + tp_para[0]*adjust_x + tp_para[1]*adjust_x ) / tp_para[6]; + adjust_y = ( tp_para[5] + tp_para[3]*adjust_y + tp_para[4]*adjust_y ) / tp_para[6]; + mNeedCorrect = true; + } + + } + else + { + if(resetTouch == true) + { + int ret = tp_getpara(tp_para); + if(ret == 1) + { + mNeedCorrect = true; + resetTouch = false; + } + } + adjust_x = ( tp_para[2] + tp_para[0]*adjust_x + tp_para[1]*adjust_x ) / tp_para[6]; + adjust_y = ( tp_para[5] + tp_para[3]*adjust_y + tp_para[4]*adjust_y ) / tp_para[6]; + } // X and Y // Adjust coords for surface orientation. float x, y; switch (mSurfaceOrientation) { case DISPLAY_ORIENTATION_90: - x = float(in.y - mRawPointerAxes.y.minValue) * mYScale; - y = float(mRawPointerAxes.x.maxValue - in.x) * mXScale; + x = adjust_y; + y = mSurfaceWidth-adjust_x; orientation -= M_PI_2; if (orientation < - M_PI_2) { orientation += M_PI; } break; case DISPLAY_ORIENTATION_180: - x = float(mRawPointerAxes.x.maxValue - in.x) * mXScale; - y = float(mRawPointerAxes.y.maxValue - in.y) * mYScale; + x = mSurfaceWidth - adjust_x; + y = mSurfaceHeight - adjust_y; break; case DISPLAY_ORIENTATION_270: - x = float(mRawPointerAxes.y.maxValue - in.y) * mYScale; - y = float(in.x - mRawPointerAxes.x.minValue) * mXScale; + x = mSurfaceHeight - adjust_y; + y = adjust_x; orientation += M_PI_2; if (orientation > M_PI_2) { orientation -= M_PI; } break; default: - x = float(in.x - mRawPointerAxes.x.minValue) * mXScale; - y = float(in.y - mRawPointerAxes.y.minValue) * mYScale; + x = adjust_x; + y = adjust_y; break; } @@ -5609,6 +5969,11 @@ if (!inSlot->isInUse()) { continue; } + + if((inSlot->getX() == 0) && (inSlot->getY() == 0)) + { + continue; + } if (outCount >= MAX_POINTERS) { #if DEBUG_POINTERS @@ -5643,7 +6008,8 @@ bool isHovering = mTouchButtonAccumulator.getToolType() != AMOTION_EVENT_TOOL_TYPE_MOUSE && (mTouchButtonAccumulator.isHovering() || (mRawPointerAxes.pressure.valid && inSlot->getPressure() <= 0)); - outPointer.isHovering = isHovering; + //outPointer.isHovering = isHovering; + outPointer.isHovering = false; // Assign pointer id using tracking id if available. if (*outHavePointerIds) { @@ -5669,7 +6035,8 @@ } else { outPointer.id = id; mCurrentRawPointerData.idToIndex[id] = outCount; - mCurrentRawPointerData.markIdBit(id, isHovering); + //mCurrentRawPointerData.markIdBit(id, isHovering); + mCurrentRawPointerData.markIdBit(id, outPointer.isHovering); newPointerIdBits.markBit(id); } }
Index: PointerController.cpp =================================================================== --- PointerController.cpp (revision 2175) +++ PointerController.cpp (revision 2176) @@ -30,6 +30,7 @@ #include <SkColor.h> #include <SkPaint.h> #include <SkXfermode.h> +#include <cutils/properties.h> namespace android { @@ -121,6 +122,19 @@ *outMaxY = mLocked.displayHeight - 1; break; } + char property[PROPERTY_VALUE_MAX]; + if (property_get("ro.sf.hwrotation", property, NULL) > 0) { + float temp ; + //displayOrientation + switch (atoi(property)) { + case 270: + temp =*outMaxX ; + *outMaxX =*outMaxY; + *outMaxY =temp; + break; + } + } + return true; }
Index: InputReader.h =================================================================== --- InputReader.h (revision 2175) +++ InputReader.h (revision 2176) @@ -267,6 +267,7 @@ * The changes flag is a bitfield that indicates what has changed and whether * the input devices must all be reopened. */ virtual void requestRefreshConfiguration(uint32_t changes) = 0; + virtual void resetTouchCalibration() = 0; }; @@ -335,6 +336,7 @@ virtual void requestRefreshConfiguration(uint32_t changes); + virtual void resetTouchCalibration(); protected: // These members are protected so they can be instrumented by test cases. virtual InputDevice* createDeviceLocked(int32_t deviceId, @@ -372,6 +374,7 @@ // The event queue. static const int EVENT_BUFFER_SIZE = 256; RawEvent mEventBuffer[EVENT_BUFFER_SIZE]; + RawEvent mConvertEventBuffer[EVENT_BUFFER_SIZE]; KeyedVector<int32_t, InputDevice*> mDevices; @@ -386,6 +389,19 @@ void handleConfigurationChangedLocked(nsecs_t when); int32_t mGlobalMetaState; + bool mKeyInMouseMode; + bool mKeySynced; + bool mVirtualTouchCreated; + bool mVirtualMouseCreated; + int32_t mDistance; + int mKeyDeviceId; + int mMouseDeviceId; + static const int MAX_MOUSE_SIZE = 10; + int mRealMouseDeviceId[MAX_MOUSE_SIZE]; + int mTouchDeviceId; + int mRealTouchDeviceId; + int mLeft,mRight,mTop,mBottom; + int mLeftBtn,mRightBtn,mMidBtn; void updateGlobalMetaStateLocked(); int32_t getGlobalMetaStateLocked(); @@ -461,6 +477,7 @@ int32_t getMetaState(); void fadePointer(); + void unfadePointer(); void notifyReset(nsecs_t when); @@ -840,6 +857,7 @@ virtual int32_t getMetaState(); virtual void fadePointer(); + virtual void unfadePointer(); protected: InputDevice* mDevice; @@ -944,10 +962,10 @@ virtual void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes); virtual void reset(nsecs_t when); virtual void process(const RawEvent* rawEvent); - virtual int32_t getScanCodeState(uint32_t sourceMask, int32_t scanCode); virtual void fadePointer(); + virtual void unfadePointer(); private: // Amount that trackball needs to move in order to generate a key event. @@ -1006,6 +1024,11 @@ virtual uint32_t getSources(); virtual void populateDeviceInfo(InputDeviceInfo* deviceInfo); virtual void dump(String8& dump); + //get tp correct params + int _get_str2int(char *saddr, int *flag); + int _get_item(char *saddr, char *name, char *value, unsigned int line_len); + int _get_line(char *daddr, int *flag, unsigned int total_len); + virtual int tp_getpara(int *tp_para); virtual void configure(nsecs_t when, const InputReaderConfiguration* config, uint32_t changes); virtual void reset(nsecs_t when); virtual void process(const RawEvent* rawEvent); @@ -1018,6 +1041,7 @@ virtual void fadePointer(); virtual void timeoutExpired(nsecs_t when); + int tp_para[7]; protected: CursorButtonAccumulator mCursorButtonAccumulator; CursorScrollAccumulator mCursorScrollAccumulator; @@ -1188,6 +1212,7 @@ virtual void syncTouch(nsecs_t when, bool* outHavePointerIds) = 0; + bool mNeedCorrect; private: // The surface orientation and width and height set by configureSurface(). int32_t mSurfaceOrientation;
Index: com_android_server_InputManager.cpp =================================================================== --- com_android_server_InputManager.cpp (revision 2175) +++ com_android_server_InputManager.cpp (revision 2176) @@ -201,6 +201,7 @@ virtual nsecs_t notifyANR(const sp<InputApplicationHandle>& inputApplicationHandle, const sp<InputWindowHandle>& inputWindowHandle); virtual void notifyInputChannelBroken(const sp<InputWindowHandle>& inputWindowHandle); + virtual void resetTouchCalibration(); virtual bool filterInputEvent(const InputEvent* inputEvent, uint32_t policyFlags); virtual void getDispatcherConfiguration(InputDispatcherConfiguration* outConfig); virtual bool isKeyRepeatEnabled(); @@ -750,6 +751,10 @@ return pass; } +void NativeInputManager::resetTouchCalibration() +{ + mInputManager->getReader()->resetTouchCalibration(); +} void NativeInputManager::interceptKeyBeforeQueueing(const KeyEvent* keyEvent, uint32_t& policyFlags) { // Policy: @@ -1307,6 +1312,14 @@ transferTouchFocus(fromChannel, toChannel); } +static void android_server_InputManager_nativeResetTouchCalibration(JNIEnv* env, jclass clazz) +{ + if (checkInputManagerUnitialized(env)) { + return; + } + + gNativeInputManager->resetTouchCalibration(); +} static void android_server_InputManager_nativeSetPointerSpeed(JNIEnv* env, jclass clazz, jint speed) { if (checkInputManagerUnitialized(env)) { @@ -1398,6 +1411,8 @@ (void*) android_server_InputManager_nativeDump }, { "nativeMonitor", "()V", (void*) android_server_InputManager_nativeMonitor }, + { "nativeResetTouchCalibration", "()V", + (void*) android_server_InputManager_nativeResetTouchCalibration }, }; #define FIND_CLASS(var, className) \
Index: WindowState.java =================================================================== --- WindowState.java (revision 2175) +++ WindowState.java (revision 2176) @@ -238,6 +238,12 @@ // we can give the window focus before waiting for the relayout. boolean mRelayoutCalled; + // If the application has called relayout() with changes that can + // impact its window's size, we need to perform a layout pass on it + // even if it is not currently visible for layout. This is set + // when in that case until the layout is done. + boolean mLayoutNeeded; + // This is set after the Surface has been created but before the // window has been drawn. During this time the surface is hidden. boolean mDrawPending; @@ -1444,6 +1450,16 @@ || mAnimating); } + public boolean isGoneForLayoutLw() { + final AppWindowToken atoken = mAppToken; + return mViewVisibility == View.GONE + || !mRelayoutCalled + || (atoken == null && mRootToken.hidden) + || (atoken != null && (atoken.hiddenRequested || atoken.hidden)) + || mAttachedHidden + || mExiting || mDestroying; + } + /** * Returns true if the window has a surface that it has drawn a * complete UI in to. @@ -1718,8 +1734,9 @@ pw.print(mPolicyVisibilityAfterAnim); pw.print(" mAttachedHidden="); pw.println(mAttachedHidden); } - if (!mRelayoutCalled) { - pw.print(prefix); pw.print("mRelayoutCalled="); pw.println(mRelayoutCalled); + if (!mRelayoutCalled || mLayoutNeeded) { + pw.print(prefix); pw.print("mRelayoutCalled="); pw.print(mRelayoutCalled); + pw.print(" mLayoutNeeded="); pw.println(mLayoutNeeded); } if (mSurfaceResized || mSurfaceDestroyDeferred) { pw.print(prefix); pw.print("mSurfaceResized="); pw.print(mSurfaceResized);
Index: WindowManagerService.java =================================================================== --- WindowManagerService.java (revision 2175) +++ WindowManagerService.java (revision 2176) @@ -2538,8 +2538,12 @@ if (win == null) { return 0; } - win.mRequestedWidth = requestedWidth; - win.mRequestedHeight = requestedHeight; + if (win.mRequestedWidth != requestedWidth + || win.mRequestedHeight != requestedHeight) { + win.mLayoutNeeded = true; + win.mRequestedWidth = requestedWidth; + win.mRequestedHeight = requestedHeight; + } if (attrs != null && seq == win.mSeq) { win.mSystemUiVisibility = systemUiVisibility; } @@ -2560,6 +2564,9 @@ } flagChanges = win.mAttrs.flags ^= attrs.flags; attrChanges = win.mAttrs.copyFrom(attrs); + if ((attrChanges&WindowManager.LayoutParams.LAYOUT_CHANGED) != 0) { + win.mLayoutNeeded = true; + } } if (DEBUG_LAYOUT) Slog.v(TAG, "Relayout " + win + ": " + win.mAttrs); @@ -3495,6 +3502,8 @@ if (req == ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED) { req = getOrientationFromAppTokensLocked(); } + + req = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE; return req; } @@ -5133,6 +5142,11 @@ // The screenshot API does not apply the current screen rotation. rot = mDisplay.getRotation(); + if(SystemProperties.getInt("ro.sf.hwrotation",0)==270) + { + rot =( rot+3)%4; + } + int fw = frame.width(); int fh = frame.height(); @@ -7391,8 +7405,11 @@ final int N = mWindows.size(); int i; - if (DEBUG_LAYOUT) Slog.v(TAG, "performLayout: needed=" - + mLayoutNeeded + " dw=" + dw + " dh=" + dh); + if (DEBUG_LAYOUT) { + Slog.v(TAG, "-------------------------------------"); + Slog.v(TAG, "performLayout: needed=" + + mLayoutNeeded + " dw=" + dw + " dh=" + dh); + } mPolicy.beginLayoutLw(dw, dh, mRotation); @@ -7434,16 +7451,17 @@ // if they want. (We do the normal layout for INVISIBLE // windows, since that means "perform layout as normal, // just don't display"). - if (!gone || !win.mHaveFrame) { + if (!gone || !win.mHaveFrame || win.mLayoutNeeded) { if (!win.mLayoutAttached) { if (initial) { //Slog.i(TAG, "Window " + this + " clearing mContentChanged - initial"); win.mContentChanged = false; } + win.mLayoutNeeded = false; win.prelayout(); mPolicy.layoutWindowLw(win, win.mAttrs, null); win.mLayoutSeq = seq; - if (DEBUG_LAYOUT) Slog.v(TAG, "-> mFrame=" + if (DEBUG_LAYOUT) Slog.v(TAG, " LAYOUT: mFrame=" + win.mFrame + " mContainingFrame=" + win.mContainingFrame + " mDisplayFrame=" + win.mDisplayFrame); @@ -7471,15 +7489,16 @@ // windows, since that means "perform layout as normal, // just don't display"). if ((win.mViewVisibility != View.GONE && win.mRelayoutCalled) - || !win.mHaveFrame) { + || !win.mHaveFrame || win.mLayoutNeeded) { if (initial) { //Slog.i(TAG, "Window " + this + " clearing mContentChanged - initial"); win.mContentChanged = false; } + win.mLayoutNeeded = false; win.prelayout(); mPolicy.layoutWindowLw(win, win.mAttrs, win.mAttachedWindow); win.mLayoutSeq = seq; - if (DEBUG_LAYOUT) Slog.v(TAG, "-> mFrame=" + if (DEBUG_LAYOUT) Slog.v(TAG, " LAYOUT: mFrame=" + win.mFrame + " mContainingFrame=" + win.mContainingFrame + " mDisplayFrame=" + win.mDisplayFrame); @@ -8580,7 +8599,11 @@ if (mDimAnimator == null) { mDimAnimator = new DimAnimator(mFxSession); } - mDimAnimator.show(innerDw, innerDh); + if (attrs.type == WindowManager.LayoutParams.TYPE_BOOT_PROGRESS) { + mDimAnimator.show(dw, dh); + } else { + mDimAnimator.show(innerDw, innerDh); + } mDimAnimator.updateParameters(mContext.getResources(), w, currentTime); } @@ -9411,6 +9434,49 @@ return mPolicy.hasNavigationBar(); } + public void resetInputCalibration() + { + mInputManager.resetTouchCalibration(); + } + public void statusbarShow() + { + if(mPolicy.statusbarShow()) + { + final long origId = Binder.clearCallingIdentity(); + synchronized (mWindowMap) { + performLayoutAndPlaceSurfacesLocked(); + } + Binder.restoreCallingIdentity(origId); + } + } + + public void statusbarHide() + { + if(mPolicy.statusbarHide()) + { + final long origId = Binder.clearCallingIdentity(); + synchronized (mWindowMap) { + performLayoutAndPlaceSurfacesLocked(); + } + Binder.restoreCallingIdentity(origId); + } + } + + public void invokePerformWindow() + { + final long origId = Binder.clearCallingIdentity(); + synchronized (mWindowMap) { + performLayoutAndPlaceSurfacesLocked(); + } + Binder.restoreCallingIdentity(origId); + } + + + public void lockNow() { + mPolicy.lockNow(); + } + + void dumpInput(FileDescriptor fd, PrintWriter pw, boolean dumpAll) { pw.println("WINDOW MANAGER INPUT (dumpsys window input)"); mInputManager.dump(pw);
Index: InputManager.java =================================================================== --- InputManager.java (revision 2175) +++ InputManager.java (revision 2176) @@ -95,6 +95,8 @@ InputChannel toChannel); private static native void nativeSetPointerSpeed(int speed); private static native void nativeSetShowTouches(boolean enabled); + //reset tp correct params + private static native void nativeResetTouchCalibration(); private static native String nativeDump(); private static native void nativeMonitor(); @@ -175,6 +177,11 @@ if (DEBUG) { Slog.d(TAG, "Setting display #" + displayId + " orientation to " + rotation); } + if(SystemProperties.getInt("ro.sf.hwrotation",0)==270) + { + rotation =(rotation+3)%4; + } + nativeSetDisplayOrientation(displayId, rotation); } @@ -249,6 +256,13 @@ return nativeHasKeys(deviceId, sourceMask, keyCodes, keyExists); } + /** + *reset the tp correct params + */ + public void resetTouchCalibration() + { + nativeResetTouchCalibration(); + } /** * Creates an input channel that will receive all input from the input dispatcher. * @param inputChannelName The input channel name.
Index: WindowManager.java =================================================================== --- WindowManager.java (revision 2175) +++ WindowManager.java (revision 2176) @@ -699,6 +699,8 @@ * {@hide} */ public static final int FLAG_SYSTEM_ERROR = 0x40000000; + public static final int FLAG_AW_HIDESTATUS = 0x80000000; + /** * Various behavioral options/flags. Default is none. * @@ -777,7 +779,9 @@ @ViewDebug.FlagToString(mask = FLAG_SPLIT_TOUCH, equals = FLAG_SPLIT_TOUCH, name = "FLAG_SPLIT_TOUCH"), @ViewDebug.FlagToString(mask = FLAG_HARDWARE_ACCELERATED, equals = FLAG_HARDWARE_ACCELERATED, - name = "FLAG_HARDWARE_ACCELERATED") + name = "FLAG_HARDWARE_ACCELERATED"), + @ViewDebug.FlagToString(mask = FLAG_AW_HIDESTATUS, equals = FLAG_AW_HIDESTATUS, + name = "FLAG_AW_HIDESTATUS") }) public int flags;
Index: WindowManagerPolicy.java =================================================================== --- WindowManagerPolicy.java (revision 2175) +++ WindowManagerPolicy.java (revision 2176) @@ -298,6 +298,11 @@ boolean isDisplayedLw(); /** + * Is this window considered to be gone for purposes of layout? + */ + boolean isGoneForLayoutLw(); + + /** * Returns true if this window has been shown on screen at some time in * the past. Must be called with the window manager lock held. * @@ -946,6 +951,10 @@ */ public void systemReady(); + public boolean statusbarShow(); + + public boolean statusbarHide(); + /** * Called when the system is done booting to the point where the * user can start interacting with it. @@ -1023,6 +1032,11 @@ public boolean hasNavigationBar(); /** + * Lock the device now. + */ + public void lockNow(); + + /** * Print the WindowManagerPolicy's state into the given stream. * * @param prefix Text to print at the front of each line.
Index: IWindowManager.aidl =================================================================== --- IWindowManager.aidl (revision 2175) +++ IWindowManager.aidl (revision 2176) @@ -229,4 +229,14 @@ * Device has a software navigation bar (separate from the status bar). */ boolean hasNavigationBar(); + + /** + * Lock the device immediately. + */ + void lockNow(); + + void resetInputCalibration(); + void statusbarShow(); + void statusbarHide(); + void invokePerformWindow(); }
Index: attrs.xml =================================================================== --- attrs.xml (revision 2175) +++ attrs.xml (revision 2176) @@ -307,6 +307,8 @@ <attr name="windowNoTitle" format="boolean" /> <!-- Flag indicating whether this window should fill the entire screen. --> <attr name="windowFullscreen" format="boolean" /> + <!-- Flag indicating whether this window should hide the statusbar for tablet. --> + <attr name="windowHideStatusbar" format="boolean" /> <!-- Flag indicating whether this is a floating window. --> <attr name="windowIsFloating" format="boolean" /> <!-- Flag indicating whether this is a translucent window. --> @@ -1515,6 +1517,7 @@ <attr name="windowFrame" /> <attr name="windowNoTitle" /> <attr name="windowFullscreen" /> + <attr name="windowHideStatusbar" /> <attr name="windowIsFloating" /> <attr name="windowIsTranslucent" /> <attr name="windowShowWallpaper" /> @@ -5285,6 +5288,10 @@ <!-- Used to shift center of pattern horizontally. --> <attr name="horizontalOffset" format="dimension" /> + <!-- The max application icon number --> + <attr name="maxAppIconNum" format="integer" /> + <!-- The icon size --> + <attr name="iconSize" format="integer" /> </declare-styleable> <!-- =============================== -->
Index: public.xml =================================================================== --- public.xml (revision 2175) +++ public.xml (revision 2176) @@ -572,6 +572,7 @@ <public type="attr" name="listChoiceIndicatorMultiple" id="0x0101021a" /> <public type="attr" name="versionCode" id="0x0101021b" /> <public type="attr" name="versionName" id="0x0101021c" /> + <public type="attr" name="windowHideStatusbar" id="0x0101040e" /> <public type="id" name="background" id="0x01020000" /> <public type="id" name="checkbox" id="0x01020001" />