一、Android修改
1、文件PhoneStatusBar.java
位置:\192.168.1.136\android\rk3288_712\frameworks\base\packages\SystemUI\src\com\android\systemui\statusbar\phone\PhoneStatusBar.java
找到以下内容:
import android.graphics.drawable.BitmapDrawable;
import android.graphics.drawable.ColorDrawable;
import android.graphics.drawable.Drawable;
后面新增以下内容:
import android.graphics.Color;
再找到以下内容:
public static final String ACTION_FAKE_ARTWORK = "fake_artwork";
后面新增以下内容:
public static final String HIDE_STATUSBAR_NAVIBAR = "android.intent.action.HIDE_STATUSBAR_NAVIBAR";
public static final String SHOW_STATUSBAR_NAVIBAR = "android.intent.action.SHOW_STATUSBAR_NAVIBAR";
再找到以下内容:
public void start() {
mDisplay = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay();
updateDisplaySize();
mScrimSrcModeEnabled = mContext.getResources().getBoolean(
R.bool.config_status_bar_scrim_behind_use_src);
super.start(); // calls createAndAddWindows()
mMediaSessionManager
= (MediaSessionManager) mContext.getSystemService(Context.MEDIA_SESSION_SERVICE);
// TODO: use MediaSessionManager.SessionListener to hook us up to future updates
// in session state
addNavigationBar();
// Lastly, call to the icon policy to install/update all the icons.
mIconPolicy = new PhoneStatusBarPolicy(mContext, mIconController, mCastController,
mHotspotController, mUserInfoController, mBluetoothController,
mRotationLockController, mNetworkController.getDataSaverController());
mIconPolicy.setCurrentUserSetup(mUserSetup);
mSettingsObserver.onChange(false); // set up
mHeadsUpObserver.onChange(true); // set up
if (ENABLE_HEADS_UP) {
mContext.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED), true,
mHeadsUpObserver);
mContext.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(SETTING_HEADS_UP_TICKER), true,
mHeadsUpObserver);
}
mUnlockMethodCache = UnlockMethodCache.getInstance(mContext);
mUnlockMethodCache.addListener(this);
startKeyguard();
KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mUpdateCallback);
mDozeServiceHost = new DozeServiceHost();
putComponent(DozeHost.class, mDozeServiceHost);
putComponent(PhoneStatusBar.class, this);
setControllerUsers();
notifyUserAboutHiddenNotifications();
mScreenPinningRequest = new ScreenPinningRequest(mContext);
mFalsingManager = FalsingManager.getInstance(mContext);
mContext.getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.SCREENSHOT_BUTTON_SHOW), true,
screenshotShowObserver);
}
修改为以下内容:
public void start() {
mDisplay = ((WindowManager)mContext.getSystemService(Context.WINDOW_SERVICE))
.getDefaultDisplay();
updateDisplaySize();
mScrimSrcModeEnabled = mContext.getResources().getBoolean(
R.bool.config_status_bar_scrim_behind_use_src);
super.start(); // calls createAndAddWindows()
mMediaSessionManager
= (MediaSessionManager) mContext.getSystemService(Context.MEDIA_SESSION_SERVICE);
// TODO: use MediaSessionManager.SessionListener to hook us up to future updates
// in session state
addNavigationBar();
boolean hidden = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.HIDE_STATUSBAR_AND_NAVIBAR, 0) == 1;
if (hidden) {
hideStatusBarNaviBar();
} else {
showStatusBarNaviBar();
}
// Lastly, call to the icon policy to install/update all the icons.
mIconPolicy = new PhoneStatusBarPolicy(mContext, mIconController, mCastController,
mHotspotController, mUserInfoController, mBluetoothController,
mRotationLockController, mNetworkController.getDataSaverController());
mIconPolicy.setCurrentUserSetup(mUserSetup);
mSettingsObserver.onChange(false); // set up
mHeadsUpObserver.onChange(true); // set up
if (ENABLE_HEADS_UP) {
mContext.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(Settings.Global.HEADS_UP_NOTIFICATIONS_ENABLED), true,
mHeadsUpObserver);
mContext.getContentResolver().registerContentObserver(
Settings.Global.getUriFor(SETTING_HEADS_UP_TICKER), true,
mHeadsUpObserver);
}
mUnlockMethodCache = UnlockMethodCache.getInstance(mContext);
mUnlockMethodCache.addListener(this);
startKeyguard();
KeyguardUpdateMonitor.getInstance(mContext).registerCallback(mUpdateCallback);
mDozeServiceHost = new DozeServiceHost();
putComponent(DozeHost.class, mDozeServiceHost);
putComponent(PhoneStatusBar.class, this);
setControllerUsers();
notifyUserAboutHiddenNotifications();
mScreenPinningRequest = new ScreenPinningRequest(mContext);
mFalsingManager = FalsingManager.getInstance(mContext);
mContext.getContentResolver().registerContentObserver(
Settings.System.getUriFor(Settings.System.SCREENSHOT_BUTTON_SHOW), true,
screenshotShowObserver);
}
再找到以下内容:
mStatusBarView = (PhoneStatusBarView) mStatusBarWindow.findViewById(R.id.status_bar);
mStatusBarView.setBar(this);
mStatusBarView.setPanel(mNotificationPanel);
修改为以下内容:
mStatusBarView = (PhoneStatusBarView) mStatusBarWindow.findViewById(R.id.status_bar);
mStatusBarView.setBar(this);
mStatusBarView.setPanel(mNotificationPanel);
boolean hidden = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.HIDE_STATUSBAR_AND_NAVIBAR, 0) == 1;
if (hidden) {
mStatusBarView.setVisibility(View.GONE);
} else {
mStatusBarView.setVisibility(View.VISIBLE);
}
再找到以下内容:
public int getStatusBarHeight() {
if (mNaturalBarHeight < 0) {
final Resources res = mContext.getResources();
mNaturalBarHeight =
res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height);
}
return mNaturalBarHeight;
}
修改为以下内容:
public int getStatusBarHeight() {
if (mNaturalBarHeight < 0) {
final Resources res = mContext.getResources();
mNaturalBarHeight =
res.getDimensionPixelSize(com.android.internal.R.dimen.status_bar_height);
}
boolean hidden = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.HIDE_STATUSBAR_AND_NAVIBAR, 0) == 1;
if (hidden) {
mNaturalBarHeight = 0;
}
return mNaturalBarHeight;
}
再找到以下内容:
protected void loadDimens() {
final Resources res = mContext.getResources();
int oldBarHeight = mNaturalBarHeight;
mNaturalBarHeight = res.getDimensionPixelSize(
com.android.internal.R.dimen.status_bar_height);
if (mStatusBarWindowManager != null && mNaturalBarHeight != oldBarHeight) {
mStatusBarWindowManager.setBarHeight(mNaturalBarHeight);
}
mMaxAllowedKeyguardNotifications = res.getInteger(
R.integer.keyguard_max_notification_count);
if (DEBUG) Log.v(TAG, "defineSlots");
}
修改为以下内容:
protected void loadDimens() {
final Resources res = mContext.getResources();
int oldBarHeight = mNaturalBarHeight;
mNaturalBarHeight = res.getDimensionPixelSize(
com.android.internal.R.dimen.status_bar_height);
boolean hidden = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.HIDE_STATUSBAR_AND_NAVIBAR, 0) == 1;
if (hidden) {
mNaturalBarHeight = 0;
}
if (mStatusBarWindowManager != null && mNaturalBarHeight != oldBarHeight) {
mStatusBarWindowManager.setBarHeight(mNaturalBarHeight);
}
mMaxAllowedKeyguardNotifications = res.getInteger(
R.integer.keyguard_max_notification_count);
if (DEBUG) Log.v(TAG, "defineSlots");
}
再找到以下内容:
IntentFilter filter = new IntentFilter();
filter.addAction(Intent.ACTION_CLOSE_SYSTEM_DIALOGS);
filter.addAction(Intent.ACTION_SCREEN_OFF);
filter.addAction(Intent.ACTION_SCREEN_ON);
filter.addAction(DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG);
后面新增以下内容:
filter.addAction(HIDE_STATUSBAR_NAVIBAR);
filter.addAction(SHOW_STATUSBAR_NAVIBAR);
再找到以下内容:
protected void addNavigationBar() {
if (DEBUG) Log.v(TAG, "addNavigationBar: about to add " + mNavigationBarView);
if (mNavigationBarView == null) return;
try {
WindowManagerGlobal.getWindowManagerService()
.watchRotation(new IRotationWatcher.Stub() {
@Override
public void onRotationChanged(int rotation) throws RemoteException {
// We need this to be scheduled as early as possible to beat the redrawing of
// window in response to the orientation change.
Message msg = Message.obtain(mHandler, () -> {
if (mNavigationBarView != null
&& mNavigationBarView.needsReorient(rotation)) {
repositionNavigationBar();
}
});
msg.setAsynchronous(true);
mHandler.sendMessageAtFrontOfQueue(msg);
}
});
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
prepareNavigationBarView();
mWindowManager.addView(mNavigationBarView, getNavigationBarLayoutParams());
}
后面新增以下内容:
public void showStatusBarNaviBar(){
if (mStatusBarView != null) {
mStatusBarView.setVisibility(View.VISIBLE);
}
if (mNavigationBarView == null) {
mNavigationBarView =(NavigationBarView) View.inflate(mContext, R.layout.navigation_bar, null);
prepareNavigationBarView();
if (mNavigationBarView == null) return;
prepareNavigationBarView();
if(mNavigationBarView != null && mNavigationBarView.getParent() == null) {
mWindowManager.addView(mNavigationBarView, getNavigationBarLayoutParams());
}
mNavigationBarView.setBackgroundColor(Color.TRANSPARENT);
}
}
public void hideStatusBarNaviBar(){
if (mStatusBarView != null) {
mStatusBarView.setVisibility(View.GONE);
}
if (mNavigationBarView != null) {
mWindowManager.removeView(mNavigationBarView);
mNavigationBarView = null;
}
}
再找到以下内容:
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (DEBUG) Log.v(TAG, "onReceive: " + intent);
String action = intent.getAction();
if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
KeyboardShortcuts.dismiss();
if (mRemoteInputController != null) {
mRemoteInputController.closeRemoteInputs();
}
if (isCurrentProfile(getSendingUserId())) {
int flags = CommandQueue.FLAG_EXCLUDE_NONE;
String reason = intent.getStringExtra("reason");
if (reason != null && reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
flags |= CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL;
}
animateCollapsePanels(flags);
}
}
else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
notifyNavigationBarScreenOn(false);
notifyHeadsUpScreenOff();
finishBarAnimations();
resetUserExpandedStates();
}
else if (Intent.ACTION_SCREEN_ON.equals(action)) {
notifyNavigationBarScreenOn(true);
}
else if (DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG.equals(action)) {
mQSPanel.showDeviceMonitoringDialog();
}
}
};
修改为以下内容:
private BroadcastReceiver mBroadcastReceiver = new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
if (DEBUG) Log.v(TAG, "onReceive: " + intent);
String action = intent.getAction();
if (Intent.ACTION_CLOSE_SYSTEM_DIALOGS.equals(action)) {
KeyboardShortcuts.dismiss();
if (mRemoteInputController != null) {
mRemoteInputController.closeRemoteInputs();
}
if (isCurrentProfile(getSendingUserId())) {
int flags = CommandQueue.FLAG_EXCLUDE_NONE;
String reason = intent.getStringExtra("reason");
if (reason != null && reason.equals(SYSTEM_DIALOG_REASON_RECENT_APPS)) {
flags |= CommandQueue.FLAG_EXCLUDE_RECENTS_PANEL;
}
animateCollapsePanels(flags);
}
}
else if (Intent.ACTION_SCREEN_OFF.equals(action)) {
notifyNavigationBarScreenOn(false);
notifyHeadsUpScreenOff();
finishBarAnimations();
resetUserExpandedStates();
}
else if (Intent.ACTION_SCREEN_ON.equals(action)) {
notifyNavigationBarScreenOn(true);
}
else if (DevicePolicyManager.ACTION_SHOW_DEVICE_MONITORING_DIALOG.equals(action)) {
mQSPanel.showDeviceMonitoringDialog();
} else if(HIDE_STATUSBAR_NAVIBAR.equals(action)){
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.HIDE_STATUSBAR_AND_NAVIBAR, 1);
hideStatusBarNaviBar();
} else if(SHOW_STATUSBAR_NAVIBAR.equals(action)){
Settings.Global.putInt(mContext.getContentResolver(), Settings.Global.HIDE_STATUSBAR_AND_NAVIBAR, 0);
showStatusBarNaviBar();
}
}
};
2、文件WindowManagerService.java
位置:\192.168.1.136\android\rk3288_712\frameworks\base\services\core\java\com\android\server\wm\WindowManagerService.java
找到以下内容:
public boolean hasNavigationBar() {
return mPolicy.hasNavigationBar();
}
修改为以下内容:
public boolean hasNavigationBar() {
boolean hidden = Settings.Global.getInt(mContext.getContentResolver(), Settings.Global.HIDE_STATUSBAR_AND_NAVIBAR, 0) == 1;
if (hidden) {
return false;
}
return mPolicy.hasNavigationBar();
}
3、文件Settings.java
位置:\192.168.1.136\android\rk3288_712\frameworks\base\core\java\android\provider\Settings.java
找到以下内容:
/**
* Whether assisted GPS should be enabled or not.
* @hide
/
public static final String ASSISTED_GPS_ENABLED = "assisted_gps_enabled";
后面新增以下内容:
/*
* Whether to hide statusBar and NavigationBar.
* (0 = false, 1 = true)
* @hide
*/
public static final String HIDE_STATUSBAR_AND_NAVIBAR =
"hide_statusbar_and_navibar";
找到以下内容:
MOVED_TO_GLOBAL = new HashSet<String>();
MOVED_TO_GLOBAL.add(Settings.Global.ADB_ENABLED);
MOVED_TO_GLOBAL.add(Settings.Global.ASSISTED_GPS_ENABLED);
后面新增以下内容:
MOVED_TO_GLOBAL.add(Settings.Global.HIDE_STATUSBAR_AND_NAVIBAR);
4、文件DatabaseHelper.java
位置:\192.168.1.136\android\rk3288_712\frameworks\base\packages\SettingsProvider\src\com\android\providers\settings\DatabaseHelper.java
找到以下内容:
private void loadGlobalSettings(SQLiteDatabase db) {
......
loadIntegerSetting(stmt, Settings.Global.WIFI_SLEEP_POLICY,
R.integer.def_wifi_sleep_policy);
后面新增以下内容:
loadIntegerSetting(stmt, Settings.Global.HIDE_STATUSBAR_AND_NAVIBAR,
R.integer.hide_statusbar_and_navibar);
5、文件defaults.xml
位置:\192.168.1.136\android\rk3288_712\frameworks\base\packages\SettingsProvider\res\values\defaults.xml
找到以下内容:
<bool name="def_wifi_on">false</bool>
<integer name="def_wifi_sleep_policy">2</integer>
<bool name="def_networks_available_notification_on">true</bool>
后面新增以下内容:
<integer name="hide_statusbar_and_navibar">1</integer>
6、文件display_settings.xml
位置:\192.168.1.136\android\rk3288_712\packages\apps\Settings\res\xml\display_settings.xml
找到以下内容:
<PreferenceScreen
android:key="hdmi_settings"
android:title="@string/screen_iface_hdmi_title"
settings:keywords="@string/hdmi_settings"
android:fragment="com.android.settings.HdmiSettings" />
后面新增以下内容:
<SwitchPreference
android:key="hide_statusbar_navibar_settings"
android:title="@string/hide_statusbar_navibar_settings_title"
android:summary="@string/hide_statusbar_navibar_settings_summary" />
7、文件values\strings.xml
位置:\192.168.1.136\android\rk3288_712\packages\apps\Settings\res\values\strings.xml
找到以下内容:
<string name="color_temperature_mode_desc">Color temperature mode</string>
<string name="select_color_temperature_dialog_title">Select Color temperature </string>
后面新增以下内容:
<string name="hide_statusbar_navibar_settings_title">Hide statusbar and navigationBar</string>
<string name="hide_statusbar_navibar_settings_summary">Hide or show statusbar and navigationBar.</string>
8、文件values-zh-rCN\strings.xml
位置:\192.168.1.136\android\rk3288_712\packages\apps\Settings\res\values-zh-rCN\strings.xml
找到以下内容:
<string name="color_temperature_mode_desc">色温调节</string>
<string name="select_color_temperature_dialog_title">选择色温模式 </string>
后面新增以下内容:
<string name="hide_statusbar_navibar_settings_title">隐藏状态栏和导航栏</string>
<string name="hide_statusbar_navibar_settings_summary">隐藏或者显示状态栏和导航栏</string>
9、文件DisplaySettings.java
位置:\192.168.1.136\android\rk3288_712\packages\apps\Settings\src\com\android\settings\DisplaySettings.java
找到以下内容:
import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE;
import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_AUTOMATIC;
import static android.provider.Settings.System.SCREEN_BRIGHTNESS_MODE_MANUAL;
import static android.provider.Settings.System.SCREEN_OFF_TIMEOUT;
后面新增以下内容:
import static android.provider.Settings.Global.HIDE_STATUSBAR_AND_NAVIBAR;
再找到以下内容:
private static final String KEY_WALLPAPER = "wallpaper";
private static final String KEY_VR_DISPLAY_PREF = "vr_display_pref";
private static final String KEY_HDMI_SETTINGS = "hdmi_settings";
后面新增以下内容:
private static final String KEY_HIDE_STATUSBAR_NAVIBAR_SETTINGS = "hide_statusbar_navibar_settings";
再找到以下内容:
private SwitchPreference mTapToWakePreference;
private SwitchPreference mAutoBrightnessPreference;
private SwitchPreference mCameraGesturePreference;
private Preference mHDMIPreference;
后面新增以下内容:
private SwitchPreference mHideStatusbarNaviBarPreference;
再找到以下内容:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mProduct = SystemProperties.get("ro.target.product");
String supportHDMI = SystemProperties.get("ro.rk.hdmi_enable", "false");
final Activity activity = getActivity();
final ContentResolver resolver = activity.getContentResolver();
addPreferencesFromResource(R.xml.display_settings);
mHDMIPreference = findPreference(KEY_HDMI_SETTINGS);
if(!"tablet".equals(mProduct) || !"true".equals(supportHDMI)){
getPreferenceScreen().removePreference(mHDMIPreference);
}
mScreenSaverPreference = findPreference(KEY_SCREEN_SAVER);
if (mScreenSaverPreference != null
&& getResources().getBoolean(
com.android.internal.R.bool.config_dreamsSupported) == false) {
getPreferenceScreen().removePreference(mScreenSaverPreference);
}
mScreenTimeoutPreference = (TimeoutListPreference) findPreference(KEY_SCREEN_TIMEOUT);
mFontSizePref = findPreference(KEY_FONT_SIZE);
if (isAutomaticBrightnessAvailable(getResources())) {
mAutoBrightnessPreference = (SwitchPreference) findPreference(KEY_AUTO_BRIGHTNESS);
mAutoBrightnessPreference.setOnPreferenceChangeListener(this);
} else {
removePreference(KEY_AUTO_BRIGHTNESS);
}
if (!NightDisplayController.isAvailable(activity)) {
removePreference(KEY_NIGHT_DISPLAY);
}
if (isLiftToWakeAvailable(activity)) {
mLiftToWakePreference = (SwitchPreference) findPreference(KEY_LIFT_TO_WAKE);
mLiftToWakePreference.setOnPreferenceChangeListener(this);
} else {
removePreference(KEY_LIFT_TO_WAKE);
}
if (isDozeAvailable(activity)) {
mDozePreference = (SwitchPreference) findPreference(KEY_DOZE);
mDozePreference.setOnPreferenceChangeListener(this);
} else {
removePreference(KEY_DOZE);
}
if (isTapToWakeAvailable(getResources())) {
mTapToWakePreference = (SwitchPreference) findPreference(KEY_TAP_TO_WAKE);
mTapToWakePreference.setOnPreferenceChangeListener(this);
} else {
removePreference(KEY_TAP_TO_WAKE);
}
if (isCameraGestureAvailable(getResources())) {
mCameraGesturePreference = (SwitchPreference) findPreference(KEY_CAMERA_GESTURE);
mCameraGesturePreference.setOnPreferenceChangeListener(this);
} else {
removePreference(KEY_CAMERA_GESTURE);
}
if (RotationPolicy.isRotationLockToggleVisible(activity)) {
DropDownPreference rotatePreference =
(DropDownPreference) findPreference(KEY_AUTO_ROTATE);
int rotateLockedResourceId;
// The following block sets the string used when rotation is locked.
// If the device locks specifically to portrait or landscape (rather than current
// rotation), then we use a different string to include this information.
if (allowAllRotations(activity)) {
rotateLockedResourceId = R.string.display_auto_rotate_stay_in_current;
} else {
if (RotationPolicy.getRotationLockOrientation(activity)
== Configuration.ORIENTATION_PORTRAIT) {
rotateLockedResourceId =
R.string.display_auto_rotate_stay_in_portrait;
} else {
rotateLockedResourceId =
R.string.display_auto_rotate_stay_in_landscape;
}
}
rotatePreference.setEntries(new CharSequence[] {
activity.getString(R.string.display_auto_rotate_rotate),
activity.getString(rotateLockedResourceId),
});
rotatePreference.setEntryValues(new CharSequence[] { "0", "1" });
rotatePreference.setValueIndex(RotationPolicy.isRotationLocked(activity) ?
1 : 0);
rotatePreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
final boolean locked = Integer.parseInt((String) newValue) != 0;
MetricsLogger.action(getActivity(), MetricsEvent.ACTION_ROTATION_LOCK,
locked);
RotationPolicy.setRotationLock(activity, locked);
return true;
}
});
} else {
removePreference(KEY_AUTO_ROTATE);
}
if (isVrDisplayModeAvailable(activity)) {
DropDownPreference vrDisplayPref =
(DropDownPreference) findPreference(KEY_VR_DISPLAY_PREF);
vrDisplayPref.setEntries(new CharSequence[] {
activity.getString(R.string.display_vr_pref_low_persistence),
activity.getString(R.string.display_vr_pref_off),
});
vrDisplayPref.setEntryValues(new CharSequence[] { "0", "1" });
final Context c = activity;
int currentUser = ActivityManager.getCurrentUser();
int current = Settings.Secure.getIntForUser(c.getContentResolver(),
Settings.Secure.VR_DISPLAY_MODE,
/*default*/Settings.Secure.VR_DISPLAY_MODE_LOW_PERSISTENCE,
currentUser);
vrDisplayPref.setValueIndex(current);
vrDisplayPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
int i = Integer.parseInt((String) newValue);
int u = ActivityManager.getCurrentUser();
if (!Settings.Secure.putIntForUser(c.getContentResolver(),
Settings.Secure.VR_DISPLAY_MODE,
i, u)) {
Log.e(TAG, "Could not change setting for " +
Settings.Secure.VR_DISPLAY_MODE);
}
return true;
}
});
} else {
removePreference(KEY_VR_DISPLAY_PREF);
}
mNightModePreference = (ListPreference) findPreference(KEY_NIGHT_MODE);
if (mNightModePreference != null) {
final UiModeManager uiManager = (UiModeManager) getSystemService(
Context.UI_MODE_SERVICE);
final int currentNightMode = uiManager.getNightMode();
mNightModePreference.setValue(String.valueOf(currentNightMode));
mNightModePreference.setOnPreferenceChangeListener(this);
}
}
修改为以下内容:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mProduct = SystemProperties.get("ro.target.product");
String supportHDMI = SystemProperties.get("ro.rk.hdmi_enable", "false");
final Activity activity = getActivity();
final ContentResolver resolver = activity.getContentResolver();
addPreferencesFromResource(R.xml.display_settings);
mHDMIPreference = findPreference(KEY_HDMI_SETTINGS);
if(!"tablet".equals(mProduct) || !"true".equals(supportHDMI)){
getPreferenceScreen().removePreference(mHDMIPreference);
}
mScreenSaverPreference = findPreference(KEY_SCREEN_SAVER);
if (mScreenSaverPreference != null
&& getResources().getBoolean(
com.android.internal.R.bool.config_dreamsSupported) == false) {
getPreferenceScreen().removePreference(mScreenSaverPreference);
}
mScreenTimeoutPreference = (TimeoutListPreference) findPreference(KEY_SCREEN_TIMEOUT);
mFontSizePref = findPreference(KEY_FONT_SIZE);
if (isAutomaticBrightnessAvailable(getResources())) {
mAutoBrightnessPreference = (SwitchPreference) findPreference(KEY_AUTO_BRIGHTNESS);
mAutoBrightnessPreference.setOnPreferenceChangeListener(this);
} else {
removePreference(KEY_AUTO_BRIGHTNESS);
}
mHideStatusbarNaviBarPreference = (SwitchPreference) findPreference(KEY_HIDE_STATUSBAR_NAVIBAR_SETTINGS);
mHideStatusbarNaviBarPreference.setOnPreferenceChangeListener(this);
if (!NightDisplayController.isAvailable(activity)) {
removePreference(KEY_NIGHT_DISPLAY);
}
if (isLiftToWakeAvailable(activity)) {
mLiftToWakePreference = (SwitchPreference) findPreference(KEY_LIFT_TO_WAKE);
mLiftToWakePreference.setOnPreferenceChangeListener(this);
} else {
removePreference(KEY_LIFT_TO_WAKE);
}
if (isDozeAvailable(activity)) {
mDozePreference = (SwitchPreference) findPreference(KEY_DOZE);
mDozePreference.setOnPreferenceChangeListener(this);
} else {
removePreference(KEY_DOZE);
}
if (isTapToWakeAvailable(getResources())) {
mTapToWakePreference = (SwitchPreference) findPreference(KEY_TAP_TO_WAKE);
mTapToWakePreference.setOnPreferenceChangeListener(this);
} else {
removePreference(KEY_TAP_TO_WAKE);
}
if (isCameraGestureAvailable(getResources())) {
mCameraGesturePreference = (SwitchPreference) findPreference(KEY_CAMERA_GESTURE);
mCameraGesturePreference.setOnPreferenceChangeListener(this);
} else {
removePreference(KEY_CAMERA_GESTURE);
}
if (RotationPolicy.isRotationLockToggleVisible(activity)) {
DropDownPreference rotatePreference =
(DropDownPreference) findPreference(KEY_AUTO_ROTATE);
int rotateLockedResourceId;
// The following block sets the string used when rotation is locked.
// If the device locks specifically to portrait or landscape (rather than current
// rotation), then we use a different string to include this information.
if (allowAllRotations(activity)) {
rotateLockedResourceId = R.string.display_auto_rotate_stay_in_current;
} else {
if (RotationPolicy.getRotationLockOrientation(activity)
== Configuration.ORIENTATION_PORTRAIT) {
rotateLockedResourceId =
R.string.display_auto_rotate_stay_in_portrait;
} else {
rotateLockedResourceId =
R.string.display_auto_rotate_stay_in_landscape;
}
}
rotatePreference.setEntries(new CharSequence[] {
activity.getString(R.string.display_auto_rotate_rotate),
activity.getString(rotateLockedResourceId),
});
rotatePreference.setEntryValues(new CharSequence[] { "0", "1" });
rotatePreference.setValueIndex(RotationPolicy.isRotationLocked(activity) ?
1 : 0);
rotatePreference.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
final boolean locked = Integer.parseInt((String) newValue) != 0;
MetricsLogger.action(getActivity(), MetricsEvent.ACTION_ROTATION_LOCK,
locked);
RotationPolicy.setRotationLock(activity, locked);
return true;
}
});
} else {
removePreference(KEY_AUTO_ROTATE);
}
if (isVrDisplayModeAvailable(activity)) {
DropDownPreference vrDisplayPref =
(DropDownPreference) findPreference(KEY_VR_DISPLAY_PREF);
vrDisplayPref.setEntries(new CharSequence[] {
activity.getString(R.string.display_vr_pref_low_persistence),
activity.getString(R.string.display_vr_pref_off),
});
vrDisplayPref.setEntryValues(new CharSequence[] { "0", "1" });
final Context c = activity;
int currentUser = ActivityManager.getCurrentUser();
int current = Settings.Secure.getIntForUser(c.getContentResolver(),
Settings.Secure.VR_DISPLAY_MODE,
/*default*/Settings.Secure.VR_DISPLAY_MODE_LOW_PERSISTENCE,
currentUser);
vrDisplayPref.setValueIndex(current);
vrDisplayPref.setOnPreferenceChangeListener(new OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
int i = Integer.parseInt((String) newValue);
int u = ActivityManager.getCurrentUser();
if (!Settings.Secure.putIntForUser(c.getContentResolver(),
Settings.Secure.VR_DISPLAY_MODE,
i, u)) {
Log.e(TAG, "Could not change setting for " +
Settings.Secure.VR_DISPLAY_MODE);
}
return true;
}
});
} else {
removePreference(KEY_VR_DISPLAY_PREF);
}
mNightModePreference = (ListPreference) findPreference(KEY_NIGHT_MODE);
if (mNightModePreference != null) {
final UiModeManager uiManager = (UiModeManager) getSystemService(
Context.UI_MODE_SERVICE);
final int currentNightMode = uiManager.getNightMode();
mNightModePreference.setValue(String.valueOf(currentNightMode));
mNightModePreference.setOnPreferenceChangeListener(this);
}
}
再找到以下内容:
public boolean onPreferenceChange(Preference preference, Object objValue) {
final String key = preference.getKey();
if (KEY_SCREEN_TIMEOUT.equals(key)) {
try {
int value = Integer.parseInt((String) objValue);
if (value == 0) {
value = Integer.MAX_VALUE;
}
Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, value);
updateTimeoutPreferenceDescription(value);
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist screen timeout setting", e);
}
}
if (preference == mAutoBrightnessPreference) {
boolean auto = (Boolean) objValue;
Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE,
auto ? SCREEN_BRIGHTNESS_MODE_AUTOMATIC : SCREEN_BRIGHTNESS_MODE_MANUAL);
}
if (preference == mLiftToWakePreference) {
boolean value = (Boolean) objValue;
Settings.Secure.putInt(getContentResolver(), WAKE_GESTURE_ENABLED, value ? 1 : 0);
}
if (preference == mDozePreference) {
boolean value = (Boolean) objValue;
Settings.Secure.putInt(getContentResolver(), DOZE_ENABLED, value ? 1 : 0);
}
if (preference == mTapToWakePreference) {
boolean value = (Boolean) objValue;
Settings.Secure.putInt(getContentResolver(), DOUBLE_TAP_TO_WAKE, value ? 1 : 0);
}
if (preference == mCameraGesturePreference) {
boolean value = (Boolean) objValue;
Settings.Secure.putInt(getContentResolver(), CAMERA_GESTURE_DISABLED,
value ? 0 : 1 /* Backwards because setting is for disabling */);
}
if (preference == mNightModePreference) {
try {
final int value = Integer.parseInt((String) objValue);
final UiModeManager uiManager = (UiModeManager) getSystemService(
Context.UI_MODE_SERVICE);
uiManager.setNightMode(value);
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist night mode setting", e);
}
}
return true;
}
修改为以下内容:
public boolean onPreferenceChange(Preference preference, Object objValue) {
final String key = preference.getKey();
if (KEY_SCREEN_TIMEOUT.equals(key)) {
try {
int value = Integer.parseInt((String) objValue);
if (value == 0) {
value = Integer.MAX_VALUE;
}
Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, value);
updateTimeoutPreferenceDescription(value);
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist screen timeout setting", e);
}
}
if (preference == mAutoBrightnessPreference) {
boolean auto = (Boolean) objValue;
Settings.System.putInt(getContentResolver(), SCREEN_BRIGHTNESS_MODE,
auto ? SCREEN_BRIGHTNESS_MODE_AUTOMATIC : SCREEN_BRIGHTNESS_MODE_MANUAL);
}
if (preference == mLiftToWakePreference) {
boolean value = (Boolean) objValue;
Settings.Secure.putInt(getContentResolver(), WAKE_GESTURE_ENABLED, value ? 1 : 0);
}
if (preference == mDozePreference) {
boolean value = (Boolean) objValue;
Settings.Secure.putInt(getContentResolver(), DOZE_ENABLED, value ? 1 : 0);
}
if (preference == mTapToWakePreference) {
boolean value = (Boolean) objValue;
Settings.Secure.putInt(getContentResolver(), DOUBLE_TAP_TO_WAKE, value ? 1 : 0);
}
if (preference == mCameraGesturePreference) {
boolean value = (Boolean) objValue;
Settings.Secure.putInt(getContentResolver(), CAMERA_GESTURE_DISABLED,
value ? 0 : 1 /* Backwards because setting is for disabling */);
}
if (preference == mHideStatusbarNaviBarPreference) {
boolean value = (Boolean) objValue;
Settings.Global.putInt(getContentResolver(), HIDE_STATUSBAR_AND_NAVIBAR, value ? 1 : 0);
Intent intent = new Intent();
if (value) {
intent.setAction("android.intent.action.HIDE_STATUSBAR_NAVIBAR");
} else {
intent.setAction("android.intent.action.SHOW_STATUSBAR_NAVIBAR");
}
getActivity().sendBroadcast(intent);
}
if (preference == mNightModePreference) {
try {
final int value = Integer.parseInt((String) objValue);
final UiModeManager uiManager = (UiModeManager) getSystemService(
Context.UI_MODE_SERVICE);
uiManager.setNightMode(value);
} catch (NumberFormatException e) {
Log.e(TAG, "could not persist night mode setting", e);
}
}
return true;
}
再找到以下内容:
private void updateState() {
updateFontSizeSummary();
updateScreenSaverSummary();
// Update auto brightness if it is available.
if (mAutoBrightnessPreference != null) {
int brightnessMode = Settings.System.getInt(getContentResolver(),
SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL);
mAutoBrightnessPreference.setChecked(brightnessMode != SCREEN_BRIGHTNESS_MODE_MANUAL);
}
// Update lift-to-wake if it is available.
if (mLiftToWakePreference != null) {
int value = Settings.Secure.getInt(getContentResolver(), WAKE_GESTURE_ENABLED, 0);
mLiftToWakePreference.setChecked(value != 0);
}
// Update tap to wake if it is available.
if (mTapToWakePreference != null) {
int value = Settings.Secure.getInt(getContentResolver(), DOUBLE_TAP_TO_WAKE, 0);
mTapToWakePreference.setChecked(value != 0);
}
// Update doze if it is available.
if (mDozePreference != null) {
int value = Settings.Secure.getInt(getContentResolver(), DOZE_ENABLED, 1);
mDozePreference.setChecked(value != 0);
}
// Update camera gesture #1 if it is available.
if (mCameraGesturePreference != null) {
int value = Settings.Secure.getInt(getContentResolver(), CAMERA_GESTURE_DISABLED, 0);
mCameraGesturePreference.setChecked(value == 0);
}
}
修改为以下内容:
private void updateState() {
updateFontSizeSummary();
updateScreenSaverSummary();
// Update auto brightness if it is available.
if (mAutoBrightnessPreference != null) {
int brightnessMode = Settings.System.getInt(getContentResolver(),
SCREEN_BRIGHTNESS_MODE, SCREEN_BRIGHTNESS_MODE_MANUAL);
mAutoBrightnessPreference.setChecked(brightnessMode != SCREEN_BRIGHTNESS_MODE_MANUAL);
}
// Update lift-to-wake if it is available.
if (mLiftToWakePreference != null) {
int value = Settings.Secure.getInt(getContentResolver(), WAKE_GESTURE_ENABLED, 0);
mLiftToWakePreference.setChecked(value != 0);
}
// Update tap to wake if it is available.
if (mTapToWakePreference != null) {
int value = Settings.Secure.getInt(getContentResolver(), DOUBLE_TAP_TO_WAKE, 0);
mTapToWakePreference.setChecked(value != 0);
}
// Update doze if it is available.
if (mDozePreference != null) {
int value = Settings.Secure.getInt(getContentResolver(), DOZE_ENABLED, 1);
mDozePreference.setChecked(value != 0);
}
// Update camera gesture #1 if it is available.
if (mCameraGesturePreference != null) {
int value = Settings.Secure.getInt(getContentResolver(), CAMERA_GESTURE_DISABLED, 0);
mCameraGesturePreference.setChecked(value == 0);
}
if (mHideStatusbarNaviBarPreference != null) {
int value = Settings.Global.getInt(getContentResolver(), HIDE_STATUSBAR_AND_NAVIBAR, 0);
mHideStatusbarNaviBarPreference.setChecked(value == 1);
}
}
二、系统编译
source build/envsetup.sh
make -j8 2>&1 | tee build_rk3288-evb-android.log
$ ./mkimage.sh
隐藏导航栏:adb shell am broadcast -a android.intent.action.HIDE_STATUSBAR_NAVIBAR
显示导航栏:adb shell am broadcast -a android.intent.action.SHOW_STATUSBAR_NAVIBAR
网友评论