欧美free性护士vide0shd,老熟女,一区二区三区,久久久久夜夜夜精品国产,久久久久久综合网天天,欧美成人护士h版

目錄

開發(fā)語言 java android-studio 【Android14 添加SystemUI下拉菜單控制按鈕】

? ?Android14相對于之前的Android版本(11,12,13)StatusBar.java文件進(jìn)行了拆分,所以在Android14中StatusBar的許多函數(shù)方法等都更換了位置,不過萬變不離其宗,我們添加控制按鈕的方法和思路也是類似的,本文以添加下拉菜單控制按鈕為例,進(jìn)行定制化修改。

需求:一些應(yīng)用程序中讀取通知但在其他應(yīng)用程序中我們需要始終鎖定下拉菜單,希望添加Drop Menu 控制器用于控制Menu是否正常下拉。

實(shí)現(xiàn)思路:

1.Settings模塊:在Settings模塊中顯示菜單添加開關(guān),用于開啟和關(guān)閉下拉菜單,并發(fā)送相應(yīng)的廣播,并寫入相應(yīng)的系統(tǒng)屬性。

2.SystemUI模塊:添加廣播接收器,用于接收控制下拉菜單顯示和隱藏的廣播,并執(zhí)行相應(yīng)的操作。同時(shí)添加系統(tǒng)屬性讀取,用于獲取下拉菜單的初始狀態(tài)。

Settings模塊:

1.添加顯示字符串,如有多語言需求請自行在該語言包添加

alps/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/values/strings.xml

Drop Down Menu

2.在設(shè)置模塊的顯示菜單?display_settings.xml中添加目標(biāo)按鈕的鍵值和標(biāo)題以及控制類

alps/vendor/mediatek/proprietary/packages/apps/MtkSettings/res/xml/display_settings.xml

android:key="ctrl_explan"

android:title="@string/ctrl_explan"

settings:controller="com.android.settings.display.ExPlanPreferenceController.java"/>

3.在Settings模塊的DisplaySettings.java文件中,用于注冊我們的控制開關(guān):

alps/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/DisplaySettings.java

--- a/alps/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/DisplaySettings.java

+++ b/alps/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/DisplaySettings.java

@@ -29,6 +29,7 @@ import com.android.settings.display.TapToWakePreferenceController;

import com.android.settings.display.ThemePreferenceController;

import com.android.settings.display.VrDisplayPreferenceController;

import com.android.settings.search.BaseSearchIndexProvider;

+import com.android.settings.display.ExPlanPreferenceController;

import com.android.settingslib.core.AbstractPreferenceController;

import com.android.settingslib.core.lifecycle.Lifecycle;

import com.android.settingslib.search.SearchIndexable;

@@ -91,6 +92,9 @@ public class DisplaySettings extends DashboardFragment {

/// M: add for HDMI settings @{

controllers.add(new HdmiPreferenceController(context));

/// @}

+ //wjj add

+ controllers.add(new ExPlanPreferenceController(context));

+ //wjj end

return controllers;

}

4.添加下拉菜單控制類并添加宏控控制控制按鈕是否存在

alps/vendor/mediatek/proprietary/packages/apps/MtkSettings/src/com/android/settings/display/ExPlanPreferenceController.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 ExPlanPreferenceController extends AbstractPreferenceController implements

Preference.OnPreferenceChangeListener {

private static final String TAG = "ExPlanCtrl";

private static final boolean DEBUG = true;

private static final String KEY_EXPLAN = "ctrl_explan";

private static final String SYS_PROP_EXPLAN_ENABLE = "persist.sys.explan.enable";

private static final String ACTION_HIDE_EXPLAN = "sys.explan.hide";

private static final String ACTION_SHOW_EXPLAN = "sys.explan.show";

private static final boolean HX_TS818_BUG_70579 = SystemProperties.getBoolean("ro.hx_ts818_bug_70579", false);

public ExPlanPreferenceController(Context context) {

super(context);

}

@Override

public String getPreferenceKey() {

return KEY_EXPLAN;

}

@Override

public boolean isAvailable() {

if(HX_TS818_BUG_70579){

return true;

}else{

return false;

}

}

@Override

public void displayPreference(PreferenceScreen screen) {

if (!isAvailable()) {

setVisible(screen, KEY_EXPLAN, false);

return;

}

final SwitchPreference mExPlanPreference = screen.findPreference(KEY_EXPLAN);

if (mExPlanPreference != null) {

String value = SystemProperties.get(SYS_PROP_EXPLAN_ENABLE, "false");

mExPlanPreference.setChecked(value.equals("true"));

mExPlanPreference.setOnPreferenceChangeListener(this);

}

}

@Override

public void updateState(Preference preference) {

String value = SystemProperties.get(SYS_PROP_EXPLAN_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_EXPLAN);

} else {

intent.setAction(ACTION_HIDE_EXPLAN);

}

mContext.sendBroadcast(intent);

return true;

}

}

SystemUI模塊

1.在SystemUI模塊的AndroidManifest.xml文件中聲明廣播,同時(shí)更改其權(quán)限讓其正常設(shè)置其邏輯。

alps/vendor/mediatek/proprietary/packages/apps/SystemUI/AndroidManifest.xml

--- a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/AndroidManifest.xml

+++ b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/AndroidManifest.xml

@@ -19,7 +19,7 @@

xmlns:androidprv="http://schemas.android.com/apk/prv/res/android"

package="com.android.systemui"

- android:sharedUserId="android.uid.systemui"

+ android:sharedUserId="android.uid.system"

xmlns:tools="http://schemas.android.com/tools"

coreApp="true">

@@ -367,6 +367,10 @@

+

+

+

+

android:name=".SystemUIApplication"

2.在SystemUI模塊的CentralSurfacesImpl.java(原StatusBar.java)文件中,我們需要添加以下代碼,用于聲明和初始化一些變量和方法以及邏輯判斷:

alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java

--- a/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java

+++ b/alps/vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java

@@ -298,6 +298,14 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {

private static final String BANNER_ACTION_SETUP =

"com.android.systemui.statusbar.banner_action_setup";

+ //wjj add

+ private static final String ACTION_HIDE_EXPLAN = "sys.explan.hide";

+ private static final String ACTION_SHOW_EXPLAN = "sys.explan.show";

+ private static final String SYS_PROPERTY_EXPLAN = "persist.sys.explan.enable";

+

+ protected StatusBarManager mStatusBarManager;

+ //wjj end

+

private static final int MSG_OPEN_SETTINGS_PANEL = 1002;

private static final int MSG_LAUNCH_TRANSITION_TIMEOUT = 1003;

// 1020-1040 reserved for BaseStatusBar

@@ -923,6 +931,9 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {

mUserTracker = userTracker;

mFingerprintManager = fingerprintManager;

mActivityStarter = activityStarter;

+ //wjj add

+ mStatusBarManager = (StatusBarManager) mContext.getSystemService(Context.STATUS_BAR_SERVICE);

+ //wjj end

mLockscreenShadeTransitionController = lockscreenShadeTransitionController;

mStartingSurfaceOptional = startingSurfaceOptional;

@@ -980,6 +991,15 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {

bubbles.setExpandListener(listener);

}

+ //wjj add

+ public void explan_show() {

+ mStatusBarManager.disable(StatusBarManager.DISABLE_NONE);

+ }

+ public void explan_hide() {

+ mStatusBarManager.disable(StatusBarManager.DISABLE_EXPAND);

+ }

+ //wjj end

+

@Override

public void start() {

mScreenLifecycle.addObserver(mScreenObserver);

@@ -1322,7 +1342,11 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {

mStatusBarTouchableRegionManager.setup(this, mNotificationShadeWindowView);

createNavigationBar(result);

-

+ //wjj add

+ if (SystemProperties.getBoolean(SYS_PROPERTY_EXPLAN, false)) {

+ explan_show();

+ }

+ //wjj end

if (ENABLE_LOCKSCREEN_WALLPAPER && mWallpaperSupported) {

mLockscreenWallpaper = mLockscreenWallpaperLazy.get();

}

@@ -1598,6 +1622,10 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {

protected void registerBroadcastReceiver() {

IntentFilter filter = new IntentFilter();

filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);

+ //wjj add

+ filter.addAction(ACTION_HIDE_EXPLAN);

+ filter.addAction(ACTION_SHOW_EXPLAN);

+ //wjj end

filter.addAction(Intent.ACTION_SCREEN_OFF);

mBroadcastDispatcher.registerReceiver(mBroadcastReceiver, filter, null, UserHandle.ALL);

}

@@ -2200,6 +2228,7 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {

}

}

+

@Override

public void dump(PrintWriter pwOriginal, String[] args) {

IndentingPrintWriter pw = DumpUtilsKt.asIndenting(pwOriginal);

@@ -2384,7 +2413,15 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {

}

finishBarAnimations();

resetUserExpandedStates();

- }

+ //wjj add

+ } else if (ACTION_HIDE_EXPLAN.equals(action)) {

+ explan_hide();

+ SystemProperties.set(SYS_PROPERTY_EXPLAN, "false");

+ } else if (ACTION_SHOW_EXPLAN.equals(action)) {

+ explan_show();

+ SystemProperties.set(SYS_PROPERTY_EXPLAN, "true");

+ }

+ //wjj end

Trace.endSection();

}

};

end

總結(jié):

后續(xù)編譯檢測達(dá)成目標(biāo)效果,開關(guān)開啟時(shí)正常下拉下拉欄,開關(guān)關(guān)閉時(shí)無法正常使用下拉功能。

如需進(jìn)一步控制SystemUI狀態(tài)欄以及導(dǎo)航欄,可以參考以下鏈接。

Android系統(tǒng) 添加動態(tài)控制SystemUI狀態(tài)欄、導(dǎo)航欄和下拉菜單_android 下拉菜單-CSDN博客

推薦文章

評論可見,查看隱藏內(nèi)容

本文內(nèi)容根據(jù)網(wǎng)絡(luò)資料整理,出于傳遞更多信息之目的,不代表金鑰匙跨境贊同其觀點(diǎn)和立場。

轉(zhuǎn)載請注明,如有侵權(quán),聯(lián)系刪除。

本文鏈接:http://gantiao.com.cn/post/18919293.html

發(fā)布評論

您暫未設(shè)置收款碼

請?jiān)谥黝}配置——文章設(shè)置里上傳

掃描二維碼手機(jī)訪問

文章目錄