作者其他文章
- AOSP | Android 9 控制导航栏的隐藏与显示
- AOSP | Android 11 Settings 开发(01) 环境搭建
- AOSP | Android 11 Framework 修改记录(持续更新)
- AOSP | Android 9 APP源码移植到系统源码中进行编译
- AOSP | Android 9 由壁纸切换带来的手机主题变更及问题出现)
- AOSP | Android 9 过滤Recents
- 后端 | 沙箱环境下实现支付宝网站支付
- 前端 | vue-echarts渲染时视图模糊的解决办法
1、锁屏界面不显示通知
packages/apps/Settings/res/xml/security_dashboard_settings.xml
- <Preference
+ <!-- Do not show notifications when lock screen -->
+ <!--<Preference
android:key="lockscreen_preferences"
android:title="@string/lockscreen_settings_title"
android:summary="@string/summary_placeholder"
- android:fragment="com.android.settings.security.LockscreenDashboardFragment" />
+ android:fragment="com.android.settings.security.LockscreenDashboardFragment" />-->
packages/apps/Settings/src/com/android/Settings/security/SecuritySettings.java
- securityPreferenceControllers.add(new LockScreenPreferenceController(context, lifecycle));
+ /// M: Do not show notifications when lock screen @{
+ //securityPreferenceControllers.add(new LockScreenPreferenceController(context, lifecycle));
+ /// }
packages/apps/Settings/src/com/android/settings/security/screenlock/LockScreenPreferenceController.java
public void displayPreference(PreferenceScreen screen) {
super.displayPreference(screen);
- mPreference = screen.findPreference(getPreferenceKey());
+ /// M: Do not show notifications when lock screen @{
+ //mPreference = screen.findPreference(getPreferenceKey());
+ /// }
}
public void onResume() {
- mPreference.setVisible(isAvailable());
+ /// M: Do not show notifications when lock screen @{
+ //mPreference.setVisible(isAvailable());
+ /// }
}
packages/apps/SettingsProvider/res/values/defaults.xml
<!-- Default for Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS, 1==on -->
- <integer name="def_lock_screen_show_notifications">1</integer>
+ <!-- M: Do not show notifications when lock screen
+ <integer name="def_lock_screen_show_notifications">1</integer>
+ -->
+ <integer name="def_lock_screen_show_notifications">0</integer>
packages/apps/SystemUI/src/com/android/systemui/statusbar/NotificationLockscreenUserManager.java
protected void updateLockscreenNotificationSetting() {
- final boolean show = Settings.Secure.getIntForUser(mContext.getContentResolver(),
+ /// M: Do not show notifications when lock screen @{
+ final boolean show = false;
+ /*Settings.Secure.getIntForUser(mContext.getContentResolver(),
Settings.Secure.LOCK_SCREEN_SHOW_NOTIFICATIONS,
1,
- mCurrentUserId) != 0;
+ mCurrentUserId) != 0;*/
+ /// }
if (mUsersAllowingPrivateNotifications.indexOfKey(userHandle) < 0) {
- final boolean allowedByUser = 0 != Settings.Secure.getIntForUser(
+ /// M: Do not show notifications when lock screen @{
+ final boolean allowedByUser = false;
+ /*0 != Settings.Secure.getIntForUser(
mContext.getContentResolver(),
- Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0, userHandle);
+ Settings.Secure.LOCK_SCREEN_ALLOW_PRIVATE_NOTIFICATIONS, 0, userHandle);*/
+ /// }
2、设置默认桌面
frameworks/base/services/core/java/com/android/server/am/ActivityManagerService.java
if ("android".equals(info.activityInfo.packageName)){
ComponentName DefaultLauncher=new ComponentName("com.newlauncher","com.newlauncher.MainActivity");
3、开机动画与壁纸
device/mediateksample/tb8788p1_64_bsp/media/bootanimation.zip
frameworks/base/core/res/res/drawable-nodpi/default_wallpaper.png
4、Activity切换时隐藏壁纸动画
frameworks/base/core/res/res/anim/task_open_exit.xml
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:shareInterpolator="false"
android:zAdjustment="top"
- android:showWallpaper="true">
+ android:showWallpaper="false">
5、禁止自动翻转
frameworks/base/core/res/res/values/config.xml
- <bool name="config_supportAutoRotation">true</bool>
+ <bool name="config_supportAutoRotation">false</bool>
frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
if (preferredRotation >= 0) {
return preferredRotation;
}
- return Surface.ROTATION_0;
+ return Surface.ROTATION_270; //Keep Landscape;
}
6、拍照预览上下颠倒
packages/apps/Camera2/host/src/com/mediatek/camera/ui/preview/TextureViewController.java
+ private void changePreviewDisplayOrientation() {
+ int mTextureViewWidth = mTextureView.getWidth();
+ int mTextureViewHeight = mTextureView.getHeight();
+
+ int rotation = mApp.getActivity().getWindowManager().getDefaultDisplay().getRotation();
+
+ Matrix matrix = new Matrix();
+ RectF viewRect = new RectF(0, 0, mTextureViewWidth, mTextureViewHeight);
+ RectF bufferRect = new RectF(0, 0, mPreviewHeight, mPreviewWidth);
+ float centerX = viewRect.centerX();
+ float centerY = viewRect.centerY();
+ if (Surface.ROTATION_90 == rotation || Surface.ROTATION_270 == rotation) {
+ matrix.postRotate((90 * (rotation - 2)) % 360, centerX, centerY);
+ } else if (Surface.ROTATION_180 == rotation) {
+ matrix.postRotate(180, centerX, centerY);
+ }
+ mTextureView.setTransform(matrix);
+ }
@Override
public void onSurfaceTextureAvailable(SurfaceTexture surface, int width, int height) {
+ changePreviewDisplayOrientation();
mIsSurfaceCreated = true;
surface.setDefaultBufferSize(mPreviewWidth, mPreviewHeight);
7、去除沉浸式提示框
frameworks/base/services/core/java/com/android/server/policy/ImmersiveModeConfirmation.java
public void handleMessage(Message msg) {
switch(msg.what) {
case SHOW:
- handleShow();
+ //handleShow();
break;
case HIDE:
handleHide();
8、锁屏界面固定横屏
packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBarWindowManager.java
private void adjustScreenOrientation(State state) {
if (state.isKeyguardShowingAndNotOccluded() || state.dozing) {
+ /// M: forbid rotate and keep landscape when keyguard. @{
+ /*
if (mKeyguardScreenRotation) {
mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_USER;
} else {
mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_NOSENSOR;
}
+ */
+ mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE;
+ /// }
} else {
mLpChanged.screenOrientation = ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED;
}
9、下载文件打开异常
packages/apps/Browser/src/com/android/browser/DownloadHandler.java
Log.d(XLOGTAG, "Guess file name is: " + filename +
" mimetype is: " + mimetype);
}
+ /// M: fix incorrect mimetype @ {
+ if (filename != null && filename.endsWith(".apk") && mimetype.equals("application/octet-stream")) {
+ mimetype ="application/vnd.android.package-archive";
+ }
+ /// }
10、横竖屏切换重绘壁纸
frameworks/base/core/java/android/app/WallpaperManager.java
- if (returnDefault) {
+ /// M: forcibly redraw wallpaper while rotating @{
+ if (true/*returnDefault*/) {
Bitmap defaultWallpaper = mDefaultWallpaper;
- if (defaultWallpaper == null) {
+ if (true/*defaultWallpaper == null*/) {
+ /// }
……
whichProp = PROP_WALLPAPER;
- defaultResId = com.android.internal.R.drawable.default_wallpaper;
+ /// M: forcibly redraw wallpaper while rotating @{
+ int angle = ((WindowManager) context.getSystemService(Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation();
+ switch(angle) {
+ case Surface.ROTATION_0:
+ defaultResId = com.android.internal.R.drawable.default_wallpaper_portrait_surface_0;
+ break;
+ case Surface.ROTATION_180:
+ defaultResId = com.android.internal.R.drawable.default_wallpaper_portrait_surface_180;
+ break;
+ default:
+ defaultResId = com.android.internal.R.drawable.default_wallpaper;
+ }
+ //defaultResId = com.android.internal.R.drawable.default_wallpaper;
+ /// }
}
frameworks/base/core/java/android/service/wallpaper/WallpaperService.java
- if (redrawNeeded) {
+ /// M: forcibly redraw wallpaper while rotating @{
+ if (true/*redrawNeeded*/) {
+ /// }
packages/apps/SystemUI/src/com/android/systemui/ImageWallpaper.java
- if (mBackground == null) {
+ /// M: forcibly redraw wallpaper while rotating @{
+ if (true/*mBackground == null*/) {
+ /// }
updateBitmap(mWallpaperManager.getBitmap(true /* hardware */));
}
frameworks/base/core/res/res/values/symbols.xml
<java-symbol type="drawable" name="default_wallpaper" />
+ <java-symbol type="drawable" name="default_wallpaper_portrait_surface_0" />
+ <java-symbol type="drawable" name="default_wallpaper_portrait_surface_180" />
<java-symbol type="drawable" name="default_lock_wallpaper" />
frameworks/base/core/res/res/drawable-nodpi/ 添加名为default_wallpaper_portrait_surface_0、default_wallpaper_portrait_surface_0的壁纸;
11、相册固定路径
packages/apps/Gallery2/src/com/android/gallery3d/data/LocalAlbumSet.java
ArrayList<MediaSet> albums = new ArrayList<MediaSet>();
DataManager dataManager = mApplication.getDataManager();
for (BucketEntry entry : entries) {
- MediaSet album = getLocalAlbum(dataManager,
+ if (entry.bucketName.equals("Camera")
+ || entry.bucketName.equals("Screenshots")
+ || entry.bucketName.equals("Pictures")) {
+ MediaSet album = getLocalAlbum(dataManager, mType, mPath, entry.bucketId, entry.bucketName);
albums.add(album);
+ }
}
12、型号修改
packages/apps/Settings/src/com/android/settings/DeviceInfoSettings.java
- setStringSummary(KEY_DEVICE_MODEL, Build.MODEL + DeviceInfoUtils.getMsvSuffix());
+ //setStringSummary(KEY_DEVICE_MODEL, Build.MODEL + DeviceInfoUtils.getMsvSuffix());
+ setStringSummary(KEY_DEVICE_MODEL, "XiaoMi");
- setStringSummary(KEY_DEVICE_MODEL, Build.MODEL);
- setStringSummary(KEY_BUILD_NUMBER, Build.DISPLAY);
+ //setStringSummary(KEY_DEVICE_MODEL, Build.MODEL);
+ //setStringSummary(KEY_BUILD_NUMBER, Build.DISPLAY);
+ setStringSummary(KEY_DEVICE_MODEL, "XiaoMi");
+ setStringSummary(KEY_BUILD_NUMBER, "XiaoMi");
13、蓝牙名称修改
device/generic/common/bluetooth/bdroid_buildcfg.h
#ifndef _BDROID_BUILDCFG_H
#define _BDROID_BUILDCFG_H
-#define BTM_DEF_LOCAL_NAME "Android Bluedroid"
+#define BTM_DEF_LOCAL_NAME "Xiaomi BlueTooth"
#endif
14、MTP名称修改
frameworks/base/media/java/android/mtp/MtpDatabase.java
case MtpConstants.DEVICE_PROPERTY_DEVICE_FRIENDLY_NAME:
// writable string properties kept in shared preferences
- String value = mDeviceProperties.getString(Integer.toString(property), "");
+ //String value = mDeviceProperties.getString(Integer.toString(property), "");
+ String value = "XiaoMi";
int length = value.length();
15、锁屏界面不息屏
packages/apps/SystemUI/src/com/android/systemui/keyguard/KeyguardViewMediator.java
public static final int AWAKE_INTERVAL_DEFAULT_MS = 10000;
+ /// M: don't sleep when keyguuard. @{
- public static final int AWAKE_INTERVAL_DEFAULT_MS = 10000;
+ //public static final int AWAKE_INTERVAL_DEFAULT_MS = 10000;
+ public static final int AWAKE_INTERVAL_DEFAULT_MS = -1;
+ // }
16、沉浸式导航栏
frameworks/base/services/core/java/com/android/server/policy/PhoneWindowManager.java
+ /// M: immersive navagation bar @{
- boolean navAllowedHidden = immersive || immersiveSticky;
+ //boolean navAllowedHidden = immersive || immersiveSticky;
+ immersive = true;
+ immersiveSticky = true;
+ boolean navAllowedHidden = true;
+ /// }
+ /// M: immersive navagation bar @{
- boolean immersiveSticky = (vis & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0;
+ boolean immersiveSticky = true; //(vis & View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY) != 0;
final boolean hideStatusBarWM = mTopFullscreenOpaqueWindowState != null
&& (PolicyControl.getWindowFlags(mTopFullscreenOpaqueWindowState, null)
& WindowManager.LayoutParams.FLAG_FULLSCREEN) != 0;
final boolean hideStatusBarSysui = vis & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0;
- final boolean hideNavBarSysui = (vis & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0;
+ final boolean hideNavBarSysui = true; //(vis & View.SYSTEM_UI_FLAG_HIDE_NAVIGATION) != 0;
+ /// }
+ /// M: immersive navagation bar @{
- final boolean immersive = (vis & View.SYSTEM_UI_FLAG_IMMERSIVE) != 0;
+ final boolean immersive = true;//(vis & View.SYSTEM_UI_FLAG_IMMERSIVE) != 0;
+ /// }
+ /// M: immersive navagation bar @{
+ vis = vis | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION;
+ /// }
vis = mStatusBarController.updateVisibilityLw(transientStatusBarAllowed, oldVis, vis);
17、沉浸式导航栏延迟消失
packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
private void scheduleAutohide() {
cancelAutohide();
+ /// M: delay hidden navigation bar @{
- mHandler.postDelayed(mAutohide, AUTOHIDE_TIMEOUT_MS);
+ mHandler.postDelayed(mAutohide, 15000/*AUTOHIDE_TIMEOUT_MS*/);
+ /// }
}
18、上滑手势灵敏度(缩短距离)
frameworks/base/services/core/java/com/android/server/policy/SystemGesturesPointerEventListener.java
- if (fromY >= screenHeight - mSwipeStartThreshold
- && y < fromY - mSwipeDistanceThreshold * 8
+ /// M: change sensitive @{
+ if (fromY >= screenHeight - 72 /*mSwipeStartThreshold*/
+ && y < fromY - 50 /*mSwipeDistanceThreshold * 8*/
+ // }
19、下滑一次显示完整状态栏
packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/NotificationPanelView.java
if (Math.abs(h) > mTouchSlop && Math.abs(h) > Math.abs(x - mInitialTouchX)
- && shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, h)) {
+ && false/*shouldQuickSettingsIntercept(mInitialTouchX, mInitialTouchY, h)*/) {
mQsTracking = true;
onQsExpansionStarted();
notifyExpandingFinished();
……
- return twoFingerDrag || stylusButtonClickDrag || mouseButtonClickDrag;
+ return true;//twoFingerDrag || stylusButtonClickDrag || mouseButtonClickDrag;
……
if (mQsExpandImmediate || mQsExpanded && !mQsTracking && mQsExpansionAnimator == null && !mQsExpansionFromOverscroll) {
float t;
- if (mKeyguardShowing) {
+ if (true/*mKeyguardShowing*/) {
packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
if (mNotificationPanel.isQsDetailShowing()) {
mNotificationPanel.closeQsDetail();
} else {
- mNotificationPanel.animateCloseQs();
+ //mNotificationPanel.animateCloseQs();
+ animateCollapsePanels();
}
……
if (mState == StatusBarState.KEYGUARD
- && hasActiveNotifications() && (!isDozing() || isPulsing())) {
+ && hasActiveNotifications() && false/*(!isDozing() || isPulsing())*/) {
mLockscreenGestureLogger.write(
20、取代下拉状态栏呼出
packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/PhoneStatusBarView.java
@Override
public boolean onTouchEvent(MotionEvent event) {
boolean barConsumedEvent = mBar.interceptTouchEvent(event);
if (DEBUG_GESTURES) {
if (event.getActionMasked() != MotionEvent.ACTION_MOVE) {
EventLog.writeEvent(EventLogTags.SYSUI_PANELBAR_TOUCH,
event.getActionMasked(), (int) event.getX(), (int) event.getY(),
barConsumedEvent ? 1 : 0);
}
}
+ /// M: forbid the original status bar.
+ // and if you want to enabled the custom status bar you can do the following @{
+ Intent intent = new Intent();
+ intent.setAction("com.custom.statusbar");
+ getContext().sendBroadcast(intent);
- return barConsumedEvent || super.onTouchEvent(event);
+ return false;//barConsumedEvent || super.onTouchEvent(event);
+ // }
}
21、删除Recovery Mode选项
bootable/recovery/device.cpp
static const char* MENU_ITEMS[] = {
"1.reboot system now",
"2.apply update from sdcard",
- "3.wipe data/factory reset",
+ //"3.wipe data/factory reset",
……
static const Device::BuiltinAction MENU_ACTIONS[] = {
Device::REBOOT,
Device::APPLY_SDCARD,
- Device::WIPE_DATA,
+ //Device::WIPE_DATA,
22、删除Factory Mode选项
vendor/mediatek/proprietary/factory/src/factory.cpp
static item_t ftm_menu_items[] = {
item(ITEM_AUTO_TEST, uistr_auto_test),
item(ITEM_FULL_TEST, uistr_full_test),
item(ITEM_ITEM_TEST, uistr_item_test),
item(ITEM_REPORT, uistr_test_report),
item(ITEM_DEBUG_TEST,uistr_debug_test),
- item(ITEM_VERSION, uistr_version),
+ //item(ITEM_VERSION, uistr_version),
item(ITEM_REBOOT, uistr_reboot),
item(ITEM_MAX_IDS, NULL),
};
23、预置app
build/make/target/product/core.mk
PRODUCT_PACKAGES += \
+ appName \
24、隐藏Recents
framework/base/packages/apps/SystemUI/shared/src/com/android/systemui/shared/recents/model/RecentsTaskLoadPlan.java
public void preloadPlan(PreloadOptions opts, RecentsTaskLoader loader, int runningTaskId,int currentUserId) {
...
for (int i = 0; i < taskCount; i++) {
ActivityManager.RecentTaskInfo t = mRawTasks.get(i);
// Compose the task key
final ComponentName sourceComponent = t.origActivity != null
// Activity alias if there is one
? t.origActivity
// The real activity if there is no alias (or the target if there is one)
: t.realActivity;
final int windowingMode = t.configuration.windowConfiguration.getWindowingMode();
TaskKey taskKey = new TaskKey(t.persistentId, windowingMode, t.baseIntent,
sourceComponent, t.userId, t.lastActiveTime);
boolean isFreeformTask = windowingMode == WINDOWING_MODE_FREEFORM;
boolean isStackTask = !isFreeformTask;
boolean isLaunchTarget = taskKey.id == runningTaskId;
ActivityInfo info = loader.getAndUpdateActivityInfo(taskKey);
if (info == null) {
continue;
}
+ if (info.packageName.equals("com.android.settings")) {
+ continue;
+ }
...
}
25、关闭QS主题变更(随主题变化)
vendor/mediatek/proprietary/packages/apps/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java
mUiOffloadThread.submit(() -> {
try {
mOverlayManager.setEnabled("com.android.systemui.theme.dark",
- useDarkTheme, mLockscreenUserManager.getCurrentUserId());
+ /// M: modify by wayhoi, QS close light-theme @{
+ false/*useDarkTheme*/, mLockscreenUserManager.getCurrentUserId());
+ /// }
} catch (RemoteException e) {
Log.w(TAG, "Can't change theme", e);
}