AndroidO,AndroidP SystemUI问题修改笔记

  1. 修改NavigationBar ‘back’ 触控范围
    SystemUI/src/com/android/systemui/statusbar/phone/NearestTouchFrame.java
    @VisibleForTestingNearestTouchFrame(Context context, AttributeSet attrs, Configuration c) {super(context, attrs);//mIsActive = c.smallestScreenWidthDp < 600;mIsActive = false}
  1. 修改阿拉伯语布局NavigationBar顺序
    只需要修改config.xml中如下值的顺序即可(ps:图片需要单独修改)
<string name="config_navBarLayout" translatable="false">left,recent;home;back,right</string>
  1. back按键的处理在onBackPressed()方法中
    SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java
 /*** Notifies this manager that the back button has been pressed.** @param hideImmediately Hide bouncer when {@code true}, keep it around otherwise.*                        Non-scrimmed bouncers have a special animation tied to the expansion*                        of the notification panel.* @return whether the back press has been handled*/public boolean onBackPressed(boolean hideImmediately) {Log.d(TAG, "onBackPressed()");if (mBouncer.isShowing()) {mStatusBar.endAffordanceLaunch();reset(true/*hideImmediately*/);//add by dongjiao.tang@tcl.com for defect 7216010///M : fix ALPS01852958, clear mAfterKeyguardGoneAction when leaving bouncer.mAfterKeyguardGoneAction = null ;return true;}if (DEBUG) Log.d(TAG, "onBackPressed() - reset & return false");return false;}
  1. screen pinnerUI处理需要修改如下两个值
    res/values/dimens.xml
<dimen name="screen_pinning_request_button_height">85dp</dimen>
<dimen name="screen_pinning_request_nav_icon_padding">0dp</dimen>
  1. 隐藏MTK原生的SIM ME LOCK需要修改
    SystemUI/src/com/android/keyguard/KeyguardSecurityModel.java
    其中注释// check ME required,修改其中一个值为false就行了
   public boolean isPinPukOrMeRequiredOfPhoneId(int phoneId) {KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext);if (updateMonitor != null) {final IccCardConstants.State simState = updateMonitor.getSimStateOfPhoneId(phoneId);Log.d(TAG, "isPinPukOrMeRequiredOfSubId() - phoneId = " + phoneId +", simState = " + simState) ;return (// check PIN required(simState == IccCardConstants.State.PIN_REQUIRED&& !updateMonitor.getPinPukMeDismissFlagOfPhoneId(phoneId))// check PUK required|| (simState == IccCardConstants.State.PUK_REQUIRED&& !updateMonitor.getPinPukMeDismissFlagOfPhoneId(phoneId)&& updateMonitor.getRetryPukCountOfPhoneId(phoneId) != 0)// check ME required|| (simState == IccCardConstants.State.NETWORK_LOCKED&& !updateMonitor.getPinPukMeDismissFlagOfPhoneId(phoneId)&& updateMonitor.getSimMeLeftRetryCountOfPhoneId(phoneId) != 0&& KeyguardUtils.isMediatekSimMeLockSupport()&& !updateMonitor.getSimmeDismissFlagOfPhoneId(phoneId)&& KeyguardUtils.isSimMeLockValid(phoneId)&&isShowSimMeLock));} else {return false;}}
  1. 锁屏界面底部shortcut图标启动应用涉及到如下几个类
    SystemUI/src/com/android/systemui/statusbar/phone/KeyguardBottomAreaView.java
private void launchMessage() {Intent messageIntent = new Intent();mActivityStarter.startActivity(messageIntent, true);}

SystemUI/src/com/android/systemui/ActivityStarterDelegate.java

 @Overridepublic void startActivity(Intent intent, boolean dismissShade, Callback callback) {if (mActualStarter == null) return;mActualStarter.startActivity(intent, dismissShade, callback);}

SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java

@Overridepublic void startActivity(Intent intent, boolean dismissShade, Callback callback) {startActivityDismissingKeyguard(intent, false, dismissShade, callback);}//隐藏NotificationPanelViewmStatusBarView.collapsePanel(true, false /* delayed */, 100.0f /* speedUpFactor */);
  1. 禁用锁屏代码
 private void setLockScreenisDisable(){LockPatternUtils lockPatternUtils = new LockPatternUtils(mContext);if(lockPatternUtils == null)return;boolean isOTA;try {if(AppGlobals.getPackageManager() == null)return;isOTA = AppGlobals.getPackageManager().isUpgrade();Log.d(TAG,"setLockScreenisDisable...isOTA = :"+isOTA+",isLockScreenDisable = :"+(lockPatternUtils.isLockScreenDisabled(UserHandle.USER_OWNER))+",!ro.lockscreen.disable.default = :"+(!(SystemProperties.getBoolean("ro.lockscreen.disable.default", false))));} catch (RemoteException e) {throw new IllegalStateException("Package manager not available");}if(lockPatternUtils.isLockScreenDisabled(UserHandle.USER_OWNER) && isOTA && !(SystemProperties.getBoolean("ro.lockscreen.disable.default", false))){lockPatternUtils.setLockScreenDisabled(false, UserHandle.USER_OWNER);}}
  1. 插拔SIM卡之后,原来的pin/password/pattern会缩小,原因是Android原生没有考虑锁屏加入其他
    buncer的情况
    SystemUI/src/com/android/keyguard/KeyguardSecurityViewFlipper.java
@Overrideprotected void onMeasure(int widthSpec, int heightSpec) {....for (int i = 0; i < count; i++) {final View child = getChildAt(i);final LayoutParams lp = (LayoutParams) child.getLayoutParams();//add by dongjiao.tang@tcl.com for defect 7485624 beginif(child.getVisibility() == View.INVISIBLE || child.getVisibility() == View.GONE){continue;}//add by dongjiao.tang@tcl.com for defect 7485624 end......}
  1. Home键在PhoneWindowManager.java中的调用
void launchHomeFromHotKey(final boolean awakenFromDreams, final boolean respectKeyguard)
  1. 中文或者日语中使用plurals类型字符串不管单数复数都只会使用other,不会区分单复数,使用plurals时要特别注意中文和日语
  2. 隐藏QuickSettings代码

SystemUI/src/com/android/systemui/statusbar/phone/StatusBarKeyguardViewManager.java

                if (mBouncer.isShowing()) {if (mShowing) {mStatusBar.hideKeyguard();mBouncer.hide(false /* destroyView */);KeyguardUpdateMonitor.getInstance(mContext).sendKeyguardReset();updateStates();}}
  1. SIM卡的View和password的View都在一个父类里面,未插SIM卡测量的寬高和插了SIM卡测量的寬高发生了变化导致password向上浮动,添加:android:layout_gravity=“bottom”
    SystemUI/res-keyguard/layout/keyguard_password_view.xml
<com.android.keyguard.KeyguardPasswordViewxmlns:android="http://schemas.android.com/apk/res/android"xmlns:androidprv="http://schemas.android.com/apk/res-auto"android:id="@+id/keyguard_password_view"android:orientation="vertical"android:layout_width="match_parent"android:layout_height="wrap_content"android:layout_gravity="bottom"androidprv:layout_maxWidth="@dimen/keyguard_security_width"androidprv:layout_maxHeight="@dimen/keyguard_security_height"android:gravity="bottom">
  1. framework层有关锁屏密码长度的代码
    services/devicepolicy/java/com/android/server/devicepolicy/DevicePolicyManagerService.java
//PasswordMetrics 存储密码的矩阵
public void setActivePasswordState(PasswordMetrics metrics, int userHandle)
  1. 定制默认锁屏壁纸需求
    SystemUI/res-keyguard/drawable-xhdpi/default_lock_wallpaper.jpg
    SystemUI/src/com/android/systemui/statusbar/phone/LockscreenWallpaper.java
public LockscreenWallpaper(Context ctx, StatusBar bar, Handler h) {......//add by dongjiao.tang@tcl.com for defect 9245999 beginif(isFristBoot()){mWallpaperManager.setStream(mContext.getResources().openRawResource(R.drawable.default_lock_wallpaper),null,true,WallpaperManager.FLAG_LOCK);Settings.System.putInt(mContext.getContentResolver(), "isDefaultWallpaper",1);}else{Settings.System.putInt(mContext.getContentResolver(), "isDefaultWallpaper",0);}//add by dongjiao.tang@tcl.com for defect 9245999 begin} catch (RemoteException e) {Log.e(TAG, "System dead?" + e);} catch (IOException e) {Log.e(TAG, "Exception = :" + e);}}}//add by dongjiao.tang@tcl.com for defect 9245999 beginprivate boolean isFristBoot(){IPackageManager pm = AppGlobals.getPackageManager();try {return pm.isFirstBoot();} catch (RemoteException e) {throw e.rethrowFromSystemServer();}}//add by dongjiao.tang@tcl.com for defect 9245999 end//frameworks/base/core/java/android/app/WallpaperManager.javapublic ParcelFileDescriptor getWallpaperFile(@SetWallpaperFlags int which, int userId) {//add by dongjiao.tang@tcl.com for defect 9245999 beginif(Settings.System.getInt(mContext.getContentResolver(), "isDefaultWallpaper",-1)==1 && which==2){String pkg = mContext.getPackageName();if(pkg.startsWith("com.android.cts") || pkg.startsWith("com.android.vts") || pkg.contains("gts"))return null;}//add by dongjiao.tang@tcl.com for defect 9245999 end......
}
  1. 插入SIM卡,点击Emergency之后再返回SIM PIN界面,QuickSettings会下拉下来

    修改代码
    SystemUI/src/com/android/systemui/statusbar/phone/PanelView.java
public void expand(final boolean animate){......getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {@Overridepublic void onGlobalLayout() {if (!mInstantExpanding) {getViewTreeObserver().removeOnGlobalLayoutListener(this);return;}//add by dongjiao.tang@tcl.com for defect 7226148 beginif (mStatusBar.getStatusBarWindow().getHeight()!= mStatusBar.getStatusBarHeight()&&!mStatusBar.isBouncerShowing()|| (mStatusBar.isKeyguardSecure() ?mStatusBar.getBarState() != StatusBarState.SHADE : true)) {//add by dongjiao.tang@tcl.com for defect 7226148 end......
}
  1. 锁屏notification渐变度设置
    vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
private void updateNotificationTranslucency() {float alpha = 1f;if (mClosingWithAlphaFadeOut && !mExpandingFromHeadsUp &&!mHeadsUpManager.hasPinnedHeadsUp()) {alpha = getFadeoutAlpha();}if (mBarState == StatusBarState.KEYGUARD && !mHintAnimationRunning) {alpha *= mClockPositionResult.clockAlpha;}//add by dongjiao.tang@tcl.com for defect 8503312 beginif(!mUnlockMethodCache.isMethodSecure() && mNotificationStackScroller.getAlpha() != 1 && mNotificationStackScroller.getAlpha() != 0){mStatusBar.getLockIcon().setAlpha(alpha);}//add by dongjiao.tang@tcl.com for defect 8503312 endmNotificationStackScroller.setAlpha(alpha);}
  1. StatusBar状态设置代码在StatusBarWindowController的apply方法里,包括高度,宽度:
private void apply(State state) {applyKeyguardFlags(state);applyForceStatusBarVisibleFlag(state);applyFocusableFlag(state);applyForceShowNavigationFlag(state);adjustScreenOrientation(state);applyHeight(state);applyUserActivityTimeout(state);applyInputFeatures(state);applyFitsSystemWindows(state);applyModalFlag(state);applyBrightness(state);applyHasTopUi(state);applyNotTouchable(state);applyStatusBarColorSpaceAgnosticFlag(state);if (mLp != null && mLp.copyFrom(mLpChanged) != 0) {//寬高封装在mLpmWindowManager.updateViewLayout(mStatusBarView, mLp);}if (mHasTopUi != mHasTopUiChanged) {try {mActivityManager.setHasTopUi(mHasTopUiChanged);} catch (RemoteException e) {Log.e(TAG, "Failed to call setHasTopUi", e);}mHasTopUi = mHasTopUiChanged;}notifyStateChangedCallbacks();}

SystemUI常见问题修改方法相关推荐

  1. BAOCMS【QQ登录】回调地址常见问题及修改方法

    百度一次 http://wiki.open.qq.com/wiki/[QQ登录]回调地址常见问题及修改方法 百度一下 http://wiki.connect.qq.com/回调地址常见问题及修改方法 ...

  2. 启动MySQL:net start mysql出现问题+本地Mysql忘记密码的修改方法

    解决方法1:(普遍) 管理员开启cmd,进入bin文件夹,方法见图: cmd内输入:cd C:\Program Files\MySQL\MySQL Server 8.0\bin这里的路径要换成你自己b ...

  3. debug运行可以,release运行报错的原因及修改方法

    通常我们开发的程序有2种模式:Debug模式和Release模式在Debug模式下,编译器会记录很多调试信息,也可以加入很多测试代码,方便我们程序员测试,以及出现bug时的分析解决Release模式下 ...

  4. tensorflow中keep_prob的修改方法

    tensorflow中keep_prob的修改方法 warning: WARNING:tensorflow:From D:\software\pycharm_location\venv\Dehaze- ...

  5. MongoDB进阶系列(11)——“改”的那些事(二)文档的keyvalue为数组的修改方法...

    2019独角兽企业重金招聘Python工程师标准>>> 本文将讨论关于文档中keyvalue为数组的情况如何修改数组. 首先,创建一个c4集合,集合中的文档包含一个arrint字段, ...

  6. php104.tmp,ThinkPHP5.0多个文件上传后找不到临时文件的修改方法

    这是修改之前的代码 if(!empty($_FILES)){ if(!empty($_FILES[org_positive])){ $org_positive = request()->file ...

  7. dede修改mysql,Dedecms(织梦)程序MySQL修复表和文章路径修改方法

    做网站是我们经常会遇到被一些小问题困扰的.其实有些问题非常的简单,通过百度搜索一下都是可以解决的. 最近模板网遇到两个用户的dedecms的问题,一个涉及到MySQL修复表,另一个就是文章路径修改,相 ...

  8. java win8 mac地址_Windows8系统下MAC地址修改方法图文教程

    本文介绍了在Windows电脑平台下修改MAC地址的方法,该方法适用于Windows XP.Windows 7和Windows 8电脑.之所以要修改MAC地址,一般是在局域网中,网络管理员设置了MAC ...

  9. 我的世界服务器修改飞行速度,《我的世界》创造模式飞行速度修改方法介绍

    <我的世界>创造模式飞行速度修改方法介绍 2014-12-19 16:37:35来源:mcbbs编辑:评论(0) <我的世界>游戏中如何修改飞行速度?接下来为大家带来玩家分享的 ...

最新文章

  1. Centos 7 意外断电如何处理
  2. linux--memcache的安装和使用(转)
  3. 最小生成树基础算法(Prim + Krustal)
  4. 运筹学最优化理论系列概念-单纯形法原理解析
  5. 进制转换应用场景_PLC编程:PLC内部各类型数据转换(整理分享)
  6. 手把手教你写DI_3_小白徒手支持 Singleton 和 Scoped 生命周期
  7. cgi备份还原和ghost有什么区别_手动GHOST还原重装系统详细教程
  8. [转载] 字符串太长 pep8_Python f字符串– PEP 498 –文字字符串插值
  9. SQL Server SQL高级查询语句小结(转)
  10. CSS 轮廓(outline)
  11. python3--迭代器
  12. 以太坊新生合约总数骤减;比特币大跌,本周主链排名震荡 | 数据周榜
  13. 漫谈多模光纤类型:OM1、OM2、OM3、OM4、OM5,深度好文,值得阅读
  14. 如何制作龙芯系统安装U盘
  15. 信号理论: 信号集及其映射
  16. web中常见的敏感信息
  17. 串行进位加法器电路图(logisim实现)
  18. html如何设置导航栏例子,CSS 导航栏
  19. python弹球游戏实验报告_Python游戏练习之弹球示例
  20. java根据日期判断星座_给定公历日期计算12星座(Java代码实现)

热门文章

  1. 【验证码二】使用验证码
  2. 赫兹的单位换算_赫兹是什么单位名称(赫兹单位名称及换算方法)
  3. 实数进制转换:十进制转成二进制
  4. 复高斯变量跟卡方分布、指数分布、伽马分布的关系
  5. 微软oneDrive网站打不开
  6. 找不到msvcp120.dll+mysql安装问题
  7. 数据存储与备份管理解决方案
  8. SMBUS的介绍与访问
  9. 【SpringBoot整合缓存】-----Redis缓存篇
  10. 技术贴:如何跟刚认识的女孩发短信