RK3568 Android12动态控制SystemUI状态栏和导航栏-packages/apps/Settings【二】

书接上文,此篇文章主要展示在 packages/apps/Settings 中添加控制状态栏和导航栏显示和隐藏的代码改动。代码比较简单,无需过多解读。

  1. 增加语言项,根据支持的语言添加对应的语言
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13714,4 +13714,8 @@
     <string name="dialog_getting_screen_info">getting screen info...</string>
     <string name="dialog_update_resolution">Updating resolution...</string>
     <string name="dialog_wait_screen_connect">please wait while updating info to the device...</string>
+    <string name="ctrl_statusbar">StatusBar</string>
+    <string name="ctrl_navigationbar">NavigationBar</string>
 </resources>
--- a/res/values-zh-rCN/strings.xml
+++ b/res/values-zh-rCN/strings.xml
@@ -5608,4 +5608,9 @@
 +    <string name="ctrl_statusbar">状态栏</string>
 +    <string name="ctrl_navigationbar">导航栏</string>
 </resources>
  1. 增加功能配置选项
+++ b/res/xml/display_settings.xml
@@ -103,6 +103,14 @@
     <PreferenceCategory
         android:title="@string/category_name_display_controls">
 
+        <SwitchPreference
+            android:key="ctrl_statusbar"
+            android:title="@string/ctrl_statusbar"/>
+
+        <SwitchPreference
+            android:key="ctrl_navigationbar"
+            android:title="@string/ctrl_navigationbar"/>
+
  1. DisplaySettings.java 增加功能引用
--- a/src/com/android/settings/DisplaySettings.java
+++ b/src/com/android/settings/DisplaySettings.java
@@ -30,6 +30,8 @@ import com.android.settings.display.ShowOperatorNamePreferenceController;
 import com.android.settings.display.TapToWakePreferenceController;
 import com.android.settings.display.ThemePreferenceController;
 import com.android.settings.display.VrDisplayPreferenceController;
+import com.android.settings.display.StatusBarPreferenceController;
+import com.android.settings.display.NavigationBarPreferenceController;
 import com.android.settings.search.BaseSearchIndexProvider;
 import com.android.settingslib.core.AbstractPreferenceController;
 import com.android.settingslib.core.lifecycle.Lifecycle;
@@ -85,6 +87,8 @@ public class DisplaySettings extends DashboardFragment {
         controllers.add(new ThemePreferenceController(context));
         controllers.add(new BrightnessLevelPreferenceController(context, lifecycle));
         controllers.add(new HdmiSettingsPreferenceController(context, KET_HDMI_SETTINGS));
+        controllers.add(new StatusBarPreferenceController(context));
+        controllers.add(new NavigationBarPreferenceController(context));
         return controllers;
     }
  1. 实现 display/StatusBarPreferenceController.java
package com.android.settings.display;

import android.content.Context;
import android.provider.Settings;
import androidx.preference.SwitchPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;
import android.content.Intent;
import android.util.Log;
import android.os.SystemProperties;

public class StatusBarPreferenceController extends AbstractPreferenceController implements
        PreferenceControllerMixin, Preference.OnPreferenceChangeListener {

    private static final String TAG = "StatusBarCtrl";
    private static final boolean DEBUG = true;
    private static final String KEY_STATUS_BAR = "ctrl_statusbar";
    public static final String ACTION_HIDE_STATUS_BAR = "com.systemui.statusbar.hide";
    public static final String ACTION_SHOW_STATUS_BAR = "com.systemui.statusbar.show";

    public StatusBarPreferenceController(Context context) {
        super(context);
    }

    @Override
    public String getPreferenceKey() {
        return KEY_STATUS_BAR;
    }

    @Override
    public boolean isAvailable() {
        return true;
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        if (!isAvailable()) {
            setVisible(screen, KEY_STATUS_BAR, false /* visible */);
            return;
        }

        final SwitchPreference mStatusBarPreference = screen.findPreference(KEY_STATUS_BAR);
        if (mStatusBarPreference != null) {
            String value = SystemProperties.get("persist.sys.statusbar.enable", "false");
            mStatusBarPreference.setChecked(value.equals("true"));
            mStatusBarPreference.setOnPreferenceChangeListener(this);
        }
    }

    @Override
    public void updateState(Preference preference) {
        String value = SystemProperties.get("persist.sys.statusbar.enable", "false");
        ((SwitchPreference) preference).setChecked(value.equals("true"));
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        boolean value = (Boolean) newValue;
        if (DEBUG) {
            Log.d(TAG, "key value " + value);
        }

        Intent intent = new Intent();
        if (value) {
            intent.setAction(ACTION_SHOW_STATUS_BAR);
        } else {
            intent.setAction(ACTION_HIDE_STATUS_BAR);
        }
        mContext.sendBroadcast(intent); // 发送广播
        return true;
    }
}
  1. 实现 display/NavigationBarPreferenceController.java
package com.android.settings.display;

import android.content.Context;
import android.provider.Settings;
import androidx.preference.SwitchPreference;
import androidx.preference.Preference;
import androidx.preference.PreferenceScreen;

import com.android.settings.core.PreferenceControllerMixin;
import com.android.settingslib.core.AbstractPreferenceController;
import android.content.Intent;
import android.util.Log;
import android.os.SystemProperties;

public class NavigationBarPreferenceController extends AbstractPreferenceController
        implements PreferenceControllerMixin, Preference.OnPreferenceChangeListener {

    private static final String TAG = "NavigationBarCtrl";
    private static final boolean DEBUG = true;
    private static final String KEY_NAVIGATION_BAR = "ctrl_navigationbar";
    public static final String ACTION_HIDE_NAVIGATION_BAR = "com.systemui.navigationbar.hide";
    public static final String ACTION_SHOW_NAVIGATION_BAR = "com.systemui.navigationbar.show";

    public NavigationBarPreferenceController(Context context) {
        super(context);
    }

    @Override
    public String getPreferenceKey() {
        return KEY_NAVIGATION_BAR;
    }

    @Override
    public boolean isAvailable() {
        return true;
    }

    @Override
    public void displayPreference(PreferenceScreen screen) {
        if (!isAvailable()) {
            setVisible(screen, KEY_NAVIGATION_BAR, false /* visible */);
            return;
        }

        final SwitchPreference mNavigationBarPreference = screen.findPreference(KEY_NAVIGATION_BAR);
        if (mNavigationBarPreference != null) {
            String value = SystemProperties.get("persist.sys.navigationbar.enable", "false");
            mNavigationBarPreference.setChecked(value.equals("true"));
            mNavigationBarPreference.setOnPreferenceChangeListener(this);
        }
    }

    @Override
    public void updateState(Preference preference) {
        String value = SystemProperties.get("persist.sys.navigationbar.enable", "false");
        ((SwitchPreference) preference).setChecked(value.equals("true"));
    }

    @Override
    public boolean onPreferenceChange(Preference preference, Object newValue) {
        boolean value = (Boolean) newValue;
        if (DEBUG) {
            Log.d(TAG, "key value " + value);
        }

        Intent intent = new Intent();
        if (value) {
            intent.setAction(ACTION_SHOW_NAVIGATION_BAR);
        } else {
            intent.setAction(ACTION_HIDE_NAVIGATION_BAR);
        }
        mContext.sendBroadcast(intent);
        return true;
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值