电商直播系统开发Android10.0 导航栏和状态栏动态控制合集
文件清单
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 导航栏和状态栏动态控制合集相关推荐
- 直播程序源码Android10.0 导航栏和状态栏动态控制合集
文件清单 add vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone ...
- 从行业发展趋势入手,看电商直播系统未来发展重点
根据艾瑞咨询发布的<2021年中国创新直播探索案例报告>显示,电商直播营销的重要性正在逐渐凸显,直播营销正成为品牌广告主最愿增加线上媒体的预算模块,促使了电商直播系统-这一独特平台的诞生. ...
- 电商直播平台开发一般包含哪几种模式?
所谓的"直播带货",实际上是通过直播平台,亦或是短视频平台,实现对在线商城的引流,从而快速获客手段.但是随着这种模式的不断发展,便逐渐催生出了一种新的电商应用系统,即直播带货系统. ...
- 电商直播系统_电商直播源码中购物车功能实现
有一次淘宝搞活动,有姐妹跟我吐槽,说她在购物车一键下单商品,被淘宝提示最多只能一次下单50个商品,导致一些商品没有抢到--在电商直播系统中,购物车功能是非常常见且重要的基础功能,它负责暂时存放用户感兴 ...
- 直播开篇——电商直播系统源码直播场景和技术分析
一.直播场景和技术分析 好吧,既然你们非要搞什么直播,我就开始写写直播吧,怪不得WebRTC是下一代关键技术,直播的一些业务页必须要用WebRTC来实现 1. 电商直播系统源码场景分析 秀场直播 这个 ...
- 支付退款流程设计_电商之下:电商订单系统,从0到1设计思路
一个订单系统的设计并不简单,它需要一批又一批的人去维护.去优化,根据公司的业务情况做出改变与兼容.这篇文章主要与大家分析一下电商订单系统该如何设计. 在一个电商所有模块中,订单系统作为最为核心的模块, ...
- 无货源亚马逊跨境电商erp系统开发_独立源码_采集铺货
一.什么是亚马逊跨境电商erp系统? 亚马逊无货源跨境电商ERP系统为卖家提供的电子商务解决方案,帮助管理在亚马逊跨境电商平台上的业务操作.欢迎探讨 二.功能框架 多语言切换 出海跨境 无货源 商品上 ...
- 电商o2o系统开发原理和解决方案你get了吗?
如今的创业大潮中,O2O是最具有代表性的.在一些企业看来,甚至到了得O2O者生,失O2O者死的地步,这一点也不夸张.对于试图转型的传统企业更是如此,生怕不追紧O2O,下一步就被新兴气压灰飞烟灭上.杞人 ...
- 电商订单系统:从0到1设计思路
概述 本文主要讲述了在传统电商企业中,订单系统应承载的角色,就订单系统所包含的主要功能模块梳理了设计思路,并对订单系统未来的发展做了一些思考. 1. 订单系统在企业中的角色 在搭建企业订单系统之前,需 ...
最新文章
- 魔法科技迈吉客未来起飞路径猜想
- EBGAN, LSGAN, BEGAN
- 2021 AAAS Fellow名单出炉!图灵奖得主Yan LeCun、联想芮勇等多位人士入选
- 南海有macbook吗?
- ubuntu15.10避免图形界面无法登录的jdk配置
- Python编程基础:第四十节 类变量Class Variables
- 【机器学习算法-python实现】矩阵去噪以及归一化
- C语言和C+的区别是什么?8个点通俗易懂的告诉你
- Sqlite中文排序
- python学习笔记9:面向对象编程,类
- hdu3068 求一个字符串中最长回文字符串的长度 Manacher算法
- 怎么在wps里做计算机,解决方案:如何在wps中制作电子小报
- 科密指纹考勤机软件配置
- phpdesigner 的配置
- Snipaste下载以及一部分使用的快捷方式
- PostgreSQL教程
- [转][酷酷的滕]我爱你语录
- SQL UCASE() 函数
- 用LoopBack接口配置EBGP邻居
- 每周分享第 47 期
热门文章
- 【英语-基础词根词缀】
- 城中村水费一吨5元,电费一度1.5元,很贵,而我只能选择城中村
- 使用Typora工具绘制流程图
- Dolphin Scheduler 2.x版本部署篇
- 微信小程序入门踩坑记(妥妥的干货,新手快快看过来)
- 服务端渲染VUE_SSR
- 【无人机】【2017.06】无人机应用于风力涡轮转子叶片超声无损检测的可行性研究
- AO是什么?GO是什么?深度解析JS预编译遇见AO和GO
- vue: Invalid prop: type check failed for prop “action“. Expected String with valu
- 生产制造业订单管理软件如何做好订单变更管理?