1. 添加对应的字段

./vendor/mediatek/proprietary/frameworks/base/settingsprovider/java/com/mediatek/provider/MtkSettingsExt.java

public static final String DATA_SERVICE_ENABLED = "data_service_enabled";
-
+        
+        /**
+        * control Whether to hide or display navigation bar
+        *
+        *
+        * @hide
+        */
+        public static final String CONTROL_NAVIGATIONBAR_HIDE_MODE = "control_navigationbar_hide_mode";
+        
+       /**
+        * Whether to hide or display navigation bar
+        *
+        *
+        * @hide
+        */
+        public static final String NAVIGATIONBAR_HIDE_MODE = "navigationbar_hide_mode";
         // At one time in Global, then in Secure

2. 完成相关数据的初始化:

./vendor/mediatek/proprietary/packages/apps/SettingsProvider/src/com/mediatek/providers/utils/ProvidersUtils.java

res/values/defaults.xml                                | 3 +++
 res/values/mtk_defaults.xml                            | 2 ++
 src/com/android/providers/settings/DatabaseHelper.java | 2 ++
 src/com/mediatek/providers/utils/ProvidersUtils.java   | 6 ++++++
 4 files changed, 13 insertions(+)

diff --git a/res/values/defaults.xml b/res/values/defaults.xml
index 68c210d..127ca42 100644
--- a/res/values/defaults.xml
+++ b/res/values/defaults.xml
@@ -217,4 +217,7 @@
 
     <!-- Default for Settings.System.VIBRATE_WHEN_RINGING -->
     <bool name="def_vibrate_when_ringing">false</bool>
+
+    <!-- default setting for Settings.Global.POLICY_CONTROL-->
+    <string name="def_policy_control">null</string>
 </resources>
diff --git a/res/values/mtk_defaults.xml b/res/values/mtk_defaults.xml
index 0e1d710..cb63a7e 100644
--- a/res/values/mtk_defaults.xml
+++ b/res/values/mtk_defaults.xml
@@ -19,4 +19,6 @@
     <integer name="def_show_fisrtcrash_dlg">1</integer>
     <!-- M: ALPS04121437 Default for Settings.Global.PRIVATE_DNS_DEFAULT_MODE -->
     <string name="def_private_dns_default_mode">off</string>
+    <integer name="control_navigationbar_hide_mode">1</integer>
+    <integer name="navigationbar_hide_mode">0</integer>
 </resources>
diff --git a/src/com/android/providers/settings/DatabaseHelper.java b/src/com/android/providers/settings/DatabaseHelper.java
index 491150d..bec91ce 100644
--- a/src/com/android/providers/settings/DatabaseHelper.java
+++ b/src/com/android/providers/settings/DatabaseHelper.java
@@ -2610,6 +2610,8 @@ class DatabaseHelper extends SQLiteOpenHelper {
                     R.string.def_car_undock_sound);
             loadStringSetting(stmt, Settings.Global.CHARGING_STARTED_SOUND,
                     R.string.def_wireless_charging_started_sound);
+            loadStringSetting(stmt, Settings.Global.POLICY_CONTROL,
+                    R.string.def_policy_control);
 
             loadIntegerSetting(stmt, Settings.Global.DOCK_AUDIO_MEDIA_ENABLED,
                     R.integer.def_dock_audio_media_enabled);
diff --git a/src/com/mediatek/providers/utils/ProvidersUtils.java b/src/com/mediatek/providers/utils/ProvidersUtils.java
index a2f3a7c..c770d0b 100644
--- a/src/com/mediatek/providers/utils/ProvidersUtils.java
+++ b/src/com/mediatek/providers/utils/ProvidersUtils.java
@@ -50,6 +50,12 @@ public class ProvidersUtils {
                 MtkSettingsExt.Global.TELEPHONY_MISC_FEATURE_CONFIG,
                 getIntegerValue(MtkSettingsExt.Global.TELEPHONY_MISC_FEATURE_CONFIG,
                         R.integer.def_telephony_misc_feature_config));
+        loadSetting(stmt, MtkSettingsExt.Global.CONTROL_NAVIGATIONBAR_HIDE_MODE,
+                getIntegerValue(MtkSettingsExt.Global.CONTROL_NAVIGATIONBAR_HIDE_MODE,
+                R.integer.control_navigationbar_hide_mode));
+        loadSetting(stmt, MtkSettingsExt.Global.NAVIGATIONBAR_HIDE_MODE,
+                getIntegerValue(MtkSettingsExt.Global.NAVIGATIONBAR_HIDE_MODE,
+                R.integer.navigationbar_hide_mode));
         loadBooleanSetting(stmt, MtkSettingsExt.Global.AUTO_TIME_GPS, R.bool.def_auto_time_gps);

3. 系统UI 的控制

diff --git a/src/com/android/systemui/statusbar/phone/StatusBar.java b/src/com/android/systemui/statusbar/phone/StatusBar.java
index 6331910..00e0424 100644
--- a/src/com/android/systemui/statusbar/phone/StatusBar.java
+++ b/src/com/android/systemui/statusbar/phone/StatusBar.java
@@ -261,6 +261,8 @@ import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
 
+import static com.mediatek.provider.MtkSettingsExt.Global.NAVIGATIONBAR_HIDE_MODE;
+import static com.mediatek.provider.MtkSettingsExt.Global.CONTROL_NAVIGATIONBAR_HIDE_MODE;
 public class StatusBar extends SystemUI implements DemoMode,
         DragDownHelper.DragDownCallback, ActivityStarter, OnUnlockMethodChangedListener,
         OnHeadsUpChangedListener, CommandQueue.Callbacks, ZenModeController.Callback,
@@ -315,7 +317,7 @@ public class StatusBar extends SystemUI implements DemoMode,
 
     private static final int STATUS_OR_NAV_TRANSIENT =
             View.STATUS_BAR_TRANSIENT | View.NAVIGATION_BAR_TRANSIENT;
-    private static final long AUTOHIDE_TIMEOUT_MS = 2250;
+    private static final long AUTOHIDE_TIMEOUT_MS = 10000;
 
     /**
      * The delay to reset the hint text when the hint animation is finished running.
@@ -349,6 +351,13 @@ public class StatusBar extends SystemUI implements DemoMode,
     private OpSystemUICustomizationFactoryBase mSystemUIFactoryBase = null;
     ///@}
 
+    public static final String HIDE_NAVIGATION_BAR = "android.intent.action.HIDE_NAVIGATION_BAR";
+    public static final String SHOW_NAVIGATION_BAR = "android.intent.action.SHOW_NAVIGATION_BAR";
+    private final String NAVIGATIONBAR_HIDE_KEY = NAVIGATIONBAR_HIDE_MODE;
+    private final String CONTROL_NAVIGATIONBAR_HIDE_KEY = CONTROL_NAVIGATIONBAR_HIDE_MODE;
+    public static final String CLOSE_NAVIGATION_BAR= "android.intent.action.CLOSE_NAVIGATION_BAR";
+    public static final String OPEN_NAVIGATION_BAR= "android.intent.action.OPEN_NAVIGATION_BAR";
+    
     static {
         boolean onlyCoreApps;
         try {
@@ -466,6 +475,7 @@ public class StatusBar extends SystemUI implements DemoMode,
     private ScreenPinningRequest mScreenPinningRequest;
 
     private final MetricsLogger mMetricsLogger = Dependency.get(MetricsLogger.class);
+    private final String AUTO_HIDE_NAV = "immersive.full=*";
 
     // ensure quick settings is disabled until the current user makes it through the setup wizard
     @VisibleForTesting
@@ -801,6 +811,13 @@ public class StatusBar extends SystemUI implements DemoMode,
         Dependency.get(ActivityStarterDelegate.class).setActivityStarterImpl(this);
 
         Dependency.get(ConfigurationController.class).addCallback(this);
+        
+        int controlnavigationMode = Settings.Secure.getInt(mContext.getContentResolver(),
+                CONTROL_NAVIGATIONBAR_HIDE_KEY, 0);
+        if (controlnavigationMode != 1) {
+            //mHandler.postDelayed(() ->
+               // hideStatusbar(), 1000);
+        }
     }
 
     // ================================================================================
@@ -902,6 +919,20 @@ public class StatusBar extends SystemUI implements DemoMode,
         } catch (RemoteException ex) {
             // no window manager? good luck with that
         }
+        
+        int controlnavigationMode = Settings.Secure.getInt(mContext.getContentResolver(),
+                CONTROL_NAVIGATIONBAR_HIDE_KEY, 0);
+
+        if (controlnavigationMode != 1) {
+            hideNavigationbar();
+        } else {
+        int navigationMode = Settings.Secure.getInt(mContext.getContentResolver(),
+                NAVIGATIONBAR_HIDE_KEY, 0);
+            if (navigationMode != 1) {
+            displayNavigationbar();
+        }
+        }
+        
         mScreenPinningNotify = new ScreenPinningNotify(mContext);
         mStackScroller.setLongPressListener(mEntryManager.getNotificationLongClicker());
         mStackScroller.setStatusBar(this);
@@ -1083,7 +1114,15 @@ public class StatusBar extends SystemUI implements DemoMode,
         demoFilter.addAction(ACTION_DEMO);
         context.registerReceiverAsUser(mDemoReceiver, UserHandle.ALL, demoFilter,
                 android.Manifest.permission.DUMP, null);
-
+        
+        IntentFilter controlnavBarFilter = new IntentFilter();
+        controlnavBarFilter.addAction(OPEN_NAVIGATION_BAR);
+        controlnavBarFilter.addAction(CLOSE_NAVIGATION_BAR);
+        context.registerReceiverAsUser(mConNavBarReceiver, UserHandle.ALL, controlnavBarFilter, null, null);
+        IntentFilter navigationBarFilter = new IntentFilter();
+        navigationBarFilter.addAction(SHOW_NAVIGATION_BAR);
+        navigationBarFilter.addAction(HIDE_NAVIGATION_BAR);
+        context.registerReceiverAsUser(mNavigationBarReceiver, UserHandle.ALL, navigationBarFilter, null, null);
         // listen for USER_SETUP_COMPLETE setting (per-user)
         mDeviceProvisionedController.addCallback(mUserSetupObserver);
         mUserSetupObserver.onUserSetupChanged();
@@ -1370,6 +1409,12 @@ public class StatusBar extends SystemUI implements DemoMode,
     }
 
     public int getStatusBarHeight() {
+        int controlnavigationMode = Settings.Secure.getInt(mContext.getContentResolver(),
+                CONTROL_NAVIGATIONBAR_HIDE_KEY, 0);
+        if (controlnavigationMode != 1)
+            mNaturalBarHeight = 0;
+        else
+            mNaturalBarHeight =-1;
         if (mNaturalBarHeight < 0) {
             final Resources res = mContext.getResources();
             mNaturalBarHeight =
@@ -2498,6 +2543,22 @@ public class StatusBar extends SystemUI implements DemoMode,
                 setInteracting(StatusBarManager.WINDOW_STATUS_BAR, true);
             }
         }
+        
+        int controlnavigationMode = Settings.Secure.getInt(mContext.getContentResolver(),
+                CONTROL_NAVIGATIONBAR_HIDE_KEY, 1);
+
+        if (controlnavigationMode == 1) {
+            int navigationMode = Settings.Secure.getInt(mContext.getContentResolver(),
+                NAVIGATIONBAR_HIDE_KEY, 0);
+            if (navigationMode != 1) {
+                displayNavigationbar();
+            } else {
+                displayNavigationbar();
+                mHandler.postDelayed(() ->
+                hideNavigationbar(), 10000);
+            }
+        }
+
         return false;
     }
 
@@ -3089,6 +3150,30 @@ public class StatusBar extends SystemUI implements DemoMode,
         }, cancelAction, afterKeyguardGone);
     }
 
+    private BroadcastReceiver mConNavBarReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (DEBUG) Log.v(TAG, "mConNavBarReceiver: " + intent);
+            String action = intent.getAction();
+            if (action.equals(OPEN_NAVIGATION_BAR)) {
+                displayNavigationbar();
+            } else if (action.equals(CLOSE_NAVIGATION_BAR)) {
+                hideNavigationbar();
+            }
+        }
+    };
+    private BroadcastReceiver mNavigationBarReceiver = new BroadcastReceiver() {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            if (DEBUG) Log.v(TAG, "mNavigationBarReceiver: " + intent);
+            String action = intent.getAction();
+            if (action.equals(SHOW_NAVIGATION_BAR)) {
+                setNavbarautodisplay();
+            } else if (action.equals(HIDE_NAVIGATION_BAR)) {
+                setNavbarautohide();
+            }
+        }
+    };
     private final BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
         @Override
         public void onReceive(Context context, Intent intent) {
@@ -5736,7 +5821,36 @@ public class StatusBar extends SystemUI implements DemoMode,
         }
     }
     /// M: Support "Operator plugin - Customize Carrier Label for PLMN". @}
+    
+    public void displayNavigationbar() {
+        if (mNavigationBarView == null) {
+            mNavigationBarView = NavigationBarFragment.create(mContext, (tag, fragment) -> {
+                mNavigationBar = (NavigationBarFragment) fragment;
+                if (mLightBarController != null) {
+                    mNavigationBar.setLightBarController(mLightBarController);
+                }
+                mNavigationBar.setCurrentSysuiVisibility(mSystemUiVisibility);
+            });
 
+        }
+    }
+
+    public void hideNavigationbar() {
+        if (mNavigationBarView != null) {
+            mWindowManager.removeViewImmediate(mNavigationBarView);
+            mNavigationBarView = null;
+        }
+    }
+    public void setNavbarautodisplay() {
+        mNavigationBar.setCurrentSysuiVisibility(mSystemUiVisibility);
+    }
+
+    public void setNavbarautohide() {
+        mHandler.postDelayed(() ->
+                Settings.Global.putString(mContext.getContentResolver(),
+                Settings.Global.POLICY_CONTROL,AUTO_HIDE_NAV), 10000);
+
+    }
     // M: Add for MTK FaceUnlock to get FaceUnlockController to use.
     public FaceUnlockController getFaceUnlockController() {
         return mFaceUnlockController;

4  设置菜单添加

a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -1063,6 +1063,8 @@
     <string name="search_settings" msgid="1910951467596035063">"搜索"</string>
     <string name="display_settings" msgid="7965901687241669598">"显示"</string>
     <string name="accelerometer_title" msgid="7854608399547349157">"自动旋转屏幕"</string>
+    <string name="control_hide_navigatorbar_title" msgid="9834608399547349257">"导航栏"</string>
+    <string name="hide_navigatorbar_title" msgid="9834608399547349257">"自动隐藏导航栏"</string>
     <string name="color_mode_title" msgid="9186249332902370471">"颜色"</string>
     <string name="color_mode_option_natural" msgid="5013837483986772758">"自然色"</string>
     <string name="color_mode_option_boosted" msgid="8588223970257287524">"效果增强"</string>
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 1e6aad4..def3ea6 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -2487,6 +2487,8 @@
     <string name="display_settings">Display</string>
     <!-- Sound & display settings screen, accelerometer-based rotation check box label -->
     <string name="accelerometer_title">Auto-rotate screen</string>
+    <string name="control_hide_navigatorbar_title">Navigator bar</string>
+    <string name="hide_navigatorbar_title">Auto Hide navigator bar</string>
     <!-- Display settings screen, Color mode settings title [CHAR LIMIT=30] -->
     <string name="color_mode_title">Colors</string>
     <!-- Display settings screen, Color mode option for "natural(sRGB) color"  [CHAR LIMIT=45] -->
diff --git a/res/xml/display_settings.xml b/res/xml/display_settings.xml
index df3169d..a1e837e 100644
--- a/res/xml/display_settings.xml
+++ b/res/xml/display_settings.xml
@@ -78,6 +78,14 @@
         android:title="@string/accelerometer_title"
         settings:keywords="@string/keywords_auto_rotate"
         settings:controller="com.android.settings.display.AutoRotatePreferenceController"/>
+    
+    <SwitchPreference
+        android:key="control_hide_navigatorbar"
+        android:title="@string/control_hide_navigatorbar_title" />   
+        
+    <SwitchPreference
+        android:key="hide_navigatorbar"
+        android:title="@string/hide_navigatorbar_title" />
 
     <Preference
         android:key="color_mode"
diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java
index 42bfc6f..fdfab15 100644
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -47,6 +47,9 @@ import com.mediatek.settings.display.MiraVisionPreferenceController;
 import java.util.ArrayList;
 import java.util.List;
 
+import com.android.settings.display.HideNavigatorBarPreferenceController;
+import com.android.settings.display.ControlHideNavigatorBarPreferenceController;
+
 public class DisplaySettings extends DashboardFragment {
     private static final String TAG = "DisplaySettings";
 
@@ -111,6 +114,9 @@ public class DisplaySettings extends DashboardFragment {
         /// M: add for HDMI settings @{
         controllers.add(new HdmiPreferenceController(context));
         /// @}
+        //for NavigatorBar 
+        controllers.add(new ControlHideNavigatorBarPreferenceController(context));        
+        controllers.add(new HideNavigatorBarPreferenceController(context));

动态隐藏和显示导航栏 (MTK)相关推荐

  1. android应用去掉状态栏_Android 显示、隐藏状态栏和导航栏

    Android 显示.隐藏状态栏和导航栏 控制状态栏显示,Activity的主题中配置全屏属性 true 控制状态栏显示,在setContentView之前设置全屏的flag getWindow(). ...

  2. Android 显示、隐藏状态栏和导航栏

    Android 显示.隐藏状态栏和导航栏 控制状态栏显示,Activity的主题中配置全屏属性 <item name="android:windowFullscreen"&g ...

  3. iOS - 隐藏/显示导航栏

    隐藏导航栏 [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarM ...

  4. ios 上滑隐藏导航下拉显示导航栏实现

    为了最大限度的利用手机屏幕,出现了上滑隐藏导航下拉显示导航栏. 先看看效果(代码:http://download.csdn.net/detail/gx_wqm/9771247), 把代码跑一下看一下是 ...

  5. 【干货】Android系统定制基础篇:第十三部分(开放root权限、禁止应用旋转、隐藏状态栏和导航栏)

    一.Android开放root权限 Android 5.1 1.修改 su 源码(system\extras\su\su.c),注释下面代码: int main(int argc, char **ar ...

  6. Android系统:如何开启或隐藏Navigation Bar导航 栏

    如何开启或隐藏Navigation Bar导航栏? 如下图红色框标注的区域,就是Navigation Bar区域,它提供三个快捷方式图标,从 左到右分别是Back/Home/Recent . 第一步: ...

  7. Android-x86-6.0定制之路 - 动态显示、隐藏状态栏和导航栏(广播方式)

    需求确立 描述 当 App 进入 kiosk 模式,要求隐藏底部虚拟键.禁止下拉出现状态栏,这样保证我们的 App 一直处于系统前台运行. 1. 通过getWindow().getDecorView( ...

  8. Android隐藏状态栏、导航栏

    Android隐藏状态栏.导航栏 [java] view plaincopy private void hideStatusNavigationBar(){ if(Build.VERSION.SDK_ ...

  9. Android 4.2虚拟按键背景透明,Android 4.0 隐藏虚拟按键(导航栏)的方法

    在Android4.0里,多了一些API,其中包括怎样隐藏虚拟按键(导航栏),这样编写游戏或一个视频播放器时,可以设置隐藏虚拟按键的参数,达到最佳效果,当然前提是使用的手机是有虚拟按键的,例如gala ...

  10. EasyUI的datagrid分页,动态隐藏或显示列

    EasyUI的datagrid分页,动态隐藏或显示列 业务需要,根据不用的查询条件,显示不同的列名 1 $("#chnMode").change(function(){ 2 if( ...

最新文章

  1. MyEclipse中删除对Struts、hibernate、spring的支持
  2. 从gitee 下载代码到本地
  3. Junit实现接口类测试
  4. JavaScript中判断为整数的多种方式
  5. 怎么一键备份服务器系统还原,电脑怎么一键还原
  6. python递归函数详解-讲解Python中的递归函数
  7. Spark成为大数据高手进阶步骤
  8. Opencv之斑点(Blob)检测--SimpleBlobDetector_create
  9. Linux C编程与Shell编程在开发实用工具方面的相同点总结
  10. python中单词个数_python 统计单词个数
  11. 使用PR剪辑视频,mkv格式怎么无损转mp4
  12. JSP 创建 CRUD 示例 MyBatis DAO 用于数据库JSTL 用于遍历记录
  13. 二叉搜索树插入算法C#演示的代码
  14. ffmpeg java 实时视频流转码
  15. 关于怎么把Excel表格导入MySQL数据库中
  16. python选题背景_论文的选题背景及意义-样例
  17. 安装MySQL——压缩包安装
  18. 计算机系统基础实验——数据的机器级表示
  19. ThinkPHP5.0之PHPmailer发送邮箱(qq、163)
  20. 产生论文高重复率的原因及降重方法

热门文章

  1. oel 7.0 安装 mysql 5_MySQL 5.7.21 在 OEL6.9 平台上的二进制安装
  2. oracle 取现在的时间,Oracle 获取当前日期及日期格式
  3. 树莓派4B监控CPU占用率、内存使用率、磁盘使用量以及CPU温度
  4. (JZ1619)2018.07.08【2018提高组】模拟C组 0 .音乐节拍
  5. linux audit 服务,linux 的 audit 服務
  6. 使用Python读取Windows注册表
  7. 互联网保险投诉量翻倍 众安与安心财险上榜
  8. 代码编辑器 Sublime Text 系列——安装、插件和菜单中英文对照
  9. cute-cnblogs 自定义博客园样式美化二期来啦~
  10. 【uniapp】实现H5微信分享