动态隐藏和显示导航栏 (MTK)
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)相关推荐
- android应用去掉状态栏_Android 显示、隐藏状态栏和导航栏
Android 显示.隐藏状态栏和导航栏 控制状态栏显示,Activity的主题中配置全屏属性 true 控制状态栏显示,在setContentView之前设置全屏的flag getWindow(). ...
- Android 显示、隐藏状态栏和导航栏
Android 显示.隐藏状态栏和导航栏 控制状态栏显示,Activity的主题中配置全屏属性 <item name="android:windowFullscreen"&g ...
- iOS - 隐藏/显示导航栏
隐藏导航栏 [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarM ...
- ios 上滑隐藏导航下拉显示导航栏实现
为了最大限度的利用手机屏幕,出现了上滑隐藏导航下拉显示导航栏. 先看看效果(代码:http://download.csdn.net/detail/gx_wqm/9771247), 把代码跑一下看一下是 ...
- 【干货】Android系统定制基础篇:第十三部分(开放root权限、禁止应用旋转、隐藏状态栏和导航栏)
一.Android开放root权限 Android 5.1 1.修改 su 源码(system\extras\su\su.c),注释下面代码: int main(int argc, char **ar ...
- Android系统:如何开启或隐藏Navigation Bar导航 栏
如何开启或隐藏Navigation Bar导航栏? 如下图红色框标注的区域,就是Navigation Bar区域,它提供三个快捷方式图标,从 左到右分别是Back/Home/Recent . 第一步: ...
- Android-x86-6.0定制之路 - 动态显示、隐藏状态栏和导航栏(广播方式)
需求确立 描述 当 App 进入 kiosk 模式,要求隐藏底部虚拟键.禁止下拉出现状态栏,这样保证我们的 App 一直处于系统前台运行. 1. 通过getWindow().getDecorView( ...
- Android隐藏状态栏、导航栏
Android隐藏状态栏.导航栏 [java] view plaincopy private void hideStatusNavigationBar(){ if(Build.VERSION.SDK_ ...
- Android 4.2虚拟按键背景透明,Android 4.0 隐藏虚拟按键(导航栏)的方法
在Android4.0里,多了一些API,其中包括怎样隐藏虚拟按键(导航栏),这样编写游戏或一个视频播放器时,可以设置隐藏虚拟按键的参数,达到最佳效果,当然前提是使用的手机是有虚拟按键的,例如gala ...
- EasyUI的datagrid分页,动态隐藏或显示列
EasyUI的datagrid分页,动态隐藏或显示列 业务需要,根据不用的查询条件,显示不同的列名 1 $("#chnMode").change(function(){ 2 if( ...
最新文章
- MyEclipse中删除对Struts、hibernate、spring的支持
- 从gitee 下载代码到本地
- Junit实现接口类测试
- JavaScript中判断为整数的多种方式
- 怎么一键备份服务器系统还原,电脑怎么一键还原
- python递归函数详解-讲解Python中的递归函数
- Spark成为大数据高手进阶步骤
- Opencv之斑点(Blob)检测--SimpleBlobDetector_create
- Linux C编程与Shell编程在开发实用工具方面的相同点总结
- python中单词个数_python 统计单词个数
- 使用PR剪辑视频,mkv格式怎么无损转mp4
- JSP 创建 CRUD 示例 MyBatis DAO 用于数据库JSTL 用于遍历记录
- 二叉搜索树插入算法C#演示的代码
- ffmpeg java 实时视频流转码
- 关于怎么把Excel表格导入MySQL数据库中
- python选题背景_论文的选题背景及意义-样例
- 安装MySQL——压缩包安装
- 计算机系统基础实验——数据的机器级表示
- ThinkPHP5.0之PHPmailer发送邮箱(qq、163)
- 产生论文高重复率的原因及降重方法
热门文章
- oel 7.0 安装 mysql 5_MySQL 5.7.21 在 OEL6.9 平台上的二进制安装
- oracle 取现在的时间,Oracle 获取当前日期及日期格式
- 树莓派4B监控CPU占用率、内存使用率、磁盘使用量以及CPU温度
- (JZ1619)2018.07.08【2018提高组】模拟C组 0	.音乐节拍
- linux audit 服务,linux 的 audit 服務
- 使用Python读取Windows注册表
- 互联网保险投诉量翻倍 众安与安心财险上榜
- 代码编辑器 Sublime Text 系列——安装、插件和菜单中英文对照
- cute-cnblogs 自定义博客园样式美化二期来啦~
- 【uniapp】实现H5微信分享