Android 6.0 Settings中添加虚拟键开关

  1. 添加系统默认键值
xml 复制代码
+++ b/frameworks/base/packages/SettingsProvider/res/values/defaults.xml
@@ -212,4 +212,7 @@
 
     <!-- Default for Settings.Secure.NFC_PAYMENT_COMPONENT -->
     <string name="def_nfc_payment_component"></string>
+    
+    <!--mh.modify 20190602 navigationbar switch.-->
+    <integer name="switch_navigation_bar">0</integer>
java 复制代码
+++ b/frameworks/base/packages/SettingsProvider/src/com/android/providers/settings/DatabaseHelper.java
@@ -2646,6 +2646,9 @@ class DatabaseHelper extends SQLiteOpenHelper {
 
             loadBooleanSetting(stmt, Settings.Global.DEVICE_PROVISIONED,
                     R.bool.def_device_provisioned);
+                    
+            //mh.mmi add navbar 20190602
+            loadIntegerSetting(stmt, "switch_navigation_bar",R.integer.switch_navigation_bar);
  1. 设置中添加开关
xml 复制代码
+++ b/packages/apps/Settings/res/values-zh-rCN/strings.xml
@@ -2880,4 +2880,6 @@
     <string name="write_settings_description" msgid="6868293938839954623">"此权限允许应用修改系统设置。"</string>
     <string name="write_settings_on" msgid="8230580416068832239">"允许"</string>
     <string name="write_settings_off" msgid="5156104383386336233">"不允许"</string>  
+    <string name="switch_navigationbarview">虚拟键开关</string>
 </resources>
diff --git a/packages/apps/Settings/res/values/strings.xml b/packages/apps/Settings/res/values/strings.xml
old mode 100644
new mode 100755
index ad5ca8cbf3..d4474ab5bc

+++ b/packages/apps/Settings/res/values/strings.xml
@@ -6998,4 +6998,6 @@
     <string name="write_settings_on">Yes</string>
     <!-- Summary of app not allowed to write system settings [CHAR LIMIT=45] -->
     <string name="write_settings_off">No</string> 
+    <string name="switch_navigationbarview">Navigation key switch</string>
xml 复制代码
+++ b/packages/apps/Settings/res/xml/accessibility_settings.xml
@@ -36,6 +36,12 @@
             android:fragment="com.android.settings.accessibility.ToggleScreenMagnificationPreferenceFragment"
             android:key="screen_magnification_preference_screen"
             android:title="@string/accessibility_screen_magnification_title"/>
+            
+        <!-- mh.mmi -->
+        <SwitchPreference
+            android:key="switch_navigationbarview"
+            android:title="@string/switch_navigationbarview"
+            android:persistent="false"/>
java 复制代码
+++ b/packages/apps/Settings/src/com/android/settings/accessibility/AccessibilitySettings.java
@@ -187,6 +187,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
     private PreferenceCategory mServicesCategory;
     private PreferenceCategory mSystemsCategory;
 
+    private SwitchPreference mToggleNavBarPreference;//mh.mmi
     private SwitchPreference mToggleLargeTextPreference;
     private SwitchPreference mToggleHighTextContrastPreference;
     private SwitchPreference mTogglePowerButtonEndsCallPreference;
@@ -304,9 +305,20 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
             handleDisplayMagnificationPreferenceScreenClick();
             return true;
         }
+        //mh.mmi add navbar switch. 20190602
+        else if (mToggleNavBarPreference == preference) {
+            handleToggleNavBarPreferenceClick();
+        }
         return super.onPreferenceTreeClick(preferenceScreen, preference);
     }
 
+    ///mh.mmi add navbar switch. 20190602
+    private void handleToggleNavBarPreferenceClick() {
+        Settings.Global.putInt(getContentResolver(),
+                "switch_navigation_bar",
+                mToggleNavBarPreference.isChecked() ? 1 : 0);
+    }
+
     private void handleToggleLargeTextPreferenceClick() {
         /** M: MTK fix fonts problem @{ */
         float fontScale = LARGE_FONT_SCALE;
@@ -380,6 +392,10 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
         mServicesCategory = (PreferenceCategory) findPreference(SERVICES_CATEGORY);
         mSystemsCategory = (PreferenceCategory) findPreference(SYSTEM_CATEGORY);
 
+        // mh.mmi add navbar switch. 20190602
+        mToggleNavBarPreference =
+                (SwitchPreference) findPreference("switch_navigationbarview");
+        
         // Large text.
         mToggleLargeTextPreference =
                 (SwitchPreference) findPreference(TOGGLE_LARGE_TEXT_PREFERENCE);
@@ -580,6 +596,10 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements
             }
             updateFontScale = mLargeFontScaleTablet;
         }
+        
+        ///mh.mmi add navbar switch. 20190602
+        mToggleNavBarPreference.setChecked(Settings.Global.getInt(getContentResolver(),
+                "switch_navigation_bar", 0) == 1);
 
         mToggleLargeTextPreference.setChecked(mCurConfig.fontScale == updateFontScale);
         /** @} */
  1. 监听数据库变化
java 复制代码
+++ b/frameworks/base/packages/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBar.java
@@ -668,6 +668,43 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
 
         mScreenPinningRequest = new ScreenPinningRequest(mContext);
     }
+    
+    ///mh.modify start 2019.6.2
+    class NavBarChangeContentObserver extends ContentObserver{
+ 
+        public NavBarChangeContentObserver() {
+            super(new Handler());
+        }
+ 
+        @Override
+        public void onChange(boolean selfChange) {
+            super.onChange(selfChange);
+            boolean isShownav = Settings.Global.getInt(mContext.getContentResolver(), "switch_navigation_bar", 0) != 0;
+            android.util.Log.d("mh.log", "isShownav:"+isShownav);
+            if (isShownav) {
+                if (mNavigationBarView == null) {
+                    addNarBar();
+                }
+                if (mNavigationBarView != null) {
+                    checkBarMode(MODE_TRANSLUCENT, mNavigationBarWindowState, mNavigationBarView.getBarTransitions(), false);
+                }
+            } else {
+                if (mNavigationBarView != null) {
+                    mWindowManager.removeView(mNavigationBarView);
+                    mNavigationBarView = null;
+                }
+            }
+        }
+    }
+    private void addNarBar() {
+        if (mNavigationBarView == null) {
+            mNavigationBarView = (NavigationBarView) View.inflate(mContext, R.layout.navigation_bar, null);
+            mNavigationBarView.setDisabledFlags(mDisabled1);
+            mNavigationBarView.setBar(this);
+            prepareNavigationBarView();
+        }
+        mWindowManager.addView(mNavigationBarView, getNavigationBarLayoutParams());
+    }
+    
+    ///mh.modify end 2019.6.2

@@ -1246,7 +1248,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
     // For small-screen devices (read: phones) that lack hardware navigation buttons
     private void addNavigationBar() {
         if (DEBUG) Log.v(TAG, "addNavigationBar: about to add " + mNavigationBarView);
-        if (mNavigationBarView == null) return;
+        if (mNavigationBarView == null) {
+            Settings.Global.putInt(mContext.getContentResolver(), "switch_navigation_bar", 0);
+            return;
+        }
 
         prepareNavigationBarView();
 
     // ================================================================================
     // Constructing the view
@@ -698,6 +735,10 @@ public class PhoneStatusBar extends BaseStatusBar implements DemoMode,
 
         mStatusBarView = (PhoneStatusBarView) mStatusBarWindow.findViewById(R.id.status_bar);
         mStatusBarView.setBar(this);
              
+        ///mh.mmi add navbar 20190602
+        NavBarChangeContentObserver mNavContentObserver = new NavBarChangeContentObserver();
+        mContext.getContentResolver().registerContentObserver(Settings.Global.getUriFor("switch_navigation_bar"),true,mNavContentObserver);
 
         PanelHolder holder = (PanelHolder) mStatusBarWindow.findViewById(R.id.panel_holder);
         mStatusBarView.setPanelHolder(holder);
相关推荐
Android小码家16 小时前
BootAnimation+SE+开机MP4动画播放
android·framework
加农炮手Jinx16 小时前
Flutter for OpenHarmony:pub_updater 命令行工具自动更新专家(DevOps 运维必备) 深度解析与鸿蒙适配指南
android·运维·网络·flutter·华为·harmonyos·devops
2601_9574188017 小时前
告别OTG碎片化!Android MTP协议深度解析与高性能通信方案
android
故渊at17 小时前
第二板块:Android 四大组件标准化学理 | 第七篇:Activity 页面载体与任务栈算法
android·算法·生命周期·activity·任务栈
QING61818 小时前
Kotlin 协程新手指南 —— 协程上下文与调度器
android·kotlin·android jetpack
潘潘潘18 小时前
Android JAVA Socket 知识梳理
android
00后程序员张19 小时前
Jenkins 自动上传 IPA 到 App Store 把发布步骤融入 CI/CD
android·ios·小程序·https·uni-app·iphone·webview
Gary Studio19 小时前
复杂 SoC(RK3568)PCB 布局的五步
android·linux·硬件
plainGeekDev19 小时前
HttpURLConnection → OkHttp + Kotlin
android·java·kotlin