文件清单

add   vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/SharedConfig.java
modified:   vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java
modified:   vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java
modified:   vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java
modified:   vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
modified:   vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java

一、动态控制导航栏虚拟按键(Home/RecentAPP/Back)
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/SharedConfig.java

/** Copyright (C) 2015 The Android Open Source Project** Licensed under the Apache License, Version 2.0 (the "License");* you may not use this file except in compliance with the License.* You may obtain a copy of the License at**      http://www.apache.org/licenses/LICENSE-2.0** Unless required by applicable law or agreed to in writing, software* distributed under the License is distributed on an "AS IS" BASIS,* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.* See the License for the specific language governing permissions and* limitations under the License.*/package com.android.systemui.statusbar.phone;import android.util.Log;
import android.content.Context;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;class SharedConfig {private SharedConfig(){};private static SharedConfig instance;private static final String CONFIG_FILE_NAME =  "CONFIG";private SharedPreferences sharedPreferences;private Editor editor;public static final String KEY_PANEL_BAR = "KEY_PANEL_BAR";public static final String KEY_PANEL_GONE = "KEY_PANEL_GONE";public static final String KEY_NAVIGATION_BAR = "KEY_NAVIGATION_BAR";public static final String KEY_NAVIGATION_BUTTON = "KEY_NAVIGATION_BUTTON";private SharedConfig(Context context) {sharedPreferences = context.getSharedPreferences(CONFIG_FILE_NAME, Context.MODE_PRIVATE);editor = sharedPreferences.edit();}public static SharedConfig getInstance(Context context) {if (instance == null) {instance = new SharedConfig(context);}return instance;}public boolean writeData(String key, boolean value) {Log.e("systemui", "put   key=" + key + "   value="+value);boolean result = false;editor.putBoolean(key, value);result = editor.commit();return result;}public boolean readBoolean(String key, boolean def) {boolean result = sharedPreferences.getBoolean(key, def);Log.e("systemui", "get   key=" + key + "   value="+result);return result;}public boolean writeData(String key, String value) {Log.e("systemui", "put   key=" + key + "   value="+value);boolean result = false;editor.putString(key, value);result = editor.commit();return result;}public String readString(String key, String def) {String result = sharedPreferences.getString(key, def);Log.e("systemui", "get   key=" + key + "   value="+result);return result;}
}

vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java

@@ -1038,6 +1060,11 @@ public class StatusBar extends SystemUI implements DemoMode,filter.addAction(Intent.ACTION_SCREEN_OFF);filter.addAction(DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG);
+        // add for handle navigationbar button
+        filter.addAction(OP_BUTTON);context.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, filter, null, null);+    private static final String OP_BUTTON = "cc.intent.systemui.SHOW_NAVIGATION_BUTTON";private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {@@ -2637,6 +2670,56 @@ public class StatusBar extends SystemUI implements DemoMode,}else if (DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG.equals(action)) {mQSPanel.showDeviceMonitoringDialog();
+            }else if (OP_BUTTON.equals(action)) {+                if(intent.hasExtra("show_navigation_button")){+                    String buttonStr = intent.getStringExtra("show_navigation_button");
+                    SharedConfig.getInstance(mContext).writeData(SharedConfig.KEY_NAVIGATION_BUTTON, buttonStr);
+                    Log.e("StatusBar", "OP_BUTTON: " + buttonStr);
+                    NavigationBarFragment mNavigationBar = mNavigationBarController.getDefaultNavigationBarFragment();
+                    if (mNavigationBar != null) mNavigationBar.notifyNavigationBarScreenOn();
+                }else{+                    Log.w("StatusBar","didn't contain show_navigation_button key");
+                }}

vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarFragment.java

@@ -212,7 +212,8 @@ public class NavigationBarFragment extends LifecycleFragment implements CallbackbuttonDispatcher = mNavigationBarView.getHomeHandle();}if (buttonDispatcher != null) {-                buttonDispatcher.setVisibility(alpha > 0 ? View.VISIBLE : View.INVISIBLE);
+                       //annotaion don't change backButton visiblity
+                //buttonDispatcher.setVisibility(alpha > 0 ? View.VISIBLE : View.INVISIBLE);buttonDispatcher.setAlpha(alpha, animate);}}-    private void notifyNavigationBarScreenOn() {-        mNavigationBarView.updateNavButtonIcons();
+    //change private to public
+    public void notifyNavigationBarScreenOn() {+        if (mNavigationBarView != null) {+            mNavigationBarView.updateNavButtonIcons();
+        }}

vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarView.java

@@ -647,6 +647,18 @@ public class NavigationBarView extends FrameLayout implementsgetBackButton().setVisibility(disableBack      ? View.INVISIBLE : View.VISIBLE);getHomeButton().setVisibility(disableHome      ? View.INVISIBLE : View.VISIBLE);getRecentsButton().setVisibility(disableRecent ? View.INVISIBLE : View.VISIBLE);
+
+        invalidButtonVisibility();
+    }
+
+       public void invalidButtonVisibility(){+        //20191211  add recent KeyButton  visibility  invisible
+        String buttonStr = SharedConfig.getInstance(mContext).readString(SharedConfig.KEY_NAVIGATION_BUTTON,
+         "b_h_r");
+        getBackButton().setVisibility(buttonStr.contains("b") ? View.VISIBLE : View.INVISIBLE);
+        getHomeButton().setVisibility(buttonStr.contains("h") ? View.VISIBLE : View.INVISIBLE);
+        getRecentsButton().setVisibility(buttonStr.contains("r") ? View.VISIBLE : View.INVISIBLE);
+        //20191211  add recent KeyButton  visibility  invisible}

二、动态控制 NavigationBar(显示/隐藏)
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/NavigationBarController.java

@@ -155,6 +155,7 @@ public class NavigationBarController implements Callbacks {navBar.setAutoHideController(autoHideController);navBar.restoreSystemUiVisibilityState();mNavigationBars.append(displayId, navBar);
+            mDisplayId = displayId;if (result != null) {navBar.setImeWindowStatus(display.getDisplayId(), result.mImeToken,});}+    //add
+    private int mDisplayId;
+    public void removeNavigationBarView(){+        removeNavigationBar(mDisplayId);
+    }
+private void removeNavigationBar(int displayId) {

vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java

@@ -623,6 +624,8 @@ public class StatusBar extends SystemUI implements DemoMode,AppOpsManager.OP_COARSE_LOCATION,AppOpsManager.OP_FINE_LOCATION};+    RegisterStatusBarResult result = null;
+mCommandQueue.addCallback(this);-        RegisterStatusBarResult result = null;
+        /*RegisterStatusBarResult result = null;*/try {result = mBarService.registerStatusBar(mCommandQueue);} catch (RemoteException ex) {@@ -802,6 +805,14 @@ public class StatusBar extends SystemUI implements DemoMode,mStatusBarWindow.setService(this);mStatusBarWindow.setOnTouchListener(getStatusBarWindowTouchListener());+        //add ,whether to show status bar[S]
+        boolean showStatusBar = SharedConfig.getInstance(mContext).readBoolean(SharedConfig.KEY_PANEL_GONE, true);
+        Log.v(TAG, "makeStatusBarView showStatusBar=" + showStatusBar);
+        if(mStatusBarWindow!=null)
+            mStatusBarWindow.setVisibility(showStatusBar ? View.VISIBLE : View.GONE);
+        //add ,whether to show status bar[E]
+
+putComponent(HeadsUpManager.class, mHeadsUpManager);-        createNavigationBar(result);
+        try {+            boolean showNav_Temp = SharedConfig.getInstance(mContext).readBoolean(SharedConfig.KEY_NAVIGATION_BAR, true);
+
+            if (DEBUG) Log.v(TAG, "hasNavigationBar=" + showNav_Temp);
+            if (showNav_Temp) {+                 createNavigationBar(result);
+            }
+        } catch (Exception ex) {+            // no window manager? good luck with that
+        }if (ENABLE_LOCKSCREEN_WALLPAPER) {+        filter.addAction(OP_NAVIGATION);context.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, filter, null, null);IntentFilter demoFilter = new IntentFilter();+    private static final String OP_NAVIGATION = "cc.intent.systemui.WHETHER_SHOW_NAVIGATION";private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {}else if (DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG.equals(action)) {mQSPanel.showDeviceMonitoringDialog();
+            }else if (OP_NAVIGATION.equals(action)) {+                if(intent.hasExtra("show_navigation_bar")){+                    boolean show = intent.getBooleanExtra("show_navigation_bar", true);
+                    Log.e("StatusBar", "OP_NAVIGATION: " + show);
+                     NavigationBarView mNavigationBarView = mNavigationBarController.getDefaultNavigationBarView();
+
+                    if (show) {+                        if (mNavigationBarView != null) return;
+
+                        createNavigationBar(result);
+                        SharedConfig.getInstance(mContext).writeData(SharedConfig.KEY_NAVIGATION_BAR, true);
+                    }else{+                        if (mNavigationBarView == null) return;
+
+                        mNavigationBarController.removeNavigationBarView();
+                        //mNavigationBarView = null;
+                        SharedConfig.getInstance(mContext).writeData(SharedConfig.KEY_NAVIGATION_BAR, false);
+                    }
+                }else{+                    Log.w("StatusBar","didn't contain navigation_bar_show key");
+                }
+            }

三、动态控制 StatusBar(显示/隐藏/禁止下拉)
显示/隐藏

vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java

@@ -802,6 +805,14 @@ public class StatusBar extends SystemUI implements DemoMode,mStatusBarWindow.setService(this);mStatusBarWindow.setOnTouchListener(getStatusBarWindowTouchListener());+        //add ,whether to show status bar[S]
+        boolean showStatusBar = SharedConfig.getInstance(mContext).readBoolean(SharedConfig.KEY_PANEL_GONE, true);
+        Log.v(TAG, "makeStatusBarView showStatusBar=" + showStatusBar);
+        if(mStatusBarWindow!=null)
+            mStatusBarWindow.setVisibility(showStatusBar ? View.VISIBLE : View.GONE);
+        //add ,whether to show status bar[E]
+
++        filter.addAction(OP_PANELBAR);
+        filter.addAction(OP_STATUSBAR);context.registerReceiverAsUser(mBroadcastReceiver, UserHandle.ALL, filter, null, null);IntentFilter demoFilter = new IntentFilter();+    private static final String OP_PANELBAR = "cc.intent.systemui.OPEN_PANEL_ENABLED";
+    private static final String OP_STATUSBAR = "cc.intent.systemui.WHETHER_SHOW_STATUSBAR";private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {@Overridepublic void onReceive(Context context, Intent intent) {else if (DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG.equals(action)) {mQSPanel.showDeviceMonitoringDialog();
+            }else if (OP_PANELBAR.equals(action)) {+                if(intent.hasExtra("open_panel_enabled")){+                    boolean result = intent.getBooleanExtra("open_panel_enabled",true);
+                    SharedConfig.getInstance(mContext).writeData(SharedConfig.KEY_PANEL_BAR, result);
+                    Log.e("StatusBar", "OP_PANELBAR: " + result);
+                }else{+                    Log.w("StatusBar","didn't contain open_panel_enabled key");
+                }
+            }else if (OP_STATUSBAR.equals(action)) {+                if(intent.hasExtra("show_status_bar")){+                    boolean result = intent.getBooleanExtra("show_status_bar",true);
+                    SharedConfig.getInstance(mContext).writeData(SharedConfig.KEY_PANEL_GONE, result);
+                    if(mStatusBarWindow!=null){+                       mStatusBarWindow.setVisibility(result ? View.VISIBLE : View.GONE);
+                    }
+                    Log.e("StatusBar", "OP_STATUSBAR: " + result);
+                }else{+                    Log.w("StatusBar","didn't contain show_status_bar key");
+                }
+            }

禁止下拉

vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java

@@ -230,7 +230,10 @@ public class PhoneStatusBarView extends PanelBar {}}-        return barConsumedEvent || super.onTouchEvent(event);
+        // modify
+        // return barConsumedEvent || super.onTouchEvent(event);
+        boolean isEnable = SharedConfig.getInstance(mContext).readBoolean(SharedConfig.KEY_PANEL_BAR, true);
+        return isEnable ? barConsumedEvent || super.onTouchEvent(event) : isEnable;}

电商直播系统开发Android10.0 导航栏和状态栏动态控制合集相关推荐

  1. 直播程序源码Android10.0 导航栏和状态栏动态控制合集

    文件清单 add vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone ...

  2. 从行业发展趋势入手,看电商直播系统未来发展重点

    根据艾瑞咨询发布的<2021年中国创新直播探索案例报告>显示,电商直播营销的重要性正在逐渐凸显,直播营销正成为品牌广告主最愿增加线上媒体的预算模块,促使了电商直播系统-这一独特平台的诞生. ...

  3. 电商直播平台开发一般包含哪几种模式?

    所谓的"直播带货",实际上是通过直播平台,亦或是短视频平台,实现对在线商城的引流,从而快速获客手段.但是随着这种模式的不断发展,便逐渐催生出了一种新的电商应用系统,即直播带货系统. ...

  4. 电商直播系统_电商直播源码中购物车功能实现

    有一次淘宝搞活动,有姐妹跟我吐槽,说她在购物车一键下单商品,被淘宝提示最多只能一次下单50个商品,导致一些商品没有抢到--在电商直播系统中,购物车功能是非常常见且重要的基础功能,它负责暂时存放用户感兴 ...

  5. 直播开篇——电商直播系统源码直播场景和技术分析

    一.直播场景和技术分析 好吧,既然你们非要搞什么直播,我就开始写写直播吧,怪不得WebRTC是下一代关键技术,直播的一些业务页必须要用WebRTC来实现 1. 电商直播系统源码场景分析 秀场直播 这个 ...

  6. 支付退款流程设计_电商之下:电商订单系统,从0到1设计思路

    一个订单系统的设计并不简单,它需要一批又一批的人去维护.去优化,根据公司的业务情况做出改变与兼容.这篇文章主要与大家分析一下电商订单系统该如何设计. 在一个电商所有模块中,订单系统作为最为核心的模块, ...

  7. 无货源亚马逊跨境电商erp系统开发_独立源码_采集铺货

    一.什么是亚马逊跨境电商erp系统? 亚马逊无货源跨境电商ERP系统为卖家提供的电子商务解决方案,帮助管理在亚马逊跨境电商平台上的业务操作.欢迎探讨 二.功能框架 多语言切换 出海跨境 无货源 商品上 ...

  8. 电商o2o系统开发原理和解决方案你get了吗?

    如今的创业大潮中,O2O是最具有代表性的.在一些企业看来,甚至到了得O2O者生,失O2O者死的地步,这一点也不夸张.对于试图转型的传统企业更是如此,生怕不追紧O2O,下一步就被新兴气压灰飞烟灭上.杞人 ...

  9. 电商订单系统:从0到1设计思路

    概述 本文主要讲述了在传统电商企业中,订单系统应承载的角色,就订单系统所包含的主要功能模块梳理了设计思路,并对订单系统未来的发展做了一些思考. 1. 订单系统在企业中的角色 在搭建企业订单系统之前,需 ...

最新文章

  1. 魔法科技迈吉客未来起飞路径猜想
  2. EBGAN, LSGAN, BEGAN
  3. 2021 AAAS Fellow名单出炉!图灵奖得主Yan LeCun、联想芮勇等多位人士入选
  4. 南海有macbook吗?
  5. ubuntu15.10避免图形界面无法登录的jdk配置
  6. Python编程基础:第四十节 类变量Class Variables
  7. 【机器学习算法-python实现】矩阵去噪以及归一化
  8. C语言和C+的区别是什么?8个点通俗易懂的告诉你
  9. Sqlite中文排序
  10. python学习笔记9:面向对象编程,类
  11. hdu3068 求一个字符串中最长回文字符串的长度 Manacher算法
  12. 怎么在wps里做计算机,解决方案:如何在wps中制作电子小报
  13. 科密指纹考勤机软件配置
  14. phpdesigner 的配置
  15. Snipaste下载以及一部分使用的快捷方式
  16. PostgreSQL教程
  17. [转][酷酷的滕]我爱你语录
  18. SQL UCASE() 函数
  19. 用LoopBack接口配置EBGP邻居
  20. 每周分享第 47 期

热门文章

  1. 【英语-基础词根词缀】
  2. 城中村水费一吨5元,电费一度1.5元,很贵,而我只能选择城中村
  3. 使用Typora工具绘制流程图
  4. Dolphin Scheduler 2.x版本部署篇
  5. 微信小程序入门踩坑记(妥妥的干货,新手快快看过来)
  6. 服务端渲染VUE_SSR
  7. 【无人机】【2017.06】无人机应用于风力涡轮转子叶片超声无损检测的可行性研究
  8. AO是什么?GO是什么?深度解析JS预编译遇见AO和GO
  9. vue: Invalid prop: type check failed for prop “action“. Expected String with valu
  10. 生产制造业订单管理软件如何做好订单变更管理?