A40i Android7 支持隐藏导航栏

1. 隐藏状态栏以及导航栏

diff --git a/android/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/android/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 30613bc..7c42abc 100644
--- a/android/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/android/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -3434,6 +3434,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         mRemoteInputController = new RemoteInputController(mStatusBarWindowManager,
                 mHeadsUpManager);
         mStatusBarWindowManager.add(mStatusBarWindow, getStatusBarHeight());
+               mStatusBarView.setVisibility(View.GONE);
     }
 
     // called by makeStatusbar and also by PhoneStatusBarView

2. 在设置->显示栏中 增加 显示导航栏 开关

diff --git a/android/device/softwinner/a40-p1/overlay/packages/apps/Settings/res/xml/display_settings.xml b/android/device/softwinner/a40-p1/overlay/packages/apps/Settings/res/xml/display_settings.xml
index 80d03cc..ce5356e 100755
--- a/android/device/softwinner/a40-p1/overlay/packages/apps/Settings/res/xml/display_settings.xml
+++ b/android/device/softwinner/a40-p1/overlay/packages/apps/Settings/res/xml/display_settings.xml
@@ -116,6 +116,12 @@
                 android:summary="%s"
                 android:title="@string/display_vr_pref_title" />
 
+        <SwitchPreference
+                android:key="show_nav"
+                android:title="@string/whether_shownav"
+                android:summary="@string/whether_shownav" />
+
+
            <PreferenceCategory android:key="hdmi_setting"
                 android:title="@string/hdmi_setting">
 
@@ -136,33 +142,7 @@
                         android:key="hdmi_height_scale"
                         android:title="@string/hdmi_height_scale"
                         android:layout="@layout/preference_iconless_slider" />
-        </PreferenceCategory>
-
-        <PreferenceCategory android:key="smart_color_setting"
-                android:title="@string/smart_color">
-
-                <SwitchPreference
-                        android:key="smart_color"
-                        android:title="@string/smart_color"
-                        android:summary="@string/smart_color_summary" />
-
-                <SwitchPreference
-                        android:key="smart_color_demo"
-                        android:title="@string/brightness_demo"
-                        android:summary="@string/brightness_demo_summary" />
-        </PreferenceCategory>
-
-        <PreferenceCategory android:key="intelligent_backlight_setting"
-                android:title="@string/intelligent_backlight">
-
-                <SwitchPreference
-                        android:key="intelligent_backlight"
-                        android:title="@string/intelligent_backlight" />
 
-                <SwitchPreference
-                        android:key="intelligent_backlight_demo"
-                        android:title="@string/brightness_demo"
-                        android:summary="@string/brightness_demo_summary" />
         </PreferenceCategory>
 
 </PreferenceScreen>
diff --git a/android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml b/android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
index d010bc5..d8ec69c 100755
--- a/android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
+++ b/android/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -242,5 +242,7 @@
     <integer name="def_hdmi_hscaler">90</integer>
 
     <integer name="def_vga_output_mode">888</integer>
-   <!-- end added by zhongzhiwen -->
+    
+    <string name="def_show_nav_bar">false</string>
+    <!-- end added by zhongzhiwen -->
 </resources>
diff --git a/android/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java b/android/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
index 5e34361..ada7cd6 100755
--- a/android/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
+++ b/android/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -2363,6 +2363,8 @@ class DatabaseHelper extends SQLiteOpenHelper {
                     R.bool.def_dim_screen);
             loadIntegerSetting(stmt, Settings.System.SCREEN_OFF_TIMEOUT,
                     R.integer.def_screen_off_timeout);
+            loadStringSetting(stmt, "show_navigation_bar",
+                    R.string.def_show_nav_bar);
 
             // Set default cdma DTMF type
             loadSetting(stmt, Settings.System.DTMF_TONE_TYPE_WHEN_DIALING, 0);
diff --git a/android/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java b/android/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
index 7c42abc..781ce7f 100644
--- a/android/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
+++ b/android/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -723,6 +723,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
 
         mScreenPinningRequest = new ScreenPinningRequest(mContext);
         mFalsingManager = FalsingManager.getInstance(mContext);
+
+        String isShownav = Settings.System.getString(mContext.getContentResolver(),"show_navigation_bar");
+        if ("false".equals(isShownav)) {
+            mWindowManager.removeView(mNavigationBarView);
+        }
     }
 
     protected void createIconController() {
@@ -787,9 +792,11 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         try {
             boolean showNav = mWindowManagerService.hasNavigationBar();
             if (DEBUG) Log.v(TAG, "hasNavigationBar=" + showNav);
+
             if (showNav) {
                 createNavigationBarView(context);
             }
+
         } catch (RemoteException ex) {
             // no window manager? good luck with that
         }
@@ -1012,6 +1019,7 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
 
         // Private API call to make the shadows look better for Recents
         ThreadedRenderer.overrideProperty("ambientRatio", String.valueOf(1.5f));
+        
 
         return mStatusBarView;
     }
@@ -3678,7 +3686,27 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
         mContext.getContentResolver().registerContentObserver(
                 Settings.Secure.getUriFor(Settings.Secure.USER_SETUP_COMPLETE), true,
                 mUserSetupObserver, mCurrentUserId);
-    }
+        mContentObserver = new SettingsValueChangeContentObserver();
+        mContext.getContentResolver().registerContentObserver(
+                Settings.System.getUriFor("show_navigation_bar"),true, mContentObserver);
+    }
+
+private SettingsValueChangeContentObserver mContentObserver;
+class SettingsValueChangeContentObserver extends ContentObserver {
+    public SettingsValueChangeContentObserver() {
+        super(new Handler());
+    }
+    @Override
+    public void onChange(boolean selfChange) {
+        super.onChange(selfChange);
+        String isShownav = Settings.System.getString(mContext.getContentResolver(),"show_navigation_bar");
+        if ("true".equals(isShownav)) {
+                mWindowManager.addView(mNavigationBarView, getNavigationBarLayoutParams());
+        } else {
+            mWindowManager.removeView(mNavigationBarView);
+        }
+    }
+}
 
     /**
      * Reload some of our resources when the configuration changes.
diff --git a/android/packages/apps/Settings/res/values-zh-rCN/custom.xml b/android/packages/apps/Settings/res/values-zh-rCN/custom.xml
index 48f8352..3de5ff8 100755
--- a/android/packages/apps/Settings/res/values-zh-rCN/custom.xml
+++ b/android/packages/apps/Settings/res/values-zh-rCN/custom.xml
@@ -29,7 +29,8 @@
     <string name="smart_color">丽色系统</string>
     <string name="smart_color_summary">丽色系统用于玩游戏,观看视频图片,效果更佳</string>
     <string name="intelligent_backlight">智能背光</string>
-    <string name="brightness_demo">演示模式</string>
+    <string name="whether_shownav">"显示导航栏"</string>
+    <string name="brightness_demo">演示模式</string>
     <string name="brightness_demo_summary">只对半个屏幕有效,便于看出效果</string>
     <!-- display settings end -->
 
diff --git a/android/packages/apps/Settings/res/values/custom.xml b/android/packages/apps/Settings/res/values/custom.xml
index 6b4ad1b..aca7000 100755
--- a/android/packages/apps/Settings/res/values/custom.xml
+++ b/android/packages/apps/Settings/res/values/custom.xml
@@ -45,7 +45,8 @@
     <string name="smart_color">Smart color</string>
     <string name="smart_color_summary">It is better for playing games and video and picture.</string>
     <string name="intelligent_backlight">Intelligent backlight</string>
-    <string name="brightness_demo">Demo mode</string>
+    <string name="whether_shownav">"whether show nav"</string>
+    <string name="brightness_demo">Demo mode</string>
     <string name="brightness_demo_summary">Only half of the screen is effective, in order to show the effect easily.</string>
     <!-- display settings end -->
 
diff --git a/android/packages/apps/Settings/src/com/android/settings/DisplaySettings.java b/android/packages/apps/Settings/src/com/android/settings/DisplaySettings.java
index bf041c1..ac5bb68 100644
--- a/android/packages/apps/Settings/src/com/android/settings/DisplaySettings.java
+++ b/android/packages/apps/Settings/src/com/android/settings/DisplaySettings.java
@@ -122,6 +122,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
     private SwitchPreference mSmartColorDemoPreference;
     private SwitchPreference mIntelligentBacklightPreference;
     private SwitchPreference mIntelligentBacklightDemoPreference;
+    private SwitchPreference mshowNavPreference;
 
     @Override
     protected int getMetricsCategory() {
@@ -135,8 +136,18 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
         final ContentResolver resolver = activity.getContentResolver();
 
         addPreferencesFromResource(R.xml.display_settings);
-
-        mScreenSaverPreference = findPreference(KEY_SCREEN_SAVER);
+        
+        mshowNavPreference = (SwitchPreference) findPreference("show_nav");
+        if (mshowNavPreference != null) {
+        // 显示之前的设置
+           String isShownav = Settings.System.getString(getContentResolver(),"show_navigation_bar");
+           mshowNavPreference.setChecked("true".equals(isShownav) ? true : false);
+           mshowNavPreference.setOnPreferenceChangeListener(this);
+        } else {
+            removePreference("show_navigation_bar");
+        }
+        
+        mScreenSaverPreference = findPreference(KEY_SCREEN_SAVER);
         if (mScreenSaverPreference != null
                 && getResources().getBoolean(
                         com.android.internal.R.bool.config_dreamsSupported) == false) {
@@ -497,6 +508,10 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
                 Log.e(TAG, "could not persist screen timeout setting", e);
             }
         }
+        if (preference == mshowNavPreference) {
+            boolean auto = (Boolean) objValue;
+            Settings.System.putString(getContentResolver(),"show_navigation_bar",String.valueOf(auto));
+        }
         if (preference == mAutoBrightnessPreference) {
             boolean auto = (Boolean) objValue;
             Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE,
原文地址:https://www.cnblogs.com/okshall/p/14312717.html