[RK3288][Android6.0] 除錯筆記 --- 動態顯示和隱藏導航欄(廣播方式)
Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
此文實現以廣播的形式動態顯示和隱藏導航欄,這樣不僅避免了系統通過了自帶只針對Activity顯示和隱藏的不便(比如一個app有N多個Activity),而且可以在任何地方去動態修改。
改動:
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 7 c73b83..7da188d 100755
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -204,6 +204,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
DragDownHelper.DragDownCallback , ActivityStarter, OnUnlockMethodChangedListener,
HeadsUpManager.OnHeadsUpChangedListener {
static final String TAG = "PhoneStatusBar";
+ /*Kris, 170726, hide/show NavigationBar dynamicly. {*/
+ static final String HIDE_NAVIGATION_BAR = "android.intent.action.HIDE_NAVIGATION_BAR";
+ static final String SHOW_NAVIGATION_BAR = "android.intent.action.SHOW_NAVIGATION_BAR";
+ /*Kris, 170726, hide/show NavigationBar dynamicly. }*/
public static final boolean DEBUG = BaseStatusBar.DEBUG;
public static final boolean SPEW = false;
public static final boolean DUMPTRUCK = true; // extra dumpsys info
@@ -1069,6 +1073,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
demoFilter.addAction(ACTION_FAKE_ARTWORK);
}
demoFilter.addAction(ACTION_DEMO);
+ /*Kris, 170726, hide/show NavigationBar dynamicly. {*/
+ demoFilter.addAction(HIDE_NAVIGATION_BAR);
+ demoFilter.addAction(SHOW_NAVIGATION_BAR);
+ /*Kris, 170726, hide/show NavigationBar dynamicly. }*/
context.registerReceiverAsUser(mDemoReceiver, UserHandle.ALL, demoFilter,
android.Manifest.permission.DUMP, null);
@@ -1304,9 +1312,48 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
mWindowManager.addView(mNavigationBarView, getNavigationBarLayoutParams());
}
+ /*Kris, 170726, hide/show NavigationBar dynamicly. {*/
+ private void addNavigationBarInnerLocked(){
+ if(mNavigationBarView == null){
+ mNavigationBarView = (NavigationBarView) View.inflate(mContext, R.layout.navigation_bar, null);
+ mNavigationBarView.setDisabledFlags(mDisabled1);
+ mNavigationBarView.setBar(this);
+ mNavigationBarView.setOnTouchListener(new View.OnTouchListener() {
+ @Override
+ public boolean onTouch(View v, MotionEvent event) {
+ checkUserAutohide(v, event);
+ return false;
+ }
+ });
+ if (mNavigationBarView == null)
+ return;
+ prepareNavigationBarView();
+ try {
+ mWindowManager.addView(mNavigationBarView, getNavigationBarLayoutParams());
+ } catch (Exception e) {
+ }
+ }
+ }
+
+ private void removeNavigationBar() {
+ if (mNavigationBarView == null)
+ return;
+ mWindowManager.removeView(mNavigationBarView);
+ mNavigationBarView = null;
+ }
+
+ public void displayNavigation(){
+ addNavigationBarInnerLocked();
+ }
+ public void hideNavigation(){
+ removeNavigationBar();
+ }
+ /*Kris, 170726, hide/show NavigationBar dynamicly. }*/
+
private void repositionNavigationBar() {
if (mNavigationBarView == null || !mNavigationBarView.isAttachedToWindow()) return;
+
prepareNavigationBarView();
mWindowManager.updateViewLayout(mNavigationBarView, getNavigationBarLayoutParams());
@@ -3117,7 +3164,13 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
if (DEBUG_MEDIA_FAKE_ARTWORK) {
updateMediaMetaData(true);
}
- }
+ /*Kris, 170726, hide/show NavigationBar dynamicly. {*/
+ } else if(HIDE_NAVIGATION_BAR.equals(action)){
+ hideNavigation();
+ }else if(SHOW_NAVIGATION_BAR.equals(action)){
+ displayNavigation();
+ }
+ /*Kris, 170726, hide/show NavigationBar dynamicly. }*/
}
};
測試:
隱藏:
[email protected]:/ # am broadcast -a android.intent.action.HIDE_NAVIGATION_BAR
Broadcasting: Intent { act=android.intent.action.HIDE_NAVIGATION_BAR }
Broadcast completed: result=0
顯示:
[email protected]:/ # am broadcast -a android.intent.action.SHOW_NAVIGATION_BAR
Broadcasting: Intent { act=android.intent.action.SHOW_NAVIGATION_BAR }
Broadcast completed: result=0
相關推薦
[RK3288][Android6.0] 除錯筆記 --- 動態顯示和隱藏導航欄(廣播方式)
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 此文實現以廣播的形式動態顯示和隱藏導航欄,這樣不僅避免了系統通過了自帶只針對Activity顯示和隱藏的不便(比如一個app有N多個Activity)
[RK3288][Android6.0] 除錯筆記 --- 螢幕顯示旋轉方法
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 顯示模組提供了一個property供修改旋轉方向,名為”ro.sf.hwrotation”,有四個值可選 Surface.java /** *
[RK3288][Android6.0] 除錯筆記 --- eMMC分割槽號和名字的對應
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 有時候需要知道mmcblk對應的分割槽是哪一個,其實驅動已經完成這個功能了,如下: [email protected]:/dev/blo
[RK3288][Android6.0] 除錯筆記 --- 遮蔽系統下拉選單顯示
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 [email protected]:~/rk3288/frameworks/base/
[RK3288][Android6.0] 除錯筆記 --- 移除uboot和kernel開機logo
Platform: RockchipOS: Android 6.0Kernel: 3.10.92diff --git a/arch/arm/boot/dts/rk3288-b.dts b/arch/arm/boot/dts/rk3288-b.dtsindex ad3bc1a.
[RK3288][Android6.0] 除錯筆記 --- 電池電量一直顯示100%
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 跟蹤發現Android6.0相比之前的Android4.4會判斷Charger是否存在,不
[RK3288][Android6.0] 除錯筆記 --- user版本預設顯示開發者選項
Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 預設user版本不顯示開發者選項這一欄,需要通過連續點選版本號7次來顯示.packages\apps\Settings\src\com\android\settings\D
[RK3288][Android6.0] 除錯筆記 --- 螢幕畫面顯示不完整問題
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 今天看到網友發的圖片,想起了之前除錯的一塊屏顯示畫面也不完整,類似下圖 後來驗證是導航欄(Navigation Bar)顯示異常引起的,禁止此項功能
[RK3288][Android6.0] 除錯筆記 --- date命令無法修改日期和時間
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 現象: 移植好RTC驅動後之後,發現無法用date命令去設定日期。 用的命令是 #date -s "0627154217" //mmddhhmmy
[RK3288][Android6.0] 除錯筆記 --- 普通串列埠的新增
Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 uart0,1,3,4 (普通串列埠) 用的是同一個串列埠驅動. uart2(除錯串列埠)的驅動程式碼嵌在fiq debugger的code中. 相關的配置在rk3288.dtsi中:
[RK3288][Android6.0] 除錯筆記 --- hwclock命令無法使用
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 現象: 使用hwclock,提示找不到檔案 [email protected]:/ # hwclock
[RK3288][Android6.0] 除錯筆記 --- I2C通訊失敗問題
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 使用rk3288的i2c5讀寫時,會出現以下error log: [email prot
[RK3288][Android6.0] 除錯筆記 --- 測試I2C裝置正常傳輸方法
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 rk在驅動層做了一個通用i2c測試程式碼提供給上層快速測試i2c外設是否傳輸正常. 測試使用方法
[RK3288][Android6.0] 除錯筆記 --- user版本串列埠只有輸出不能輸入
Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92現象: 編譯成user版本之後串列埠只有輸出沒有輸入.原因: 編譯user版本之後 ro.debug
[RK3288][Android6.0] 除錯筆記 --- 系統自帶預置第三方APK方法
Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 Rockchip預設提供了機制來預置第三方APK, 方法很簡單: 1. 在device/rockchip/rk3288建立preinstall目錄(如果
[RK3288][Android6.0] 除錯筆記 --- Audio驅動層判斷錄音資料是否異常
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 之前有提到上層可以通過dump pcm資料檢視波形來確定錄音取樣的資料是否正常,這裡給出驅動層檢視
[RK3288][Android6.0] 除錯筆記 --- 除錯串列埠的更換
Platform: ROCKCHIP OS: Android 6.0 Kernel: 3.10.92 假設專案有需求要將除錯串列埠uart2 改成 uart1, 改動如下 (還未驗證,先分享給大家,
[RK3288][Android6.0] 除錯筆記 --- pmu(rk818)暫存器讀寫
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 rk的pmu模組只提供了每次單個暫存器的讀寫,驅動提供了這個節點供使用:/sys/rk818/rk818_test 舉例: 讀取: echo r
[RK3288][Android6.0] 除錯筆記 --- ro.serialno的獲取
Platform: RK3288 OS: Android 6.0 Kernel: 3.10.92 rk3288平臺的serial number是由drmservice寫進去的,drmservice在rc檔案中定義啟動: init.rk30board.
[RK3288][Android6.0] 除錯筆記 --- eMMC壞塊測試
Platform: Rockchip OS: Android 6.0 Kernel: 3.10.92 網上搜到一個叫eMMC Brickbug Check的apk 啟動后里面的Check Memory一項提示要root,但是系統已經是root過的了,