Initial unified commit for Android 11, syncing up to v311
This commit is contained in:
commit
01693449b8
@ -0,0 +1,133 @@
|
|||||||
|
From f63609cfc0fcc6a488ba7d024a1b1e3853637b09 Mon Sep 17 00:00:00 2001
|
||||||
|
From: jhenrique09 <jhenrique09.mcz@hotmail.com>
|
||||||
|
Date: Sun, 29 Mar 2020 17:38:39 -0300
|
||||||
|
Subject: [PATCH] fwb: Start device specific popup camera service conditionally
|
||||||
|
|
||||||
|
Change-Id: I07f97fe58495ef666fa317d14fa1334389015e11
|
||||||
|
---
|
||||||
|
.../custom/popupcamera/PopUpCameraUtils.java | 20 +++++++++++++++++++
|
||||||
|
core/res/res/values/lineage_config.xml | 3 +++
|
||||||
|
core/res/res/values/lineage_symbols.xml | 3 +++
|
||||||
|
.../server/camera/CameraServiceProxy.java | 20 +++++++++++++++++++
|
||||||
|
4 files changed, 46 insertions(+)
|
||||||
|
create mode 100644 core/java/com/android/internal/util/custom/popupcamera/PopUpCameraUtils.java
|
||||||
|
|
||||||
|
diff --git a/core/java/com/android/internal/util/custom/popupcamera/PopUpCameraUtils.java b/core/java/com/android/internal/util/custom/popupcamera/PopUpCameraUtils.java
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..f7988608141
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/core/java/com/android/internal/util/custom/popupcamera/PopUpCameraUtils.java
|
||||||
|
@@ -0,0 +1,20 @@
|
||||||
|
+/*
|
||||||
|
+* Copyright (C) 2019 The Pixel Experience Project
|
||||||
|
+*
|
||||||
|
+* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
+* you may not use this file except in compliance with the License.
|
||||||
|
+* You may obtain a copy of the License at
|
||||||
|
+*
|
||||||
|
+* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
+*
|
||||||
|
+* Unless required by applicable law or agreed to in writing, software
|
||||||
|
+* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
+* See the License for the specific language governing permissions and
|
||||||
|
+* limitations under the License.
|
||||||
|
+*/
|
||||||
|
+package com.android.internal.util.custom.popupcamera;
|
||||||
|
+
|
||||||
|
+public class PopUpCameraUtils {
|
||||||
|
+ public static String MANAGE_POPUP_CAMERA_SERVICE_PERMISSION = "org.pixelexperience.device.MANAGE_POPUP_CAMERA_SERVICE";
|
||||||
|
+}
|
||||||
|
diff --git a/core/res/res/values/lineage_config.xml b/core/res/res/values/lineage_config.xml
|
||||||
|
index 4b090379f5a..3315de74147 100644
|
||||||
|
--- a/core/res/res/values/lineage_config.xml
|
||||||
|
+++ b/core/res/res/values/lineage_config.xml
|
||||||
|
@@ -34,4 +34,7 @@
|
||||||
|
<!-- The list of components which should be forced to be enabled. -->
|
||||||
|
<string-array name="config_forceEnabledComponents" translatable="false">
|
||||||
|
</string-array>
|
||||||
|
+
|
||||||
|
+ <!-- Component name of popup camera service -->
|
||||||
|
+ <string name="config_popUpCameraServiceComponentName" translatable="false"></string>
|
||||||
|
</resources>
|
||||||
|
diff --git a/core/res/res/values/lineage_symbols.xml b/core/res/res/values/lineage_symbols.xml
|
||||||
|
index 155da4479fb..c7e58b3943f 100644
|
||||||
|
--- a/core/res/res/values/lineage_symbols.xml
|
||||||
|
+++ b/core/res/res/values/lineage_symbols.xml
|
||||||
|
@@ -25,4 +25,7 @@
|
||||||
|
<java-symbol type="array" name="config_deviceDisabledComponents" />
|
||||||
|
<java-symbol type="array" name="config_globallyDisabledComponents" />
|
||||||
|
<java-symbol type="array" name="config_forceEnabledComponents" />
|
||||||
|
+
|
||||||
|
+ <!-- Component name of popup camera service -->
|
||||||
|
+ <java-symbol type="string" name="config_popUpCameraServiceComponentName" />
|
||||||
|
</resources>
|
||||||
|
diff --git a/services/core/java/com/android/server/camera/CameraServiceProxy.java b/services/core/java/com/android/server/camera/CameraServiceProxy.java
|
||||||
|
index 5f7a72c8512..9e72fa09993 100644
|
||||||
|
--- a/services/core/java/com/android/server/camera/CameraServiceProxy.java
|
||||||
|
+++ b/services/core/java/com/android/server/camera/CameraServiceProxy.java
|
||||||
|
@@ -16,6 +16,7 @@
|
||||||
|
package com.android.server.camera;
|
||||||
|
|
||||||
|
import android.content.BroadcastReceiver;
|
||||||
|
+import android.content.ComponentName;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.content.Intent;
|
||||||
|
import android.content.IntentFilter;
|
||||||
|
@@ -32,6 +33,7 @@ import android.os.Process;
|
||||||
|
import android.os.RemoteException;
|
||||||
|
import android.os.SystemClock;
|
||||||
|
import android.os.SystemProperties;
|
||||||
|
+import android.os.UserHandle;
|
||||||
|
import android.os.UserManager;
|
||||||
|
import android.util.ArrayMap;
|
||||||
|
import android.util.ArraySet;
|
||||||
|
@@ -53,6 +55,8 @@ import java.util.Set;
|
||||||
|
import java.util.concurrent.ScheduledThreadPoolExecutor;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
+import com.android.internal.util.custom.popupcamera.PopUpCameraUtils;
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* CameraServiceProxy is the system_server analog to the camera service running in cameraserver.
|
||||||
|
*
|
||||||
|
@@ -106,6 +110,8 @@ public class CameraServiceProxy extends SystemService
|
||||||
|
private final boolean mNotifyNfc;
|
||||||
|
private final boolean mAllowMediaUid;
|
||||||
|
|
||||||
|
+ private final String mPopUpCameraServiceComponentName;
|
||||||
|
+
|
||||||
|
private ScheduledThreadPoolExecutor mLogWriterService = new ScheduledThreadPoolExecutor(
|
||||||
|
/*corePoolSize*/ 1);
|
||||||
|
|
||||||
|
@@ -218,6 +224,8 @@ public class CameraServiceProxy extends SystemService
|
||||||
|
// Don't keep any extra logging threads if not needed
|
||||||
|
mLogWriterService.setKeepAliveTime(1, TimeUnit.SECONDS);
|
||||||
|
mLogWriterService.allowCoreThreadTimeOut(true);
|
||||||
|
+ mPopUpCameraServiceComponentName = mContext.getResources().getString(
|
||||||
|
+ com.android.internal.R.string.config_popUpCameraServiceComponentName);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@@ -338,6 +346,18 @@ public class CameraServiceProxy extends SystemService
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+ @Override
|
||||||
|
+ public void onBootPhase(int phase) {
|
||||||
|
+ if (phase == PHASE_BOOT_COMPLETED &&
|
||||||
|
+ !mPopUpCameraServiceComponentName.equals("")) {
|
||||||
|
+ String perm = PopUpCameraUtils.MANAGE_POPUP_CAMERA_SERVICE_PERMISSION;
|
||||||
|
+ mContext.enforceCallingOrSelfPermission(perm, "Missing or invalid popup camera service permission: " + perm);
|
||||||
|
+ Intent i = new Intent();
|
||||||
|
+ i.setComponent(ComponentName.unflattenFromString(mPopUpCameraServiceComponentName));
|
||||||
|
+ mContext.startServiceAsUser(i, UserHandle.SYSTEM);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/**
|
||||||
|
* Dump camera usage events to log.
|
||||||
|
* Package-private
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,69 @@
|
|||||||
|
From 9b7fb863d5b8ed266574f5bbd73dd896f8534f89 Mon Sep 17 00:00:00 2001
|
||||||
|
From: XiNGRZ <chenxingyu92@gmail.com>
|
||||||
|
Date: Thu, 13 Feb 2020 20:19:22 +0800
|
||||||
|
Subject: [PATCH] build: Add support of generating kernel includes for prebuilt
|
||||||
|
kernels
|
||||||
|
|
||||||
|
For prebuilt kernels, point TARGET_KERNEL_HEADER_SOURCE to the dummy
|
||||||
|
kernel source used to generate headers for HALs.
|
||||||
|
|
||||||
|
Change-Id: I8dbbe3760230ae32f4252e99d1c777a029046d39
|
||||||
|
---
|
||||||
|
build/soong/Android.bp | 4 ++--
|
||||||
|
config/BoardConfigKernel.mk | 4 ++++
|
||||||
|
config/BoardConfigSoong.mk | 2 +-
|
||||||
|
3 files changed, 7 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/build/soong/Android.bp b/build/soong/Android.bp
|
||||||
|
index ee68c11e..03006e44 100644
|
||||||
|
--- a/build/soong/Android.bp
|
||||||
|
+++ b/build/soong/Android.bp
|
||||||
|
@@ -21,7 +21,7 @@ lineage_generator {
|
||||||
|
name: "generated_kernel_includes",
|
||||||
|
|
||||||
|
// The headers make command
|
||||||
|
- cmd: "$(PATH_OVERRIDE_SOONG) $(KERNEL_MAKE_CMD) $(KERNEL_MAKE_FLAGS) -C $(TARGET_KERNEL_SOURCE) O=$(KERNEL_BUILD_OUT_PREFIX)$(genDir) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) headers_install",
|
||||||
|
+ cmd: "$(PATH_OVERRIDE_SOONG) $(KERNEL_MAKE_CMD) $(KERNEL_MAKE_FLAGS) -C $(TARGET_KERNEL_HEADER_SOURCE) O=$(KERNEL_BUILD_OUT_PREFIX)$(genDir) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) headers_install",
|
||||||
|
|
||||||
|
// Directories that can be imported by a cc_* module generated_headers property
|
||||||
|
export_include_dirs: [
|
||||||
|
@@ -32,7 +32,7 @@ lineage_generator {
|
||||||
|
],
|
||||||
|
|
||||||
|
// Sources for dependency tracking
|
||||||
|
- dep_root: "$(TARGET_KERNEL_SOURCE)",
|
||||||
|
+ dep_root: "$(TARGET_KERNEL_HEADER_SOURCE)",
|
||||||
|
dep_files: [
|
||||||
|
"Makefile",
|
||||||
|
"include/**/*",
|
||||||
|
diff --git a/config/BoardConfigKernel.mk b/config/BoardConfigKernel.mk
|
||||||
|
index 8479369a..508927fd 100644
|
||||||
|
--- a/config/BoardConfigKernel.mk
|
||||||
|
+++ b/config/BoardConfigKernel.mk
|
||||||
|
@@ -52,6 +52,10 @@ else
|
||||||
|
KERNEL_ARCH := $(TARGET_KERNEL_ARCH)
|
||||||
|
endif
|
||||||
|
|
||||||
|
+ifneq ($(TARGET_KERNEL_SOURCE),)
|
||||||
|
+TARGET_KERNEL_HEADER_SOURCE := $(TARGET_KERNEL_SOURCE)
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
CLANG_PREBUILTS := $(BUILD_TOP)/prebuilts/clang/host/$(HOST_PREBUILT_TAG)/clang-r383902b
|
||||||
|
GCC_PREBUILTS := $(BUILD_TOP)/prebuilts/gcc/$(HOST_PREBUILT_TAG)
|
||||||
|
# arm64 toolchain
|
||||||
|
diff --git a/config/BoardConfigSoong.mk b/config/BoardConfigSoong.mk
|
||||||
|
index c0b01674..aacc8c56 100644
|
||||||
|
--- a/config/BoardConfigSoong.mk
|
||||||
|
+++ b/config/BoardConfigSoong.mk
|
||||||
|
@@ -9,7 +9,7 @@ EXPORT_TO_SOONG := \
|
||||||
|
KERNEL_MAKE_FLAGS \
|
||||||
|
PATH_OVERRIDE_SOONG \
|
||||||
|
TARGET_KERNEL_CONFIG \
|
||||||
|
- TARGET_KERNEL_SOURCE
|
||||||
|
+ TARGET_KERNEL_HEADER_SOURCE
|
||||||
|
|
||||||
|
# Setup SOONG_CONFIG_* vars to export the vars listed above.
|
||||||
|
# Documentation here:
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
0
patches_device_personal/frameworks_base/placeholder
Normal file
0
patches_device_personal/frameworks_base/placeholder
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
From 381142e1299600d7b16c77c57207732dd06536fc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Koskovich <zvnexus@outlook.com>
|
||||||
|
Date: Sat, 3 Oct 2020 14:28:35 -0700
|
||||||
|
Subject: [PATCH] Make broken copy headers the default.
|
||||||
|
|
||||||
|
* Do not take this for S unless needed, this is a hack
|
||||||
|
for this cycle.
|
||||||
|
|
||||||
|
Change-Id: I55c8897d7d4d5c2a9e62b1a931b3856b2e38956e
|
||||||
|
---
|
||||||
|
core/board_config.mk | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/core/board_config.mk b/core/board_config.mk
|
||||||
|
index 86162b6f3..d152bdff6 100644
|
||||||
|
--- a/core/board_config.mk
|
||||||
|
+++ b/core/board_config.mk
|
||||||
|
@@ -113,6 +113,7 @@ endif
|
||||||
|
# ###############################################################
|
||||||
|
$(foreach v,$(_build_broken_var_list),$(eval $(v) :=))
|
||||||
|
BUILD_BROKEN_NINJA_USES_ENV_VARS :=
|
||||||
|
+BUILD_BROKEN_USES_BUILD_COPY_HEADERS := true
|
||||||
|
|
||||||
|
# Boards may be defined under $(SRC_TARGET_DIR)/board/$(TARGET_DEVICE)
|
||||||
|
# or under vendor/*/$(TARGET_DEVICE). Search in both places, but
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,63 @@
|
|||||||
|
From 0353d82691df67c3497cc0df021d8a0850b6cfec Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Tue, 6 Oct 2020 01:41:16 +0000
|
||||||
|
Subject: [PATCH 1/3] UI: Revive navbar layout tuning via sysui_nav_bar tunable
|
||||||
|
|
||||||
|
Google keeps fixing what ain't broken.
|
||||||
|
This partially undoes https://github.com/LineageOS/android_frameworks_base/commit/e0d5ccd331e694afdc3c8462a1b845df329de2b8 and https://github.com/LineageOS/android_frameworks_base/commit/d34b4e8d278386b85a00018c502bd21d00f8813b
|
||||||
|
|
||||||
|
Change-Id: Ied7d7859e50fd0fcc346219964e747c5d5f4c352
|
||||||
|
---
|
||||||
|
.../statusbar/phone/NavigationBarInflaterView.java | 14 ++++++++++++++
|
||||||
|
1 file changed, 14 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
|
||||||
|
index 047cb702c55..e4b3395f57a 100644
|
||||||
|
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
|
||||||
|
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/NavigationBarInflaterView.java
|
||||||
|
@@ -108,6 +108,7 @@ public class NavigationBarInflaterView extends FrameLayout
|
||||||
|
|
||||||
|
private boolean mIsVertical;
|
||||||
|
private boolean mAlternativeOrder;
|
||||||
|
+ private boolean mUsingCustomLayout;
|
||||||
|
|
||||||
|
private OverviewProxyService mOverviewProxyService;
|
||||||
|
private int mNavBarMode = NAV_BAR_MODE_3BUTTON;
|
||||||
|
@@ -173,6 +174,7 @@ public class NavigationBarInflaterView extends FrameLayout
|
||||||
|
super.onAttachedToWindow();
|
||||||
|
Dependency.get(TunerService.class).addTunable(this, NAV_BAR_INVERSE);
|
||||||
|
Dependency.get(TunerService.class).addTunable(this, KEY_NAVIGATION_HINT);
|
||||||
|
+ Dependency.get(TunerService.class).addTunable(this, NAV_BAR_VIEWS);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@@ -191,6 +193,8 @@ public class NavigationBarInflaterView extends FrameLayout
|
||||||
|
mIsHintEnabled = TunerService.parseIntegerSwitch(newValue, true);
|
||||||
|
updateHint();
|
||||||
|
onLikelyDefaultLayoutChange();
|
||||||
|
+ } else if (NAV_BAR_VIEWS.equals(key)) {
|
||||||
|
+ setNavigationBarLayout(newValue);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -200,7 +204,17 @@ public class NavigationBarInflaterView extends FrameLayout
|
||||||
|
updateLayoutInversion();
|
||||||
|
}
|
||||||
|
|
||||||
|
+ public void setNavigationBarLayout(String layoutValue) {
|
||||||
|
+ if (!Objects.equals(mCurrentLayout, layoutValue)) {
|
||||||
|
+ mUsingCustomLayout = layoutValue != null;
|
||||||
|
+ clearViews();
|
||||||
|
+ inflateLayout(layoutValue);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
public void onLikelyDefaultLayoutChange() {
|
||||||
|
+ // Don't override custom layouts
|
||||||
|
+ if (mUsingCustomLayout) return;
|
||||||
|
|
||||||
|
// Reevaluate new layout
|
||||||
|
final String newValue = getDefaultLayout();
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,28 @@
|
|||||||
|
From 6fdadb36add6aa2f8c6c3d25c4ff8135278a9919 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 10 Jan 2021 11:44:29 +0000
|
||||||
|
Subject: [PATCH 2/3] UI: Disable wallpaper zoom
|
||||||
|
|
||||||
|
It does little more than inducing motion sickness
|
||||||
|
|
||||||
|
Change-Id: I78cc5484930b27f172cd8d8a5bd9042dce3478d0
|
||||||
|
---
|
||||||
|
core/res/res/values/config.xml | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
|
||||||
|
index 51b461e7949..f761d28e68d 100644
|
||||||
|
--- a/core/res/res/values/config.xml
|
||||||
|
+++ b/core/res/res/values/config.xml
|
||||||
|
@@ -4384,7 +4384,7 @@
|
||||||
|
<string name="config_customSessionPolicyProvider"></string>
|
||||||
|
|
||||||
|
<!-- The max scale for the wallpaper when it's zoomed in -->
|
||||||
|
- <item name="config_wallpaperMaxScale" format="float" type="dimen">1.10</item>
|
||||||
|
+ <item name="config_wallpaperMaxScale" format="float" type="dimen">1</item>
|
||||||
|
|
||||||
|
<!-- Package name that will receive an explicit manifest broadcast for
|
||||||
|
android.os.action.POWER_SAVE_MODE_CHANGED. -->
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,40 @@
|
|||||||
|
From 2fba4148047720a307d88013f20dbb87e389a751 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Thu, 5 Apr 2018 10:01:19 +0800
|
||||||
|
Subject: [PATCH 3/3] Disable vendor mismatch warning
|
||||||
|
|
||||||
|
Change-Id: Ieb8fe91e2f02462f074312ed0f4885d183e9780b
|
||||||
|
---
|
||||||
|
.../server/wm/ActivityTaskManagerService.java | 16 ++--------------
|
||||||
|
1 file changed, 2 insertions(+), 14 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
|
||||||
|
index ec178a4b543..f1d9cd968bc 100644
|
||||||
|
--- a/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
|
||||||
|
+++ b/services/core/java/com/android/server/wm/ActivityTaskManagerService.java
|
||||||
|
@@ -6494,20 +6494,8 @@ public class ActivityTaskManagerService extends IActivityTaskManager.Stub {
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!Build.isBuildConsistent()) {
|
||||||
|
- Slog.e(TAG, "Build fingerprint is not consistent, warning user");
|
||||||
|
- mUiHandler.post(() -> {
|
||||||
|
- if (mShowDialogs) {
|
||||||
|
- AlertDialog d = new BaseErrorDialog(mUiContext);
|
||||||
|
- d.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_ERROR);
|
||||||
|
- d.setCancelable(false);
|
||||||
|
- d.setTitle(mUiContext.getText(R.string.android_system_label));
|
||||||
|
- d.setMessage(mUiContext.getText(R.string.system_error_manufacturer));
|
||||||
|
- d.setButton(DialogInterface.BUTTON_POSITIVE,
|
||||||
|
- mUiContext.getText(R.string.ok),
|
||||||
|
- mUiHandler.obtainMessage(DISMISS_DIALOG_UI_MSG, d));
|
||||||
|
- d.show();
|
||||||
|
- }
|
||||||
|
- });
|
||||||
|
+ Slog.e(TAG, "Build fingerprint is not consistent");
|
||||||
|
+ // Do not emit warning about vendor mismatch
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,26 @@
|
|||||||
|
From 95ef97f5aa82c15e47f9313eca4899d89dba5dd0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Wed, 4 Jul 2018 17:59:14 +0800
|
||||||
|
Subject: [PATCH] sdk: Invert per-app stretch-to-fullscreen implementation
|
||||||
|
|
||||||
|
Change-Id: Idf7dab4e1e0c79953fa672f33ec65fecffb37c83
|
||||||
|
---
|
||||||
|
sdk/src/java/org/lineageos/internal/applications/LongScreen.java | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/sdk/src/java/org/lineageos/internal/applications/LongScreen.java b/sdk/src/java/org/lineageos/internal/applications/LongScreen.java
|
||||||
|
index 7fe0d68..26ea349 100644
|
||||||
|
--- a/sdk/src/java/org/lineageos/internal/applications/LongScreen.java
|
||||||
|
+++ b/sdk/src/java/org/lineageos/internal/applications/LongScreen.java
|
||||||
|
@@ -57,7 +57,7 @@ public class LongScreen {
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean shouldForceLongScreen(String packageName) {
|
||||||
|
- return isSupported() && mApps.contains(packageName);
|
||||||
|
+ return isSupported() && !(mApps.contains(packageName));
|
||||||
|
}
|
||||||
|
|
||||||
|
public Set<String> getApps() {
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
@ -0,0 +1,34 @@
|
|||||||
|
From 6f9026e0548bd82e7b728ef29dd7d14db93b2105 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sat, 26 Jun 2021 14:23:09 +0000
|
||||||
|
Subject: [PATCH] Jelly: MainActivity: Restore applyThemeColor
|
||||||
|
|
||||||
|
Fixes black statusbar on start
|
||||||
|
|
||||||
|
Change-Id: I6816f5b1dcb3c7bcaee2736a9e2a3ecd63217bc6
|
||||||
|
---
|
||||||
|
app/src/main/java/org/lineageos/jelly/MainActivity.kt | 3 ++-
|
||||||
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/app/src/main/java/org/lineageos/jelly/MainActivity.kt b/app/src/main/java/org/lineageos/jelly/MainActivity.kt
|
||||||
|
index 2902b0a..9ff74ed 100644
|
||||||
|
--- a/app/src/main/java/org/lineageos/jelly/MainActivity.kt
|
||||||
|
+++ b/app/src/main/java/org/lineageos/jelly/MainActivity.kt
|
||||||
|
@@ -193,6 +193,7 @@ class MainActivity : WebViewExtActivity(), SearchBarController.OnCancelListener,
|
||||||
|
findViewById(R.id.search_menu_cancel),
|
||||||
|
this)
|
||||||
|
setUiMode()
|
||||||
|
+ applyThemeColor(mThemeColor)
|
||||||
|
try {
|
||||||
|
val httpCacheDir = File(cacheDir, "suggestion_responses")
|
||||||
|
val httpCacheSize = 1024 * 1024.toLong() // 1 MiB
|
||||||
|
@@ -763,4 +764,4 @@ class MainActivity : WebViewExtActivity(), SearchBarController.OnCancelListener,
|
||||||
|
private const val STORAGE_PERM_REQ = 423
|
||||||
|
private const val LOCATION_PERM_REQ = 424
|
||||||
|
}
|
||||||
|
-}
|
||||||
|
\ No newline at end of file
|
||||||
|
+}
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,105 @@
|
|||||||
|
From 47bf5612cec98931ee3076c307247ac58d07ccff Mon Sep 17 00:00:00 2001
|
||||||
|
From: AndyCGYan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 13 Jan 2019 21:44:48 +0800
|
||||||
|
Subject: [PATCH] LineageParts: Invert per-app stretch-to-fullscreen
|
||||||
|
|
||||||
|
Change-Id: Icb02c8dfd84882f736e37d6cd92c35e5eb288faa
|
||||||
|
---
|
||||||
|
res/layout/long_screen_layout.xml | 2 +-
|
||||||
|
res/values-zh-rCN/strings.xml | 6 +++---
|
||||||
|
res/values/strings.xml | 6 +++---
|
||||||
|
res/xml/long_screen_prefs.xml | 2 +-
|
||||||
|
res/xml/parts_catalog.xml | 4 ++--
|
||||||
|
.../lineageparts/applications/LongScreenSettings.java | 2 +-
|
||||||
|
6 files changed, 11 insertions(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/res/layout/long_screen_layout.xml b/res/layout/long_screen_layout.xml
|
||||||
|
index 40d0938..1119cef 100644
|
||||||
|
--- a/res/layout/long_screen_layout.xml
|
||||||
|
+++ b/res/layout/long_screen_layout.xml
|
||||||
|
@@ -36,7 +36,7 @@
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_centerInParent="true"
|
||||||
|
- android:text="@string/long_screen_settings_no_apps"
|
||||||
|
+ android:text="@string/inverse_long_screen_settings_no_apps"
|
||||||
|
android:textSize="18dp"
|
||||||
|
android:visibility="gone" />
|
||||||
|
|
||||||
|
diff --git a/res/values-zh-rCN/strings.xml b/res/values-zh-rCN/strings.xml
|
||||||
|
index ee5f7f9..eeed571 100644
|
||||||
|
--- a/res/values-zh-rCN/strings.xml
|
||||||
|
+++ b/res/values-zh-rCN/strings.xml
|
||||||
|
@@ -448,9 +448,9 @@
|
||||||
|
<string name="auto_power_save_summary_on">电量 %s 时自动启用省电</string>
|
||||||
|
<string name="auto_power_save_summary_off">不要自动启用省电</string>
|
||||||
|
<string name="auto_power_save_never">永不</string>
|
||||||
|
- <string name="long_screen_settings_title">全屏应用</string>
|
||||||
|
- <string name="long_screen_settings_summary">强制旧式应用程序使用全屏长宽比</string>
|
||||||
|
- <string name="long_screen_settings_no_apps">无应用</string>
|
||||||
|
+ <string name="inverse_long_screen_settings_title">禁用拉伸全屏</string>
|
||||||
|
+ <string name="inverse_long_screen_settings_summary">对选定的应用禁用拉伸全屏</string>
|
||||||
|
+ <string name="inverse_long_screen_settings_no_apps">无应用</string>
|
||||||
|
<string name="charging_sounds_settings_title">充电提示音</string>
|
||||||
|
<string name="charging_sounds_enabled_title">启用</string>
|
||||||
|
<string name="charging_sounds_enabled_summary">连接或断开电源时发出声音</string>
|
||||||
|
diff --git a/res/values/strings.xml b/res/values/strings.xml
|
||||||
|
index 65d799a..ff23ae9 100644
|
||||||
|
--- a/res/values/strings.xml
|
||||||
|
+++ b/res/values/strings.xml
|
||||||
|
@@ -579,9 +579,9 @@
|
||||||
|
<string name="auto_power_save_never">Never</string>
|
||||||
|
|
||||||
|
<!-- Applications: Long screen -->
|
||||||
|
- <string name="long_screen_settings_title">Full screen apps</string>
|
||||||
|
- <string name="long_screen_settings_summary">Force legacy apps to use full screen aspect ratio</string>
|
||||||
|
- <string name="long_screen_settings_no_apps">No apps</string>
|
||||||
|
+ <string name="inverse_long_screen_settings_title">Disable stretch-to-fullscreen</string>
|
||||||
|
+ <string name="inverse_long_screen_settings_summary">Prevent selected apps from utilizing stretch-to-fullscreen</string>
|
||||||
|
+ <string name="inverse_long_screen_settings_no_apps">No apps</string>
|
||||||
|
|
||||||
|
<!-- Sounds: Charging sounds -->
|
||||||
|
<string name="charging_sounds_settings_title">Charging sounds</string>
|
||||||
|
diff --git a/res/xml/long_screen_prefs.xml b/res/xml/long_screen_prefs.xml
|
||||||
|
index ec947fa..20da90a 100644
|
||||||
|
--- a/res/xml/long_screen_prefs.xml
|
||||||
|
+++ b/res/xml/long_screen_prefs.xml
|
||||||
|
@@ -18,6 +18,6 @@
|
||||||
|
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
xmlns:lineage="http://schemas.android.com/apk/res/org.lineageos.lineageparts"
|
||||||
|
android:key="long_screen_settings"
|
||||||
|
- android:title="@string/long_screen_settings_title">
|
||||||
|
+ android:title="@string/inverse_long_screen_settings_title">
|
||||||
|
|
||||||
|
</PreferenceScreen>
|
||||||
|
diff --git a/res/xml/parts_catalog.xml b/res/xml/parts_catalog.xml
|
||||||
|
index a4346c7..e21d7d5 100644
|
||||||
|
--- a/res/xml/parts_catalog.xml
|
||||||
|
+++ b/res/xml/parts_catalog.xml
|
||||||
|
@@ -92,8 +92,8 @@
|
||||||
|
lineage:xmlRes="@xml/perf_profile_settings" />
|
||||||
|
|
||||||
|
<part android:key="long_screen_settings"
|
||||||
|
- android:title="@string/long_screen_settings_title"
|
||||||
|
- android:summary="@string/long_screen_settings_summary"
|
||||||
|
+ android:title="@string/inverse_long_screen_settings_title"
|
||||||
|
+ android:summary="@string/inverse_long_screen_settings_summary"
|
||||||
|
android:fragment="org.lineageos.lineageparts.applications.LongScreenSettings"
|
||||||
|
lineage:xmlRes="@xml/long_screen_prefs" />
|
||||||
|
|
||||||
|
diff --git a/src/org/lineageos/lineageparts/applications/LongScreenSettings.java b/src/org/lineageos/lineageparts/applications/LongScreenSettings.java
|
||||||
|
index ac04058..50ff8f6 100644
|
||||||
|
--- a/src/org/lineageos/lineageparts/applications/LongScreenSettings.java
|
||||||
|
+++ b/src/org/lineageos/lineageparts/applications/LongScreenSettings.java
|
||||||
|
@@ -246,7 +246,7 @@ public class LongScreenSettings extends SettingsPreferenceFragment
|
||||||
|
mApplicationsState.ensureIcon(entry);
|
||||||
|
holder.icon.setImageDrawable(entry.icon);
|
||||||
|
holder.state.setTag(entry);
|
||||||
|
- holder.state.setChecked(mLongScreen.shouldForceLongScreen(entry.info.packageName));
|
||||||
|
+ holder.state.setChecked(!(mLongScreen.shouldForceLongScreen(entry.info.packageName)));
|
||||||
|
return holder.rootView;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,448 @@
|
|||||||
|
From 69e5c49e18b9f33cebde3d54c69477ef2c18a756 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Vachounet <vachounet@live.fr>
|
||||||
|
Date: Tue, 24 Nov 2020 05:49:46 +0000
|
||||||
|
Subject: [PATCH] Trebuchet: Move clear all button to actions view
|
||||||
|
|
||||||
|
Change-Id: I9d13247501ca8e1610c17adc204ad64dd4a04cec
|
||||||
|
---
|
||||||
|
.../RecentsViewStateController.java | 3 -
|
||||||
|
.../FallbackRecentsStateController.java | 3 -
|
||||||
|
.../quickstep/views/ClearAllButton.java | 112 ------------------
|
||||||
|
.../android/quickstep/views/RecentsView.java | 52 ++------
|
||||||
|
.../res/drawable/ic_clear_all_recents.xml | 21 ++++
|
||||||
|
.../res/layout/overview_actions_container.xml | 17 ++-
|
||||||
|
.../res/layout/overview_clear_all_button.xml | 27 -----
|
||||||
|
7 files changed, 44 insertions(+), 191 deletions(-)
|
||||||
|
delete mode 100644 quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java
|
||||||
|
create mode 100644 quickstep/res/drawable/ic_clear_all_recents.xml
|
||||||
|
delete mode 100644 quickstep/res/layout/overview_clear_all_button.xml
|
||||||
|
|
||||||
|
diff --git a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsViewStateController.java b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsViewStateController.java
|
||||||
|
index 5ccc1e868..bc47c5a00 100644
|
||||||
|
--- a/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsViewStateController.java
|
||||||
|
+++ b/quickstep/recents_ui_overrides/src/com/android/launcher3/uioverrides/RecentsViewStateController.java
|
||||||
|
@@ -35,7 +35,6 @@ import com.android.launcher3.anim.PendingAnimation;
|
||||||
|
import com.android.launcher3.anim.PropertySetter;
|
||||||
|
import com.android.launcher3.states.StateAnimationConfig;
|
||||||
|
import com.android.launcher3.util.MultiValueAlpha;
|
||||||
|
-import com.android.quickstep.views.ClearAllButton;
|
||||||
|
import com.android.quickstep.views.LauncherRecentsView;
|
||||||
|
import com.android.quickstep.views.RecentsView;
|
||||||
|
|
||||||
|
@@ -84,8 +83,6 @@ public final class RecentsViewStateController extends
|
||||||
|
private void setAlphas(PropertySetter propertySetter, StateAnimationConfig config,
|
||||||
|
LauncherState state) {
|
||||||
|
float buttonAlpha = (state.getVisibleElements(mLauncher) & OVERVIEW_BUTTONS) != 0 ? 1 : 0;
|
||||||
|
- propertySetter.setFloat(mRecentsView.getClearAllButton(), ClearAllButton.VISIBILITY_ALPHA,
|
||||||
|
- buttonAlpha, LINEAR);
|
||||||
|
propertySetter.setFloat(mLauncher.getActionsView().getVisibilityAlpha(),
|
||||||
|
MultiValueAlpha.VALUE, buttonAlpha, config.getInterpolator(
|
||||||
|
ANIM_OVERVIEW_ACTIONS_FADE, LINEAR));
|
||||||
|
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/fallback/FallbackRecentsStateController.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/fallback/FallbackRecentsStateController.java
|
||||||
|
index 24a761066..7af77ef60 100644
|
||||||
|
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/fallback/FallbackRecentsStateController.java
|
||||||
|
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/fallback/FallbackRecentsStateController.java
|
||||||
|
@@ -35,7 +35,6 @@ import com.android.launcher3.statemanager.StateManager.StateHandler;
|
||||||
|
import com.android.launcher3.states.StateAnimationConfig;
|
||||||
|
import com.android.launcher3.util.MultiValueAlpha;
|
||||||
|
import com.android.quickstep.RecentsActivity;
|
||||||
|
-import com.android.quickstep.views.ClearAllButton;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* State controller for fallback recents activity
|
||||||
|
@@ -78,8 +77,6 @@ public class FallbackRecentsStateController implements StateHandler<RecentsState
|
||||||
|
private void setProperties(RecentsState state, StateAnimationConfig config,
|
||||||
|
PropertySetter setter) {
|
||||||
|
float buttonAlpha = state.hasButtons() ? 1 : 0;
|
||||||
|
- setter.setFloat(mRecentsView.getClearAllButton(), ClearAllButton.VISIBILITY_ALPHA,
|
||||||
|
- buttonAlpha, LINEAR);
|
||||||
|
setter.setFloat(mActivity.getActionsView().getVisibilityAlpha(),
|
||||||
|
MultiValueAlpha.VALUE, buttonAlpha, LINEAR);
|
||||||
|
|
||||||
|
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java
|
||||||
|
deleted file mode 100644
|
||||||
|
index fd74357f3..000000000
|
||||||
|
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/ClearAllButton.java
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,112 +0,0 @@
|
||||||
|
-/*
|
||||||
|
- * Copyright (C) 2018 The Android Open Source Project
|
||||||
|
- *
|
||||||
|
- * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
- * you may not use this file except in compliance with the License.
|
||||||
|
- * You may obtain a copy of the License at
|
||||||
|
- *
|
||||||
|
- * http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
- *
|
||||||
|
- * Unless required by applicable law or agreed to in writing, software
|
||||||
|
- * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
- * See the License for the specific language governing permissions and
|
||||||
|
- * limitations under the License.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-package com.android.quickstep.views;
|
||||||
|
-
|
||||||
|
-import android.content.Context;
|
||||||
|
-import android.util.AttributeSet;
|
||||||
|
-import android.util.FloatProperty;
|
||||||
|
-import android.widget.Button;
|
||||||
|
-
|
||||||
|
-import com.android.launcher3.touch.PagedOrientationHandler;
|
||||||
|
-import com.android.quickstep.views.RecentsView.PageCallbacks;
|
||||||
|
-import com.android.quickstep.views.RecentsView.ScrollState;
|
||||||
|
-
|
||||||
|
-public class ClearAllButton extends Button implements PageCallbacks {
|
||||||
|
-
|
||||||
|
- public static final FloatProperty<ClearAllButton> VISIBILITY_ALPHA =
|
||||||
|
- new FloatProperty<ClearAllButton>("visibilityAlpha") {
|
||||||
|
- @Override
|
||||||
|
- public Float get(ClearAllButton view) {
|
||||||
|
- return view.mVisibilityAlpha;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- public void setValue(ClearAllButton view, float v) {
|
||||||
|
- view.setVisibilityAlpha(v);
|
||||||
|
- }
|
||||||
|
- };
|
||||||
|
-
|
||||||
|
- private float mScrollAlpha = 1;
|
||||||
|
- private float mContentAlpha = 1;
|
||||||
|
- private float mVisibilityAlpha = 1;
|
||||||
|
-
|
||||||
|
- private boolean mIsRtl;
|
||||||
|
-
|
||||||
|
- private int mScrollOffset;
|
||||||
|
-
|
||||||
|
- public ClearAllButton(Context context, AttributeSet attrs) {
|
||||||
|
- super(context, attrs);
|
||||||
|
- mIsRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- protected void onLayout(boolean changed, int left, int top, int right, int bottom) {
|
||||||
|
- super.onLayout(changed, left, top, right, bottom);
|
||||||
|
- PagedOrientationHandler orientationHandler = getRecentsView().getPagedOrientationHandler();
|
||||||
|
- mScrollOffset = orientationHandler.getClearAllScrollOffset(getRecentsView(), mIsRtl);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- private RecentsView getRecentsView() {
|
||||||
|
- return (RecentsView) getParent();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- public void onRtlPropertiesChanged(int layoutDirection) {
|
||||||
|
- super.onRtlPropertiesChanged(layoutDirection);
|
||||||
|
- mIsRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- public boolean hasOverlappingRendering() {
|
||||||
|
- return false;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public void setContentAlpha(float alpha) {
|
||||||
|
- if (mContentAlpha != alpha) {
|
||||||
|
- mContentAlpha = alpha;
|
||||||
|
- updateAlpha();
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- public void setVisibilityAlpha(float alpha) {
|
||||||
|
- if (mVisibilityAlpha != alpha) {
|
||||||
|
- mVisibilityAlpha = alpha;
|
||||||
|
- updateAlpha();
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- @Override
|
||||||
|
- public void onPageScroll(ScrollState scrollState) {
|
||||||
|
- PagedOrientationHandler orientationHandler = getRecentsView().getPagedOrientationHandler();
|
||||||
|
- float orientationSize = orientationHandler.getPrimaryValue(getWidth(), getHeight());
|
||||||
|
- if (orientationSize == 0) {
|
||||||
|
- return;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- float shift = Math.min(scrollState.scrollFromEdge, orientationSize);
|
||||||
|
- float translation = mIsRtl ? (mScrollOffset - shift) : (mScrollOffset + shift);
|
||||||
|
- orientationHandler.setPrimaryAndResetSecondaryTranslate(this, translation);
|
||||||
|
- mScrollAlpha = 1 - shift / orientationSize;
|
||||||
|
- updateAlpha();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- private void updateAlpha() {
|
||||||
|
- final float alpha = mScrollAlpha * mContentAlpha * mVisibilityAlpha;
|
||||||
|
- setAlpha(alpha);
|
||||||
|
- setClickable(alpha == 1);
|
||||||
|
- }
|
||||||
|
-}
|
||||||
|
diff --git a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
|
||||||
|
index 0130cae47..bfdd79e5f 100644
|
||||||
|
--- a/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
|
||||||
|
+++ b/quickstep/recents_ui_overrides/src/com/android/quickstep/views/RecentsView.java
|
||||||
|
@@ -85,6 +85,7 @@ import android.view.ViewGroup;
|
||||||
|
import android.view.accessibility.AccessibilityEvent;
|
||||||
|
import android.view.accessibility.AccessibilityNodeInfo;
|
||||||
|
import android.view.animation.Interpolator;
|
||||||
|
+import android.widget.Button;
|
||||||
|
import android.widget.ListView;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
@@ -268,8 +269,7 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
private final float mFastFlingVelocity;
|
||||||
|
private final RecentsModel mModel;
|
||||||
|
private final int mTaskTopMargin;
|
||||||
|
- private final ClearAllButton mClearAllButton;
|
||||||
|
- private final Rect mClearAllButtonDeadZoneRect = new Rect();
|
||||||
|
+ private Button mClearAllButton;
|
||||||
|
private final Rect mTaskViewDeadZoneRect = new Rect();
|
||||||
|
|
||||||
|
private final ScrollState mScrollState = new ScrollState();
|
||||||
|
@@ -442,9 +442,6 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
mModel = RecentsModel.INSTANCE.get(context);
|
||||||
|
mIdp = InvariantDeviceProfile.INSTANCE.get(context);
|
||||||
|
|
||||||
|
- mClearAllButton = (ClearAllButton) LayoutInflater.from(context)
|
||||||
|
- .inflate(R.layout.overview_clear_all_button, this, false);
|
||||||
|
- mClearAllButton.setOnClickListener(this::dismissAllTasks);
|
||||||
|
mTaskViewPool = new ViewPool<>(context, this, R.layout.task, 20 /* max size */,
|
||||||
|
10 /* initial size */);
|
||||||
|
|
||||||
|
@@ -550,6 +547,8 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
public void init(OverviewActionsView actionsView) {
|
||||||
|
mActionsView = actionsView;
|
||||||
|
mActionsView.updateHiddenFlags(HIDDEN_NO_TASKS, getTaskViewCount() == 0);
|
||||||
|
+ mClearAllButton = (Button) mActionsView.findViewById(R.id.clear_all);
|
||||||
|
+ mClearAllButton.setOnClickListener(this::dismissAllTasks);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@@ -620,7 +619,7 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateTaskStartIndex(View affectingView) {
|
||||||
|
- if (!(affectingView instanceof TaskView) && !(affectingView instanceof ClearAllButton)) {
|
||||||
|
+ if (!(affectingView instanceof TaskView)) {
|
||||||
|
int childCount = getChildCount();
|
||||||
|
|
||||||
|
mTaskViewStartIndex = 0;
|
||||||
|
@@ -674,7 +673,7 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
* button fully visible, center page is Clear All button.
|
||||||
|
*/
|
||||||
|
public boolean isClearAllHidden() {
|
||||||
|
- return mClearAllButton.getAlpha() != 1f;
|
||||||
|
+ return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
@@ -732,11 +731,8 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
mTouchDownToStartHome = true;
|
||||||
|
} else {
|
||||||
|
updateDeadZoneRects();
|
||||||
|
- final boolean clearAllButtonDeadZoneConsumed =
|
||||||
|
- mClearAllButton.getAlpha() == 1
|
||||||
|
- && mClearAllButtonDeadZoneRect.contains(x, y);
|
||||||
|
final boolean cameFromNavBar = (ev.getEdgeFlags() & EDGE_NAV_BAR) != 0;
|
||||||
|
- if (!clearAllButtonDeadZoneConsumed && !cameFromNavBar
|
||||||
|
+ if (!cameFromNavBar
|
||||||
|
&& !mTaskViewDeadZoneRect.contains(x + getScrollX(), y)) {
|
||||||
|
mTouchDownToStartHome = true;
|
||||||
|
}
|
||||||
|
@@ -783,18 +779,12 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
|
||||||
|
final int requiredTaskCount = tasks.size();
|
||||||
|
if (getTaskViewCount() != requiredTaskCount) {
|
||||||
|
- if (indexOfChild(mClearAllButton) != -1) {
|
||||||
|
- removeView(mClearAllButton);
|
||||||
|
- }
|
||||||
|
for (int i = getTaskViewCount(); i < requiredTaskCount; i++) {
|
||||||
|
addView(mTaskViewPool.getView());
|
||||||
|
}
|
||||||
|
while (getTaskViewCount() > requiredTaskCount) {
|
||||||
|
removeView(getChildAt(getChildCount() - 1));
|
||||||
|
}
|
||||||
|
- if (requiredTaskCount > 0) {
|
||||||
|
- addView(mClearAllButton);
|
||||||
|
- }
|
||||||
|
}
|
||||||
|
|
||||||
|
// Rebind and reset all task views
|
||||||
|
@@ -834,16 +824,10 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
for (int i = getTaskViewCount() - 1; i >= 0; i--) {
|
||||||
|
removeView(getTaskViewAt(i));
|
||||||
|
}
|
||||||
|
- if (indexOfChild(mClearAllButton) != -1) {
|
||||||
|
- removeView(mClearAllButton);
|
||||||
|
- }
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getTaskViewCount() {
|
||||||
|
int taskViewCount = getChildCount() - mTaskViewStartIndex;
|
||||||
|
- if (indexOfChild(mClearAllButton) != -1) {
|
||||||
|
- taskViewCount--;
|
||||||
|
- }
|
||||||
|
return taskViewCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1199,9 +1183,6 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
// Add an empty view for now until the task plan is loaded and applied
|
||||||
|
final TaskView taskView = mTaskViewPool.getView();
|
||||||
|
addView(taskView, mTaskViewStartIndex);
|
||||||
|
- if (wasEmpty) {
|
||||||
|
- addView(mClearAllButton);
|
||||||
|
- }
|
||||||
|
// The temporary running task is only used for the duration between the start of the
|
||||||
|
// gesture and the task list is loaded and applied
|
||||||
|
mTmpRunningTask = Task.from(new TaskKey(runningTaskInfo), runningTaskInfo, false);
|
||||||
|
@@ -1538,7 +1519,6 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
removeViewInLayout(taskView);
|
||||||
|
|
||||||
|
if (getTaskViewCount() == 0) {
|
||||||
|
- removeViewInLayout(mClearAllButton);
|
||||||
|
startHome();
|
||||||
|
} else {
|
||||||
|
snapToPageImmediately(pageToSnapTo);
|
||||||
|
@@ -1677,7 +1657,6 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
child.setStableAlpha(alpha);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- mClearAllButton.setContentAlpha(mContentAlpha);
|
||||||
|
int alphaInt = Math.round(alpha * 255);
|
||||||
|
mEmptyMessagePaint.setAlpha(alphaInt);
|
||||||
|
mEmptyIcon.setAlpha(alphaInt);
|
||||||
|
@@ -1740,10 +1719,6 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
setLayoutDirection(mIsRtl
|
||||||
|
? View.LAYOUT_DIRECTION_RTL
|
||||||
|
: View.LAYOUT_DIRECTION_LTR);
|
||||||
|
- mClearAllButton.setLayoutDirection(mIsRtl
|
||||||
|
- ? View.LAYOUT_DIRECTION_LTR
|
||||||
|
- : View.LAYOUT_DIRECTION_RTL);
|
||||||
|
- mClearAllButton.setRotation(mOrientationHandler.getDegreesRotated());
|
||||||
|
mActivity.getDragLayer().recreateControllers();
|
||||||
|
boolean isInLandscape = mOrientationState.getTouchRotation() != ROTATION_0
|
||||||
|
|| mOrientationState.getRecentsActivityRotation() != ROTATION_0;
|
||||||
|
@@ -1963,15 +1938,6 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
}
|
||||||
|
|
||||||
|
private void updateDeadZoneRects() {
|
||||||
|
- // Get the deadzone rect surrounding the clear all button to not dismiss overview to home
|
||||||
|
- mClearAllButtonDeadZoneRect.setEmpty();
|
||||||
|
- if (mClearAllButton.getWidth() > 0) {
|
||||||
|
- int verticalMargin = getResources()
|
||||||
|
- .getDimensionPixelSize(R.dimen.recents_clear_all_deadzone_vertical_margin);
|
||||||
|
- mClearAllButton.getHitRect(mClearAllButtonDeadZoneRect);
|
||||||
|
- mClearAllButtonDeadZoneRect.inset(-getPaddingRight() / 2, -verticalMargin);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
// Get the deadzone rect between the task views
|
||||||
|
mTaskViewDeadZoneRect.setEmpty();
|
||||||
|
int count = getTaskViewCount();
|
||||||
|
@@ -2304,10 +2270,6 @@ public abstract class RecentsView<T extends StatefulActivity> extends PagedView
|
||||||
|
return super.computeMaxScroll();
|
||||||
|
}
|
||||||
|
|
||||||
|
- public ClearAllButton getClearAllButton() {
|
||||||
|
- return mClearAllButton;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
@Override
|
||||||
|
protected boolean onOverscroll(int amount) {
|
||||||
|
// overscroll should only be accepted on -1 direction (for clear all button)
|
||||||
|
diff --git a/quickstep/res/drawable/ic_clear_all_recents.xml b/quickstep/res/drawable/ic_clear_all_recents.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 000000000..7cba0220b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/quickstep/res/drawable/ic_clear_all_recents.xml
|
||||||
|
@@ -0,0 +1,21 @@
|
||||||
|
+<!-- Copyright (C) 2020 The Android Open Source Project
|
||||||
|
+
|
||||||
|
+ Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
+ you may not use this file except in compliance with the License.
|
||||||
|
+ You may obtain a copy of the License at
|
||||||
|
+
|
||||||
|
+ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
+
|
||||||
|
+ Unless required by applicable law or agreed to in writing, software
|
||||||
|
+ distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
+ See the License for the specific language governing permissions and
|
||||||
|
+ limitations under the License.
|
||||||
|
+-->
|
||||||
|
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
+ android:height="24dp"
|
||||||
|
+ android:width="24dp"
|
||||||
|
+ android:viewportWidth="24"
|
||||||
|
+ android:viewportHeight="24">
|
||||||
|
+ <path android:fillColor="#FF000000" android:pathData="M5,13H19V11H5M3,17H17V15H3M7,7V9H21V7" />
|
||||||
|
+</vector>
|
||||||
|
diff --git a/quickstep/res/layout/overview_actions_container.xml b/quickstep/res/layout/overview_actions_container.xml
|
||||||
|
index 258f24a54..302cabf8a 100644
|
||||||
|
--- a/quickstep/res/layout/overview_actions_container.xml
|
||||||
|
+++ b/quickstep/res/layout/overview_actions_container.xml
|
||||||
|
@@ -45,6 +45,21 @@
|
||||||
|
android:layout_height="1dp"
|
||||||
|
android:layout_weight="1" />
|
||||||
|
|
||||||
|
+ <Button
|
||||||
|
+ style="@style/OverviewActionButton"
|
||||||
|
+ android:id="@+id/clear_all"
|
||||||
|
+ android:layout_width="wrap_content"
|
||||||
|
+ android:layout_height="wrap_content"
|
||||||
|
+ android:text="@string/recents_clear_all"
|
||||||
|
+ android:theme="@style/ThemeControlHighlightWorkspaceColor"
|
||||||
|
+ android:drawableStart="@drawable/ic_clear_all_recents"
|
||||||
|
+ />
|
||||||
|
+
|
||||||
|
+ <Space
|
||||||
|
+ android:layout_width="0dp"
|
||||||
|
+ android:layout_height="1dp"
|
||||||
|
+ android:layout_weight="1" />
|
||||||
|
+
|
||||||
|
<Button
|
||||||
|
android:id="@+id/action_share"
|
||||||
|
style="@style/OverviewActionButton"
|
||||||
|
@@ -63,4 +78,4 @@
|
||||||
|
android:visibility="gone" />
|
||||||
|
</LinearLayout>
|
||||||
|
|
||||||
|
-</com.android.quickstep.views.OverviewActionsView>
|
||||||
|
\ No newline at end of file
|
||||||
|
+</com.android.quickstep.views.OverviewActionsView>
|
||||||
|
diff --git a/quickstep/res/layout/overview_clear_all_button.xml b/quickstep/res/layout/overview_clear_all_button.xml
|
||||||
|
deleted file mode 100644
|
||||||
|
index fc06ba057..000000000
|
||||||
|
--- a/quickstep/res/layout/overview_clear_all_button.xml
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,27 +0,0 @@
|
||||||
|
-<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
-<!--
|
||||||
|
- Copyright (C) 2018 The Android Open Source Project
|
||||||
|
-
|
||||||
|
- Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
- you may not use this file except in compliance with the License.
|
||||||
|
- You may obtain a copy of the License at
|
||||||
|
-
|
||||||
|
- http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
-
|
||||||
|
- Unless required by applicable law or agreed to in writing, software
|
||||||
|
- distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
- See the License for the specific language governing permissions and
|
||||||
|
- limitations under the License.
|
||||||
|
--->
|
||||||
|
-<com.android.quickstep.views.ClearAllButton
|
||||||
|
- xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
- style="@android:style/Widget.DeviceDefault.Button.Borderless"
|
||||||
|
- android:id="@+id/clear_all"
|
||||||
|
- android:layout_width="wrap_content"
|
||||||
|
- android:layout_height="wrap_content"
|
||||||
|
- android:text="@string/recents_clear_all"
|
||||||
|
- android:textColor="?attr/workspaceTextColor"
|
||||||
|
- android:textSize="14sp"
|
||||||
|
- android:translationY="@dimen/task_thumbnail_half_top_margin"
|
||||||
|
- />
|
||||||
|
\ No newline at end of file
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
From 7a633a53d8e20e2d976597a332bf5ba855ec1f75 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Thu, 5 Sep 2019 02:08:22 +0000
|
||||||
|
Subject: [PATCH] vendor_lineage: Log privapp-permissions whitelist violations
|
||||||
|
instead
|
||||||
|
|
||||||
|
Change-Id: I49dba61f332253e291a65e79ca70d9a07d45bb07
|
||||||
|
---
|
||||||
|
config/common.mk | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/config/common.mk b/config/common.mk
|
||||||
|
index 2fe9cb01..7d971bba 100644
|
||||||
|
--- a/config/common.mk
|
||||||
|
+++ b/config/common.mk
|
||||||
|
@@ -70,9 +70,9 @@ PRODUCT_COPY_FILES += \
|
||||||
|
PRODUCT_COPY_FILES += \
|
||||||
|
vendor/lineage/config/permissions/org.lineageos.android.xml:$(TARGET_COPY_OUT_SYSTEM)/etc/permissions/org.lineageos.android.xml
|
||||||
|
|
||||||
|
-# Enforce privapp-permissions whitelist
|
||||||
|
+# Log privapp-permissions whitelist violations
|
||||||
|
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||||
|
- ro.control_privapp_permissions=enforce
|
||||||
|
+ ro.control_privapp_permissions=log
|
||||||
|
|
||||||
|
# Include AOSP audio files
|
||||||
|
include vendor/lineage/config/aosp_audio.mk
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
From f451664bce7527eb460615dfba0a5e4ad14a1847 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 20 Jun 2021 09:08:43 +0000
|
||||||
|
Subject: [PATCH] build: Integrate prop modifications (1/2)
|
||||||
|
|
||||||
|
Change-Id: I24f54937e3e542b7c29ea86d24e3f523583a0c61
|
||||||
|
---
|
||||||
|
tools/buildinfo.sh | 9 +++++++--
|
||||||
|
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/tools/buildinfo.sh b/tools/buildinfo.sh
|
||||||
|
index 954a01fb2..b3705cb6b 100755
|
||||||
|
--- a/tools/buildinfo.sh
|
||||||
|
+++ b/tools/buildinfo.sh
|
||||||
|
@@ -4,7 +4,7 @@ echo "# begin build properties"
|
||||||
|
echo "# autogenerated by buildinfo.sh"
|
||||||
|
|
||||||
|
echo "ro.build.id=$BUILD_ID"
|
||||||
|
-echo "ro.build.display.id=$BUILD_DISPLAY_ID"
|
||||||
|
+echo "ro.build.display.id=$BUILD_ID"
|
||||||
|
echo "ro.build.version.incremental=$BUILD_NUMBER"
|
||||||
|
echo "ro.build.version.sdk=$PLATFORM_SDK_VERSION"
|
||||||
|
echo "ro.build.version.preview_sdk=$PLATFORM_PREVIEW_SDK_VERSION"
|
||||||
|
@@ -16,7 +16,7 @@ echo "ro.build.version.release_or_codename=$PLATFORM_VERSION"
|
||||||
|
echo "ro.build.version.security_patch=$PLATFORM_SECURITY_PATCH"
|
||||||
|
echo "ro.build.version.base_os=$PLATFORM_BASE_OS"
|
||||||
|
echo "ro.build.version.min_supported_target_sdk=$PLATFORM_MIN_SUPPORTED_TARGET_SDK_VERSION"
|
||||||
|
-echo "ro.build.date=`$DATE`"
|
||||||
|
+echo "ro.build.date=`$DATE +\"%B %-d, %Y\"`"
|
||||||
|
echo "ro.build.date.utc=`$DATE +%s`"
|
||||||
|
echo "ro.build.type=$TARGET_BUILD_TYPE"
|
||||||
|
echo "ro.build.user=$BUILD_USERNAME"
|
||||||
|
@@ -54,5 +54,10 @@ if [ -n "$BUILD_THUMBPRINT" ] ; then
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "ro.lineage.device=$LINEAGE_DEVICE"
|
||||||
|
+echo "ro.lineage.version=LineageOS 18.1 Self-built CGMod"
|
||||||
|
+echo "ro.lineage.display.version=LineageOS 18.1 Self-built CGMod"
|
||||||
|
+echo "ro.modversion=LineageOS 18.1 Self-built CGMod"
|
||||||
|
+
|
||||||
|
+echo "lockscreen.rot_override=true"
|
||||||
|
|
||||||
|
echo "# end build properties"
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,57 @@
|
|||||||
|
From 2743f5130c127f18977c83c7fa2401a0776ec478 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Fri, 9 Mar 2018 15:41:26 +0800
|
||||||
|
Subject: [PATCH 01/18] UI: Disable left (seascape) navigation bar optionally
|
||||||
|
|
||||||
|
Toggle this behaviour with property "persist.ui.seascape.disable"
|
||||||
|
|
||||||
|
Change-Id: Ieb58efa4b59feeb0c4ac70e497f4c59aa04210d6
|
||||||
|
---
|
||||||
|
.../systemui/statusbar/phone/ReverseLinearLayout.java | 6 ++++++
|
||||||
|
services/core/java/com/android/server/wm/DisplayPolicy.java | 5 +++--
|
||||||
|
2 files changed, 9 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ReverseLinearLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ReverseLinearLayout.java
|
||||||
|
index d3ec187ef20..01d87cd12f7 100644
|
||||||
|
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ReverseLinearLayout.java
|
||||||
|
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ReverseLinearLayout.java
|
||||||
|
@@ -16,6 +16,7 @@ package com.android.systemui.statusbar.phone;
|
||||||
|
|
||||||
|
import android.annotation.Nullable;
|
||||||
|
import android.content.Context;
|
||||||
|
+import android.os.SystemProperties;
|
||||||
|
import android.util.AttributeSet;
|
||||||
|
import android.view.Gravity;
|
||||||
|
import android.view.View;
|
||||||
|
@@ -86,6 +87,11 @@ public class ReverseLinearLayout extends LinearLayout {
|
||||||
|
boolean isLayoutRtl = getLayoutDirection() == LAYOUT_DIRECTION_RTL;
|
||||||
|
boolean isLayoutReverse = isLayoutRtl ^ mIsAlternativeOrder;
|
||||||
|
|
||||||
|
+ boolean isSeascapeDisabled = SystemProperties.getBoolean("persist.ui.seascape.disable", false);
|
||||||
|
+ if (isSeascapeDisabled) {
|
||||||
|
+ isLayoutReverse = isLayoutRtl ^ true;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (mIsLayoutReverse != isLayoutReverse) {
|
||||||
|
// reversity changed, swap the order of all views.
|
||||||
|
int childCount = getChildCount();
|
||||||
|
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
|
||||||
|
index 97e4a9595da..18119560cd1 100644
|
||||||
|
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
|
||||||
|
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
|
||||||
|
@@ -3413,9 +3413,10 @@ public class DisplayPolicy {
|
||||||
|
@NavigationBarPosition
|
||||||
|
int navigationBarPosition(int displayWidth, int displayHeight, int displayRotation) {
|
||||||
|
if (navigationBarCanMove() && displayWidth > displayHeight) {
|
||||||
|
- if (displayRotation == Surface.ROTATION_270) {
|
||||||
|
+ boolean isSeascapeDisabled = SystemProperties.getBoolean("persist.ui.seascape.disable", false);
|
||||||
|
+ if (displayRotation == Surface.ROTATION_270 && !isSeascapeDisabled) {
|
||||||
|
return NAV_BAR_LEFT;
|
||||||
|
- } else if (displayRotation == Surface.ROTATION_90) {
|
||||||
|
+ } else {
|
||||||
|
return NAV_BAR_RIGHT;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,95 @@
|
|||||||
|
From 46a9bb999137ed1a0722f119970524cbce496183 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 26 Apr 2020 08:56:13 +0000
|
||||||
|
Subject: [PATCH 02/18] UI: Use SNAP_FIXED_RATIO for multi-window globally
|
||||||
|
|
||||||
|
Enables multiple snap targets under landscape for phone UI
|
||||||
|
|
||||||
|
Change-Id: I36e08f1e277dca0b0f9f99418671026e61b01496
|
||||||
|
---
|
||||||
|
core/res/res/values-land/config.xml | 19 -------------------
|
||||||
|
core/res/res/values-sw600dp/config.xml | 18 ++++++++----------
|
||||||
|
core/res/res/values/config.xml | 2 +-
|
||||||
|
3 files changed, 9 insertions(+), 30 deletions(-)
|
||||||
|
delete mode 100644 core/res/res/values-land/config.xml
|
||||||
|
|
||||||
|
diff --git a/core/res/res/values-land/config.xml b/core/res/res/values-land/config.xml
|
||||||
|
deleted file mode 100644
|
||||||
|
index 7308dc5882c..00000000000
|
||||||
|
--- a/core/res/res/values-land/config.xml
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,19 +0,0 @@
|
||||||
|
-<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
-<!--
|
||||||
|
- ~ Copyright (C) 2015 The Android Open Source Project
|
||||||
|
- ~
|
||||||
|
- ~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
- ~ you may not use this file except in compliance with the License.
|
||||||
|
- ~ You may obtain a copy of the License at
|
||||||
|
- ~
|
||||||
|
- ~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
- ~
|
||||||
|
- ~ Unless required by applicable law or agreed to in writing, software
|
||||||
|
- ~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
- ~ See the License for the specific language governing permissions and
|
||||||
|
- ~ limitations under the License
|
||||||
|
- -->
|
||||||
|
-<resources>
|
||||||
|
- <integer name="config_dockedStackDividerSnapMode">2</integer>
|
||||||
|
-</resources>
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/core/res/res/values-sw600dp/config.xml b/core/res/res/values-sw600dp/config.xml
|
||||||
|
index 34b6a54be49..3921c9edfea 100644
|
||||||
|
--- a/core/res/res/values-sw600dp/config.xml
|
||||||
|
+++ b/core/res/res/values-sw600dp/config.xml
|
||||||
|
@@ -3,16 +3,16 @@
|
||||||
|
/*
|
||||||
|
** Copyright 2009, The Android Open Source Project
|
||||||
|
**
|
||||||
|
-** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
-** you may not use this file except in compliance with the License.
|
||||||
|
-** You may obtain a copy of the License at
|
||||||
|
+** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
+** you may not use this file except in compliance with the License.
|
||||||
|
+** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
-** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
+** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
-** Unless required by applicable law or agreed to in writing, software
|
||||||
|
-** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
-** See the License for the specific language governing permissions and
|
||||||
|
+** Unless required by applicable law or agreed to in writing, software
|
||||||
|
+** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
+** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
@@ -40,8 +40,6 @@
|
||||||
|
<!-- Use a larger scaling span for larger screen devices. -->
|
||||||
|
<dimen name="config_minScalingSpan">32mm</dimen>
|
||||||
|
|
||||||
|
- <integer name="config_dockedStackDividerSnapMode">1</integer>
|
||||||
|
-
|
||||||
|
<!-- Controls whether the nav bar can move from the bottom to the side in landscape.
|
||||||
|
Only applies if the device display is not square. -->
|
||||||
|
<bool name="config_navBarCanMove">false</bool>
|
||||||
|
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
|
||||||
|
index f761d28e68d..b1ee670fc6a 100644
|
||||||
|
--- a/core/res/res/values/config.xml
|
||||||
|
+++ b/core/res/res/values/config.xml
|
||||||
|
@@ -3313,7 +3313,7 @@
|
||||||
|
1 - 3 snap targets: fixed ratio, 1:1, (1 - fixed ratio)
|
||||||
|
2 - 1 snap target: 1:1
|
||||||
|
-->
|
||||||
|
- <integer name="config_dockedStackDividerSnapMode">0</integer>
|
||||||
|
+ <integer name="config_dockedStackDividerSnapMode">1</integer>
|
||||||
|
|
||||||
|
<!-- The maximum aspect ratio (longerSide/shorterSide) that is treated as close-to-square. The
|
||||||
|
orientation requests from apps would be ignored if the display is close-to-square. -->
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,26 @@
|
|||||||
|
From dcbba0a8db63f78730b01606462a92653ef18ae3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Wed, 3 Jun 2020 01:31:34 +0000
|
||||||
|
Subject: [PATCH 03/18] UI: Increase default status bar height
|
||||||
|
|
||||||
|
Change-Id: Ibbcf63159e19bb2bb2b1094ea07ab85917630b07
|
||||||
|
---
|
||||||
|
core/res/res/values/dimens.xml | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
|
||||||
|
index d165930d3c9..eb537474b97 100644
|
||||||
|
--- a/core/res/res/values/dimens.xml
|
||||||
|
+++ b/core/res/res/values/dimens.xml
|
||||||
|
@@ -35,7 +35,7 @@
|
||||||
|
<dimen name="status_bar_height">@dimen/status_bar_height_portrait</dimen>
|
||||||
|
<!-- Height of the status bar in portrait. The height should be
|
||||||
|
Max((status bar content height + waterfall top size), top cutout size) -->
|
||||||
|
- <dimen name="status_bar_height_portrait">24dp</dimen>
|
||||||
|
+ <dimen name="status_bar_height_portrait">28dp</dimen>
|
||||||
|
<!-- Height of the status bar in landscape. The height should be
|
||||||
|
Max((status bar content height + waterfall top size), top cutout size) -->
|
||||||
|
<dimen name="status_bar_height_landscape">@dimen/status_bar_height_portrait</dimen>
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
From 39e612fc6c8c818da613564cb284d6881b53603e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Wed, 7 Oct 2020 14:00:35 +0000
|
||||||
|
Subject: [PATCH 04/18] UI: Always render windows into cutouts
|
||||||
|
|
||||||
|
Eliminates black/white letterboxing
|
||||||
|
Quick and dirty way to do the latter - wait for proper fix from Google
|
||||||
|
|
||||||
|
Change-Id: I4661c7979bfa7de453329fcddbaeefc2009e2da3
|
||||||
|
---
|
||||||
|
services/core/java/com/android/server/wm/DisplayPolicy.java | 5 +----
|
||||||
|
1 file changed, 1 insertion(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
|
||||||
|
index 18119560cd1..6f18d102019 100644
|
||||||
|
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
|
||||||
|
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
|
||||||
|
@@ -1702,7 +1702,6 @@ public class DisplayPolicy {
|
||||||
|
void simulateLayoutDisplay(DisplayFrames displayFrames, InsetsState insetsState,
|
||||||
|
SparseArray<Rect> barContentFrames) {
|
||||||
|
displayFrames.onBeginLayout();
|
||||||
|
- updateInsetsStateForDisplayCutout(displayFrames, insetsState);
|
||||||
|
insetsState.setDisplayFrame(displayFrames.mUnrestricted);
|
||||||
|
final WindowFrames simulatedWindowFrames = new WindowFrames();
|
||||||
|
if (mNavigationBar != null) {
|
||||||
|
@@ -1731,8 +1730,6 @@ public class DisplayPolicy {
|
||||||
|
*/
|
||||||
|
public void beginLayoutLw(DisplayFrames displayFrames, int uiMode) {
|
||||||
|
displayFrames.onBeginLayout();
|
||||||
|
- updateInsetsStateForDisplayCutout(displayFrames,
|
||||||
|
- mDisplayContent.getInsetsStateController().getRawInsetsState());
|
||||||
|
mSystemGestures.screenWidth = displayFrames.mUnrestricted.width();
|
||||||
|
mSystemGestures.screenHeight = displayFrames.mUnrestricted.height();
|
||||||
|
|
||||||
|
@@ -2593,7 +2590,7 @@ public class DisplayPolicy {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- final int cutoutMode = attrs.layoutInDisplayCutoutMode;
|
||||||
|
+ final int cutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
|
||||||
|
final boolean attachedInParent = attached != null && !layoutInScreen;
|
||||||
|
final boolean requestedFullscreen = (fl & FLAG_FULLSCREEN) != 0
|
||||||
|
|| (requestedSysUiFl & View.SYSTEM_UI_FLAG_FULLSCREEN) != 0
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,34 @@
|
|||||||
|
From 9a8d7eada09d1940b3e12dcbbb95b1e6cfdafb18 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Vachounet <vachounet@live.fr>
|
||||||
|
Date: Wed, 14 Oct 2020 11:43:10 +0200
|
||||||
|
Subject: [PATCH 05/18] UI: Remove black background from power menu
|
||||||
|
|
||||||
|
Change-Id: I87092d57ea457e6d6783c87b8a64b4e69dec2d8a
|
||||||
|
---
|
||||||
|
.../android/systemui/globalactions/GlobalActionsDialog.java | 3 +--
|
||||||
|
1 file changed, 1 insertion(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
|
||||||
|
index f8f94b0bff6..04d35341c41 100644
|
||||||
|
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
|
||||||
|
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
|
||||||
|
@@ -2696,7 +2696,7 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
|
||||||
|
initializeWalletView();
|
||||||
|
if (mBackgroundDrawable == null) {
|
||||||
|
mBackgroundDrawable = new ScrimDrawable();
|
||||||
|
- mScrimAlpha = 1.0f;
|
||||||
|
+ mScrimAlpha = 0.45f;
|
||||||
|
}
|
||||||
|
getWindow().setBackgroundDrawable(mBackgroundDrawable);
|
||||||
|
}
|
||||||
|
@@ -2733,7 +2733,6 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
|
||||||
|
if (!(mBackgroundDrawable instanceof ScrimDrawable)) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
- ((ScrimDrawable) mBackgroundDrawable).setColor(Color.BLACK, animate);
|
||||||
|
View decorView = getWindow().getDecorView();
|
||||||
|
if (colors.supportsDarkText()) {
|
||||||
|
decorView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR |
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,88 @@
|
|||||||
|
From 508d9e0843d9519344d76cd32e38148ee8975833 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Mon, 26 Oct 2020 14:06:56 +0000
|
||||||
|
Subject: [PATCH 06/18] UI: Reconfigure power menu items
|
||||||
|
|
||||||
|
- Show only the important items (GTFO Emergency)
|
||||||
|
- Make 4 columns
|
||||||
|
- Always include screenshot
|
||||||
|
|
||||||
|
Change-Id: I32cca6e2c6bb64d891efee959127edf7c0802cbc
|
||||||
|
---
|
||||||
|
core/res/res/values/config.xml | 5 +----
|
||||||
|
packages/SystemUI/res/values-land/config.xml | 19 ++++++++-----------
|
||||||
|
packages/SystemUI/res/values/config.xml | 2 +-
|
||||||
|
3 files changed, 10 insertions(+), 16 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
|
||||||
|
index b1ee670fc6a..5efb4156466 100644
|
||||||
|
--- a/core/res/res/values/config.xml
|
||||||
|
+++ b/core/res/res/values/config.xml
|
||||||
|
@@ -2779,13 +2779,10 @@
|
||||||
|
"logout" = Logout the current user
|
||||||
|
-->
|
||||||
|
<string-array translatable="false" name="config_globalActionsList">
|
||||||
|
- <item>emergency</item>
|
||||||
|
- <item>lockdown</item>
|
||||||
|
<item>power</item>
|
||||||
|
<item>restart</item>
|
||||||
|
- <item>logout</item>
|
||||||
|
<item>screenshot</item>
|
||||||
|
- <item>bugreport</item>
|
||||||
|
+ <item>airplane</item>
|
||||||
|
</string-array>
|
||||||
|
|
||||||
|
<!-- Number of milliseconds to hold a wake lock to ensure that drawing is fully
|
||||||
|
diff --git a/packages/SystemUI/res/values-land/config.xml b/packages/SystemUI/res/values-land/config.xml
|
||||||
|
index 2f7fbaff4ed..8b7ae652846 100644
|
||||||
|
--- a/packages/SystemUI/res/values-land/config.xml
|
||||||
|
+++ b/packages/SystemUI/res/values-land/config.xml
|
||||||
|
@@ -3,16 +3,16 @@
|
||||||
|
/*
|
||||||
|
** Copyright 2011, The Android Open Source Project
|
||||||
|
**
|
||||||
|
-** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
-** you may not use this file except in compliance with the License.
|
||||||
|
-** You may obtain a copy of the License at
|
||||||
|
+** Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
+** you may not use this file except in compliance with the License.
|
||||||
|
+** You may obtain a copy of the License at
|
||||||
|
**
|
||||||
|
-** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
+** http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
**
|
||||||
|
-** Unless required by applicable law or agreed to in writing, software
|
||||||
|
-** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
-** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
-** See the License for the specific language governing permissions and
|
||||||
|
+** Unless required by applicable law or agreed to in writing, software
|
||||||
|
+** distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
+** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
+** See the License for the specific language governing permissions and
|
||||||
|
** limitations under the License.
|
||||||
|
*/
|
||||||
|
-->
|
||||||
|
@@ -34,7 +34,4 @@
|
||||||
|
|
||||||
|
<!-- Max number of columns for quick controls area -->
|
||||||
|
<integer name="controls_max_columns">4</integer>
|
||||||
|
-
|
||||||
|
- <!-- Max number of columns for power menu -->
|
||||||
|
- <integer name="power_menu_max_columns">4</integer>
|
||||||
|
</resources>
|
||||||
|
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
|
||||||
|
index d86f3fa277f..fd9ec3166fb 100644
|
||||||
|
--- a/packages/SystemUI/res/values/config.xml
|
||||||
|
+++ b/packages/SystemUI/res/values/config.xml
|
||||||
|
@@ -572,7 +572,7 @@
|
||||||
|
<integer name="controls_max_columns">2</integer>
|
||||||
|
|
||||||
|
<!-- Max number of columns for power menu -->
|
||||||
|
- <integer name="power_menu_max_columns">3</integer>
|
||||||
|
+ <integer name="power_menu_max_columns">4</integer>
|
||||||
|
|
||||||
|
<!-- If the dp width of the available space is <= this value, potentially adjust the number
|
||||||
|
of columns-->
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,34 @@
|
|||||||
|
From 2253b5c60f551017965f7d6131ce777ac56713ce Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sat, 15 May 2021 10:15:12 +0000
|
||||||
|
Subject: [PATCH 07/18] UI: Tap outside to dismiss power menu
|
||||||
|
|
||||||
|
Change-Id: Id713b84a2edb3facc184394963f98291abe6ae2c
|
||||||
|
---
|
||||||
|
.../systemui/globalactions/GlobalActionsDialog.java | 10 ++++++++++
|
||||||
|
1 file changed, 10 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
|
||||||
|
index 04d35341c41..4552792b3f5 100644
|
||||||
|
--- a/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
|
||||||
|
+++ b/packages/SystemUI/src/com/android/systemui/globalactions/GlobalActionsDialog.java
|
||||||
|
@@ -2699,6 +2699,16 @@ public class GlobalActionsDialog implements DialogInterface.OnDismissListener,
|
||||||
|
mScrimAlpha = 0.45f;
|
||||||
|
}
|
||||||
|
getWindow().setBackgroundDrawable(mBackgroundDrawable);
|
||||||
|
+
|
||||||
|
+ ViewGroup root = findViewById(com.android.systemui.R.id.global_actions_grid_root);
|
||||||
|
+ if (root != null) {
|
||||||
|
+ root.setOnClickListener(new View.OnClickListener() {
|
||||||
|
+ @Override
|
||||||
|
+ public void onClick(View v) {
|
||||||
|
+ dismiss();
|
||||||
|
+ }
|
||||||
|
+ });
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
private void fixNavBarClipping() {
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,28 @@
|
|||||||
|
From 557c1fd05415a15beb4c1d6f6c021dc66a28957d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Tue, 29 Jun 2021 22:57:01 +0000
|
||||||
|
Subject: [PATCH 08/18] UI: Relax requirement for HINT_SUPPORTS_DARK_TEXT
|
||||||
|
|
||||||
|
I decide what's good enough for a wallpaper!
|
||||||
|
|
||||||
|
Change-Id: I5ccd85b3df12e53746a4ac6cbc37ba8d11f6c336
|
||||||
|
---
|
||||||
|
core/java/android/app/WallpaperColors.java | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/core/java/android/app/WallpaperColors.java b/core/java/android/app/WallpaperColors.java
|
||||||
|
index e4818b27434..67208f0ebed 100644
|
||||||
|
--- a/core/java/android/app/WallpaperColors.java
|
||||||
|
+++ b/core/java/android/app/WallpaperColors.java
|
||||||
|
@@ -413,7 +413,7 @@ public final class WallpaperColors implements Parcelable {
|
||||||
|
|
||||||
|
int hints = 0;
|
||||||
|
double meanLuminance = totalLuminance / pixels.length;
|
||||||
|
- if (meanLuminance > BRIGHT_IMAGE_MEAN_LUMINANCE && darkPixels < maxDarkPixels) {
|
||||||
|
+ if (meanLuminance > BRIGHT_IMAGE_MEAN_LUMINANCE) {
|
||||||
|
hints |= HINT_SUPPORTS_DARK_TEXT;
|
||||||
|
}
|
||||||
|
if (meanLuminance < DARK_THEME_MEAN_LUMINANCE) {
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,107 @@
|
|||||||
|
From e894e06a986225263ec0828595edc5f22f01d59b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Tue, 29 Jun 2021 23:01:07 +0000
|
||||||
|
Subject: [PATCH 09/18] UI: Force dark QS scrim
|
||||||
|
|
||||||
|
Side effect from using light wallpapers
|
||||||
|
|
||||||
|
Change-Id: I241dfd7cf8d8bfce1503e7872c5359c380fdbfed
|
||||||
|
---
|
||||||
|
.../systemui/qs/QuickStatusBarHeader.java | 5 -----
|
||||||
|
.../stack/NotificationStackScrollLayout.java | 2 +-
|
||||||
|
.../statusbar/phone/ScrimController.java | 21 ++++++-------------
|
||||||
|
3 files changed, 7 insertions(+), 21 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
|
||||||
|
index 94fd996d085..f82ec46c1ea 100644
|
||||||
|
--- a/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
|
||||||
|
+++ b/packages/SystemUI/src/com/android/systemui/qs/QuickStatusBarHeader.java
|
||||||
|
@@ -411,11 +411,6 @@ public class QuickStatusBarHeader extends RelativeLayout implements
|
||||||
|
protected void onConfigurationChanged(Configuration newConfig) {
|
||||||
|
super.onConfigurationChanged(newConfig);
|
||||||
|
updateResources();
|
||||||
|
-
|
||||||
|
- // Update color schemes in landscape to use wallpaperTextColor
|
||||||
|
- boolean shouldUseWallpaperTextColor =
|
||||||
|
- newConfig.orientation == Configuration.ORIENTATION_LANDSCAPE;
|
||||||
|
- mClockView.useWallpaperTextColor(shouldUseWallpaperTextColor);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
|
||||||
|
index a4a58194a46..05199cec01a 100644
|
||||||
|
--- a/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
|
||||||
|
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/notification/stack/NotificationStackScrollLayout.java
|
||||||
|
@@ -541,7 +541,7 @@ public class NotificationStackScrollLayout extends ViewGroup implements ScrollAd
|
||||||
|
|
||||||
|
private SysuiColorExtractor.OnColorsChangedListener mOnColorsChangedListener =
|
||||||
|
(colorExtractor, which) -> {
|
||||||
|
- final boolean useDarkText = mColorExtractor.getNeutralColors().supportsDarkText();
|
||||||
|
+ final boolean useDarkText = false;
|
||||||
|
updateDecorViews(useDarkText);
|
||||||
|
};
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
|
||||||
|
index 686b8712723..96702a831cd 100644
|
||||||
|
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
|
||||||
|
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/ScrimController.java
|
||||||
|
@@ -35,9 +35,7 @@ import android.view.animation.DecelerateInterpolator;
|
||||||
|
import android.view.animation.Interpolator;
|
||||||
|
|
||||||
|
import com.android.internal.annotations.VisibleForTesting;
|
||||||
|
-import com.android.internal.colorextraction.ColorExtractor;
|
||||||
|
import com.android.internal.colorextraction.ColorExtractor.GradientColors;
|
||||||
|
-import com.android.internal.colorextraction.ColorExtractor.OnColorsChangedListener;
|
||||||
|
import com.android.internal.graphics.ColorUtils;
|
||||||
|
import com.android.internal.util.function.TriConsumer;
|
||||||
|
import com.android.keyguard.KeyguardUpdateMonitor;
|
||||||
|
@@ -69,8 +67,7 @@ import javax.inject.Singleton;
|
||||||
|
* security method gets shown).
|
||||||
|
*/
|
||||||
|
@Singleton
|
||||||
|
-public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnColorsChangedListener,
|
||||||
|
- Dumpable {
|
||||||
|
+public class ScrimController implements ViewTreeObserver.OnPreDrawListener, Dumpable {
|
||||||
|
|
||||||
|
static final String TAG = "ScrimController";
|
||||||
|
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
||||||
|
@@ -149,7 +146,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
|
||||||
|
private final KeyguardVisibilityCallback mKeyguardVisibilityCallback;
|
||||||
|
private final Handler mHandler;
|
||||||
|
|
||||||
|
- private final SysuiColorExtractor mColorExtractor;
|
||||||
|
private GradientColors mColors;
|
||||||
|
private boolean mNeedsDrawableColorUpdate;
|
||||||
|
|
||||||
|
@@ -226,9 +222,11 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
- mColorExtractor = sysuiColorExtractor;
|
||||||
|
- mColorExtractor.addOnColorsChangedListener(this);
|
||||||
|
- mColors = mColorExtractor.getNeutralColors();
|
||||||
|
+ mColors = new GradientColors();
|
||||||
|
+ mColors.setMainColor(-14671580);
|
||||||
|
+ mColors.setSecondaryColor(-14671580);
|
||||||
|
+ mColors.setColorPalette(new int[] {-14671580});
|
||||||
|
+ mColors.setSupportsDarkText(false);
|
||||||
|
mNeedsDrawableColorUpdate = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -941,13 +939,6 @@ public class ScrimController implements ViewTreeObserver.OnPreDrawListener, OnCo
|
||||||
|
// Don't care in the base class.
|
||||||
|
}
|
||||||
|
|
||||||
|
- @Override
|
||||||
|
- public void onColorsChanged(ColorExtractor colorExtractor, int which) {
|
||||||
|
- mColors = mColorExtractor.getNeutralColors();
|
||||||
|
- mNeedsDrawableColorUpdate = true;
|
||||||
|
- scheduleUpdate();
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
@Override
|
||||||
|
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
|
||||||
|
pw.println(" ScrimController: ");
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
From 5ad738126de00c6c36b6a00ad0cc0afa5546fe56 Mon Sep 17 00:00:00 2001
|
||||||
|
From: AndyCGYan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Thu, 27 Dec 2018 16:38:19 +0800
|
||||||
|
Subject: [PATCH 10/18] Keyguard: Show shortcuts by default
|
||||||
|
|
||||||
|
Change-Id: I5655e0be26cec61214735719dffcda810286cd41
|
||||||
|
---
|
||||||
|
packages/SystemUI/res/values/config.xml | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
|
||||||
|
index fd9ec3166fb..2fb057cb635 100644
|
||||||
|
--- a/packages/SystemUI/res/values/config.xml
|
||||||
|
+++ b/packages/SystemUI/res/values/config.xml
|
||||||
|
@@ -69,10 +69,10 @@
|
||||||
|
<integer translatable="false" name="config_search_panel_view_vibration_duration">20</integer>
|
||||||
|
|
||||||
|
<!-- Show mic or phone affordance on Keyguard -->
|
||||||
|
- <bool name="config_keyguardShowLeftAffordance">false</bool>
|
||||||
|
+ <bool name="config_keyguardShowLeftAffordance">true</bool>
|
||||||
|
|
||||||
|
<!-- Show camera affordance on Keyguard -->
|
||||||
|
- <bool name="config_keyguardShowCameraAffordance">false</bool>
|
||||||
|
+ <bool name="config_keyguardShowCameraAffordance">true</bool>
|
||||||
|
|
||||||
|
<!-- The length of the vibration when the notification pops open. -->
|
||||||
|
<integer name="one_finger_pop_duration_ms">10</integer>
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,260 @@
|
|||||||
|
From 205d654cd20275c36b5d0826bfe8648ab80118ea Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sat, 2 Nov 2019 07:52:36 +0000
|
||||||
|
Subject: [PATCH 11/18] Keyguard: Revert date and clock to Lollipop style
|
||||||
|
|
||||||
|
Also ported dynamic date format based on alarm presence from Oreo
|
||||||
|
|
||||||
|
Change-Id: I0f61c641ffb2a3e1e6b4da738792ee4ac1d77434
|
||||||
|
---
|
||||||
|
.../layout/keyguard_clock_switch.xml | 3 ---
|
||||||
|
.../layout/keyguard_status_view.xml | 1 -
|
||||||
|
.../res-keyguard/values-h560dp/dimens.xml | 2 +-
|
||||||
|
.../res-keyguard/values-h650dp/dimens.xml | 2 +-
|
||||||
|
.../SystemUI/res-keyguard/values/dimens.xml | 6 ++---
|
||||||
|
.../SystemUI/res-keyguard/values/strings.xml | 4 ++--
|
||||||
|
.../SystemUI/res-keyguard/values/styles.xml | 18 ++++-----------
|
||||||
|
.../res/layout/keyguard_status_bar.xml | 2 +-
|
||||||
|
.../android/keyguard/KeyguardSliceView.java | 2 +-
|
||||||
|
.../keyguard/KeyguardSliceProvider.java | 22 +++++++++++--------
|
||||||
|
10 files changed, 26 insertions(+), 36 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml
|
||||||
|
index bf2963cd0b7..5fb06f38bd4 100644
|
||||||
|
--- a/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml
|
||||||
|
+++ b/packages/SystemUI/res-keyguard/layout/keyguard_clock_switch.xml
|
||||||
|
@@ -36,8 +36,6 @@
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center_horizontal"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
- android:paddingBottom="@dimen/title_clock_padding"
|
||||||
|
- android:letterSpacing="0.02"
|
||||||
|
android:textColor="?attr/wallpaperTextColor"
|
||||||
|
android:singleLine="true"
|
||||||
|
style="@style/widget_big"
|
||||||
|
@@ -51,7 +49,6 @@
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="bottom|center_horizontal"
|
||||||
|
android:gravity="center_horizontal"
|
||||||
|
- android:letterSpacing="0.03"
|
||||||
|
android:textColor="?attr/wallpaperTextColor"
|
||||||
|
android:singleLine="true"
|
||||||
|
style="@style/widget_title_bold"
|
||||||
|
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_status_view.xml b/packages/SystemUI/res-keyguard/layout/keyguard_status_view.xml
|
||||||
|
index 10cd3cba713..9845a02399b 100644
|
||||||
|
--- a/packages/SystemUI/res-keyguard/layout/keyguard_status_view.xml
|
||||||
|
+++ b/packages/SystemUI/res-keyguard/layout/keyguard_status_view.xml
|
||||||
|
@@ -67,7 +67,6 @@
|
||||||
|
android:layout_centerHorizontal="true"
|
||||||
|
android:textColor="?attr/wallpaperTextColorSecondary"
|
||||||
|
android:textSize="@dimen/widget_label_font_size"
|
||||||
|
- android:letterSpacing="0.05"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
android:singleLine="true" />
|
||||||
|
<com.android.systemui.statusbar.phone.NotificationIconContainer
|
||||||
|
diff --git a/packages/SystemUI/res-keyguard/values-h560dp/dimens.xml b/packages/SystemUI/res-keyguard/values-h560dp/dimens.xml
|
||||||
|
index 669f8fb642d..345b3d9c707 100644
|
||||||
|
--- a/packages/SystemUI/res-keyguard/values-h560dp/dimens.xml
|
||||||
|
+++ b/packages/SystemUI/res-keyguard/values-h560dp/dimens.xml
|
||||||
|
@@ -16,5 +16,5 @@
|
||||||
|
-->
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
- <dimen name="widget_big_font_size">54dp</dimen>
|
||||||
|
+ <dimen name="widget_big_font_size">88dp</dimen>
|
||||||
|
</resources>
|
||||||
|
diff --git a/packages/SystemUI/res-keyguard/values-h650dp/dimens.xml b/packages/SystemUI/res-keyguard/values-h650dp/dimens.xml
|
||||||
|
index 669f8fb642d..345b3d9c707 100644
|
||||||
|
--- a/packages/SystemUI/res-keyguard/values-h650dp/dimens.xml
|
||||||
|
+++ b/packages/SystemUI/res-keyguard/values-h650dp/dimens.xml
|
||||||
|
@@ -16,5 +16,5 @@
|
||||||
|
-->
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
- <dimen name="widget_big_font_size">54dp</dimen>
|
||||||
|
+ <dimen name="widget_big_font_size">88dp</dimen>
|
||||||
|
</resources>
|
||||||
|
diff --git a/packages/SystemUI/res-keyguard/values/dimens.xml b/packages/SystemUI/res-keyguard/values/dimens.xml
|
||||||
|
index f9389ce24d9..cf3a8d79712 100644
|
||||||
|
--- a/packages/SystemUI/res-keyguard/values/dimens.xml
|
||||||
|
+++ b/packages/SystemUI/res-keyguard/values/dimens.xml
|
||||||
|
@@ -42,13 +42,13 @@
|
||||||
|
<dimen name="eca_overlap">-10dip</dimen>
|
||||||
|
|
||||||
|
<!-- Slice header -->
|
||||||
|
- <dimen name="widget_title_font_size">24dp</dimen>
|
||||||
|
+ <dimen name="widget_title_font_size">16dp</dimen>
|
||||||
|
<dimen name="header_subtitle_padding">12dp</dimen>
|
||||||
|
<dimen name="header_icon_size">16dp</dimen>
|
||||||
|
<!-- Slice subtitle -->
|
||||||
|
- <dimen name="widget_label_font_size">18dp</dimen>
|
||||||
|
+ <dimen name="widget_label_font_size">16dp</dimen>
|
||||||
|
<!-- Clock without header -->
|
||||||
|
- <dimen name="widget_big_font_size">54dp</dimen>
|
||||||
|
+ <dimen name="widget_big_font_size">88dp</dimen>
|
||||||
|
<dimen name="bottom_text_spacing_digital">0dp</dimen>
|
||||||
|
<dimen name="title_clock_padding">4dp</dimen>
|
||||||
|
<!-- Clock with header -->
|
||||||
|
diff --git a/packages/SystemUI/res-keyguard/values/strings.xml b/packages/SystemUI/res-keyguard/values/strings.xml
|
||||||
|
index 4b6621379b4..3f7b909bf8e 100644
|
||||||
|
--- a/packages/SystemUI/res-keyguard/values/strings.xml
|
||||||
|
+++ b/packages/SystemUI/res-keyguard/values/strings.xml
|
||||||
|
@@ -115,9 +115,9 @@
|
||||||
|
<string name="keyguard_carrier_name_with_sim_locked_template" translatable="false"><xliff:g id="carrier">%s</xliff:g> (<xliff:g id="message">%s</xliff:g>)</string>
|
||||||
|
|
||||||
|
<!-- Time format strings for fall-back clock widget -->
|
||||||
|
- <string name="keyguard_widget_12_hours_format" translatable="false">h:mm</string>
|
||||||
|
+ <string name="keyguard_widget_12_hours_format" translatable="false">hh:mm</string>
|
||||||
|
<!-- Time format strings for fall-back clock widget -->
|
||||||
|
- <string name="keyguard_widget_24_hours_format" translatable="false">kk:mm</string>
|
||||||
|
+ <string name="keyguard_widget_24_hours_format" translatable="false">HH:mm</string>
|
||||||
|
<!-- The character used in keyguard_widget_12_hours_format and keyguard_widget_24_hours_format
|
||||||
|
to represent a ":". -->
|
||||||
|
<string name="keyguard_fancy_colon" translatable="false"></string>
|
||||||
|
diff --git a/packages/SystemUI/res-keyguard/values/styles.xml b/packages/SystemUI/res-keyguard/values/styles.xml
|
||||||
|
index 401f3e3e068..6ad077aaa5a 100644
|
||||||
|
--- a/packages/SystemUI/res-keyguard/values/styles.xml
|
||||||
|
+++ b/packages/SystemUI/res-keyguard/values/styles.xml
|
||||||
|
@@ -65,29 +65,23 @@
|
||||||
|
<style name="widget_big">
|
||||||
|
<item name="android:textSize">@dimen/widget_big_font_size</item>
|
||||||
|
<item name="android:paddingBottom">@dimen/bottom_text_spacing_digital</item>
|
||||||
|
- <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
|
||||||
|
+ <item name="android:fontFamily">sans-serif-thin</item>
|
||||||
|
<item name="android:fontFeatureSettings">@*android:string/config_headlineFontFeatureSettings</item>
|
||||||
|
<item name="android:ellipsize">none</item>
|
||||||
|
- <item name="android:shadowColor">@color/keyguard_shadow_color</item>
|
||||||
|
- <item name="android:shadowRadius">?attr/shadowRadius</item>
|
||||||
|
</style>
|
||||||
|
<style name="widget_title_bold">
|
||||||
|
<item name="android:textStyle">bold</item>
|
||||||
|
<item name="android:textSize">@dimen/widget_title_font_size</item>
|
||||||
|
<item name="android:paddingBottom">@dimen/widget_vertical_padding_clock</item>
|
||||||
|
- <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
|
||||||
|
+ <item name="android:fontFamily">sans-serif</item>
|
||||||
|
<item name="android:ellipsize">none</item>
|
||||||
|
- <item name="android:shadowColor">@color/keyguard_shadow_color</item>
|
||||||
|
- <item name="android:shadowRadius">?attr/shadowRadius</item>
|
||||||
|
</style>
|
||||||
|
<style name="widget_small_bold">
|
||||||
|
<item name="android:textStyle">bold</item>
|
||||||
|
<item name="android:textSize">@dimen/widget_small_font_size</item>
|
||||||
|
<item name="android:paddingBottom">@dimen/bottom_text_spacing_digital</item>
|
||||||
|
- <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
|
||||||
|
+ <item name="android:fontFamily">sans-serif</item>
|
||||||
|
<item name="android:ellipsize">none</item>
|
||||||
|
- <item name="android:shadowColor">@color/keyguard_shadow_color</item>
|
||||||
|
- <item name="android:shadowRadius">?attr/shadowRadius</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="BouncerSecurityContainer">
|
||||||
|
@@ -119,9 +113,7 @@
|
||||||
|
<item name="android:gravity">center</item>
|
||||||
|
<item name="android:ellipsize">end</item>
|
||||||
|
<item name="android:maxLines">2</item>
|
||||||
|
- <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
|
||||||
|
- <item name="android:shadowColor">@color/keyguard_shadow_color</item>
|
||||||
|
- <item name="android:shadowRadius">?attr/shadowRadius</item>
|
||||||
|
+ <item name="android:fontFamily">sans-serif</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="TextAppearance.Keyguard.Secondary">
|
||||||
|
@@ -135,8 +127,6 @@
|
||||||
|
<item name="android:textSize">14sp</item>
|
||||||
|
<item name="android:maxLines">1</item>
|
||||||
|
<item name="android:textColor">?attr/wallpaperTextColor</item>
|
||||||
|
- <item name="android:shadowColor">@color/keyguard_shadow_color</item>
|
||||||
|
- <item name="android:shadowRadius">?attr/shadowRadius</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</resources>
|
||||||
|
diff --git a/packages/SystemUI/res/layout/keyguard_status_bar.xml b/packages/SystemUI/res/layout/keyguard_status_bar.xml
|
||||||
|
index 2b22cc196db..58343800c2e 100644
|
||||||
|
--- a/packages/SystemUI/res/layout/keyguard_status_bar.xml
|
||||||
|
+++ b/packages/SystemUI/res/layout/keyguard_status_bar.xml
|
||||||
|
@@ -73,7 +73,7 @@
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
android:textDirection="locale"
|
||||||
|
- android:textAppearance="@style/TextAppearance.StatusBar.Clock"
|
||||||
|
+ android:textAppearance="?android:attr/textAppearanceSmall"
|
||||||
|
android:textColor="?attr/wallpaperTextColorSecondary"
|
||||||
|
android:singleLine="true"
|
||||||
|
systemui:showMissingSim="true"
|
||||||
|
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
|
||||||
|
index f639c880c97..5c42937eb6a 100644
|
||||||
|
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
|
||||||
|
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
|
||||||
|
@@ -502,7 +502,7 @@ public class KeyguardSliceView extends LinearLayout implements View.OnClickListe
|
||||||
|
for (int i = 0; i < childCount; i++) {
|
||||||
|
View child = getChildAt(i);
|
||||||
|
if (child instanceof KeyguardSliceTextView) {
|
||||||
|
- ((KeyguardSliceTextView) child).setMaxWidth(width / 3);
|
||||||
|
+ ((KeyguardSliceTextView) child).setMaxWidth(width);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
|
||||||
|
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
|
||||||
|
index 3a37c0fd463..70b7e5354e2 100644
|
||||||
|
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
|
||||||
|
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardSliceProvider.java
|
||||||
|
@@ -95,7 +95,7 @@ public class KeyguardSliceProvider extends SliceProvider implements
|
||||||
|
* Only show alarms that will ring within N hours.
|
||||||
|
*/
|
||||||
|
@VisibleForTesting
|
||||||
|
- static final int ALARM_VISIBILITY_HOURS = 12;
|
||||||
|
+ static final int ALARM_VISIBILITY_HOURS = 24;
|
||||||
|
|
||||||
|
private static final Object sInstanceLock = new Object();
|
||||||
|
private static KeyguardSliceProvider sInstance;
|
||||||
|
@@ -304,7 +304,10 @@ public class KeyguardSliceProvider extends SliceProvider implements
|
||||||
|
if (oldInstance != null) {
|
||||||
|
oldInstance.onDestroy();
|
||||||
|
}
|
||||||
|
- mDatePattern = getContext().getString(R.string.system_ui_aod_date_pattern);
|
||||||
|
+ boolean isNextAlarmPresent = withinNHoursLocked(mNextAlarmInfo, ALARM_VISIBILITY_HOURS);
|
||||||
|
+ mDatePattern = getContext().getString(isNextAlarmPresent
|
||||||
|
+ ? R.string.abbrev_wday_month_day_no_year_alarm
|
||||||
|
+ : R.string.abbrev_wday_month_day_no_year);
|
||||||
|
mPendingIntent = PendingIntent.getActivity(getContext(), 0,
|
||||||
|
new Intent(getContext(), KeyguardSliceProvider.class), 0);
|
||||||
|
mMediaManager.addCallback(this);
|
||||||
|
@@ -355,14 +358,17 @@ public class KeyguardSliceProvider extends SliceProvider implements
|
||||||
|
synchronized (this) {
|
||||||
|
if (withinNHoursLocked(mNextAlarmInfo, ALARM_VISIBILITY_HOURS)) {
|
||||||
|
String pattern = android.text.format.DateFormat.is24HourFormat(getContext(),
|
||||||
|
- ActivityManager.getCurrentUser()) ? "HH:mm" : "h:mm";
|
||||||
|
+ ActivityManager.getCurrentUser()) ? "E HH:mm" : "E hh:mm";
|
||||||
|
mNextAlarm = android.text.format.DateFormat.format(pattern,
|
||||||
|
mNextAlarmInfo.getTriggerTime()).toString();
|
||||||
|
+ mDatePattern = getContext().getString(R.string.abbrev_wday_month_day_no_year_alarm);
|
||||||
|
} else {
|
||||||
|
mNextAlarm = "";
|
||||||
|
+ mDatePattern = getContext().getString(R.string.abbrev_wday_month_day_no_year);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
notifyChange();
|
||||||
|
+ updateClockLocked();
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean withinNHoursLocked(AlarmManager.AlarmClockInfo alarmClockInfo, int hours) {
|
||||||
|
@@ -411,12 +417,10 @@ public class KeyguardSliceProvider extends SliceProvider implements
|
||||||
|
}
|
||||||
|
|
||||||
|
protected String getFormattedDateLocked() {
|
||||||
|
- if (mDateFormat == null) {
|
||||||
|
- final Locale l = Locale.getDefault();
|
||||||
|
- DateFormat format = DateFormat.getInstanceForSkeleton(mDatePattern, l);
|
||||||
|
- format.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE);
|
||||||
|
- mDateFormat = format;
|
||||||
|
- }
|
||||||
|
+ final Locale l = Locale.getDefault();
|
||||||
|
+ DateFormat format = DateFormat.getInstanceForSkeleton(mDatePattern, l);
|
||||||
|
+ format.setContext(DisplayContext.CAPITALIZATION_FOR_STANDALONE);
|
||||||
|
+ mDateFormat = format;
|
||||||
|
mCurrentTime.setTime(System.currentTimeMillis());
|
||||||
|
return mDateFormat.format(mCurrentTime);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,54 @@
|
|||||||
|
From 535b165f24d4166c515d2ad61ec65874d786fef5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sat, 2 Nov 2019 11:11:07 +0000
|
||||||
|
Subject: [PATCH 12/18] Keyguard: Fix clock position
|
||||||
|
|
||||||
|
New method - way easier than what was done on Pie
|
||||||
|
Still not perfect:
|
||||||
|
- Notification padding has to be taken care of in some other way - directly altering stackScrollerPadding causes visual glitches
|
||||||
|
|
||||||
|
Change-Id: Ia5cebd04c2cb4b324c04019afdf045d5489cf2b8
|
||||||
|
---
|
||||||
|
.../statusbar/phone/KeyguardClockPositionAlgorithm.java | 8 ++++----
|
||||||
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
|
||||||
|
index a3f14ba28dc..d1982ae5ad2 100644
|
||||||
|
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
|
||||||
|
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardClockPositionAlgorithm.java
|
||||||
|
@@ -177,7 +177,8 @@ public class KeyguardClockPositionAlgorithm {
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getMaxClockY() {
|
||||||
|
- return mHeight / 2 - mKeyguardStatusHeight - mClockNotificationsMargin;
|
||||||
|
+ // Align the center of the clock at 1/3 of the screen
|
||||||
|
+ return mHeight / 3 - mKeyguardStatusHeight / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getPreferredClockY() {
|
||||||
|
@@ -214,12 +215,11 @@ public class KeyguardClockPositionAlgorithm {
|
||||||
|
}
|
||||||
|
|
||||||
|
private int getClockY(float panelExpansion) {
|
||||||
|
- // Dark: Align the bottom edge of the clock at about half of the screen:
|
||||||
|
float clockYDark = (mHasCustomClock ? getPreferredClockY() : getMaxClockY())
|
||||||
|
+ burnInPreventionOffsetY();
|
||||||
|
clockYDark = MathUtils.max(0, clockYDark);
|
||||||
|
|
||||||
|
- float clockYRegular = getExpandedPreferredClockY();
|
||||||
|
+ float clockYRegular = getMaxClockY();
|
||||||
|
float clockYBouncer = -mKeyguardStatusHeight;
|
||||||
|
|
||||||
|
// Move clock up while collapsing the shade
|
||||||
|
@@ -240,7 +240,7 @@ public class KeyguardClockPositionAlgorithm {
|
||||||
|
* @return Alpha from 0 to 1.
|
||||||
|
*/
|
||||||
|
private float getClockAlpha(int y) {
|
||||||
|
- float alphaKeyguard = Math.max(0, y / Math.max(1f, getClockY(1f)));
|
||||||
|
+ float alphaKeyguard = Math.max(0, y / Math.max(1f, getMaxClockY()));
|
||||||
|
alphaKeyguard = Interpolators.ACCELERATE.getInterpolation(alphaKeyguard);
|
||||||
|
return MathUtils.lerp(alphaKeyguard, 1f, mDarkAmount);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
From 525d4852c431af17570f778b4294876393a6c615 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sat, 2 Nov 2019 06:41:03 +0000
|
||||||
|
Subject: [PATCH 13/18] Keyguard: Hide padlock
|
||||||
|
|
||||||
|
It's just fking ugly.
|
||||||
|
Please Google, stop your UI designers.
|
||||||
|
|
||||||
|
Change-Id: Ie91e80ca5c6637a51a8acc72fb28cd6ac2a7abb6
|
||||||
|
---
|
||||||
|
packages/SystemUI/res/values/dimens.xml | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
|
||||||
|
index e414861b0cd..19341fdb415 100644
|
||||||
|
--- a/packages/SystemUI/res/values/dimens.xml
|
||||||
|
+++ b/packages/SystemUI/res/values/dimens.xml
|
||||||
|
@@ -823,8 +823,8 @@
|
||||||
|
<dimen name="keyguard_affordance_width">56dp</dimen>
|
||||||
|
|
||||||
|
<!-- The width/height of the unlock icon view on keyguard. -->
|
||||||
|
- <dimen name="keyguard_lock_height">42dp</dimen>
|
||||||
|
- <dimen name="keyguard_lock_width">42dp</dimen>
|
||||||
|
+ <dimen name="keyguard_lock_height">0dp</dimen>
|
||||||
|
+ <dimen name="keyguard_lock_width">0dp</dimen>
|
||||||
|
<dimen name="keyguard_lock_padding">20dp</dimen>
|
||||||
|
|
||||||
|
<dimen name="keyguard_indication_margin_bottom">40dp</dimen>
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,89 @@
|
|||||||
|
From 62e1f218db18a9bcacba85c479a2c40625e958f6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sat, 2 Nov 2019 08:31:36 +0000
|
||||||
|
Subject: [PATCH 14/18] Keyguard: Refine indication text
|
||||||
|
|
||||||
|
- Always show "Swipe up to unlock" hint
|
||||||
|
- Put the text in-line with bottom shortcuts
|
||||||
|
- Don't show charging state alongside other hints
|
||||||
|
|
||||||
|
Change-Id: Ib771c35610f712a1de34736e817bcfe616ac37d8
|
||||||
|
---
|
||||||
|
packages/SystemUI/res/values-sw600dp-land/dimens.xml | 2 +-
|
||||||
|
packages/SystemUI/res/values-sw600dp/dimens.xml | 2 +-
|
||||||
|
packages/SystemUI/res/values/dimens.xml | 2 +-
|
||||||
|
.../statusbar/KeyguardIndicationController.java | 12 ++----------
|
||||||
|
4 files changed, 5 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/res/values-sw600dp-land/dimens.xml b/packages/SystemUI/res/values-sw600dp-land/dimens.xml
|
||||||
|
index f2df4b9023b..7719a0ae0ba 100644
|
||||||
|
--- a/packages/SystemUI/res/values-sw600dp-land/dimens.xml
|
||||||
|
+++ b/packages/SystemUI/res/values-sw600dp-land/dimens.xml
|
||||||
|
@@ -18,7 +18,7 @@
|
||||||
|
<resources>
|
||||||
|
<dimen name="keyguard_clock_notifications_margin">36dp</dimen>
|
||||||
|
|
||||||
|
- <dimen name="keyguard_indication_margin_bottom">80dp</dimen>
|
||||||
|
+ <dimen name="keyguard_indication_margin_bottom">40dp</dimen>
|
||||||
|
|
||||||
|
<!-- Screen pinning request width (just a little bit bigger than the three buttons here -->
|
||||||
|
<dimen name="screen_pinning_request_width">490dp</dimen>
|
||||||
|
diff --git a/packages/SystemUI/res/values-sw600dp/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml
|
||||||
|
index aa574c7d9f6..d06906bab08 100644
|
||||||
|
--- a/packages/SystemUI/res/values-sw600dp/dimens.xml
|
||||||
|
+++ b/packages/SystemUI/res/values-sw600dp/dimens.xml
|
||||||
|
@@ -71,7 +71,7 @@
|
||||||
|
phone hints. -->
|
||||||
|
<dimen name="edge_tap_area_width">80dp</dimen>
|
||||||
|
|
||||||
|
- <dimen name="keyguard_indication_margin_bottom">90dp</dimen>
|
||||||
|
+ <dimen name="keyguard_indication_margin_bottom">40dp</dimen>
|
||||||
|
|
||||||
|
<!-- Margin on the right side of the system icon group on Keyguard. -->
|
||||||
|
<dimen name="system_icons_keyguard_padding_end">2dp</dimen>
|
||||||
|
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
|
||||||
|
index 19341fdb415..7190def8786 100644
|
||||||
|
--- a/packages/SystemUI/res/values/dimens.xml
|
||||||
|
+++ b/packages/SystemUI/res/values/dimens.xml
|
||||||
|
@@ -827,7 +827,7 @@
|
||||||
|
<dimen name="keyguard_lock_width">0dp</dimen>
|
||||||
|
<dimen name="keyguard_lock_padding">20dp</dimen>
|
||||||
|
|
||||||
|
- <dimen name="keyguard_indication_margin_bottom">40dp</dimen>
|
||||||
|
+ <dimen name="keyguard_indication_margin_bottom">20dp</dimen>
|
||||||
|
|
||||||
|
<!-- The text size for battery level -->
|
||||||
|
<dimen name="battery_level_text_size">12sp</dimen>
|
||||||
|
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
|
||||||
|
index dd6a0f053f9..1c67f914105 100644
|
||||||
|
--- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
|
||||||
|
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
|
||||||
|
@@ -447,15 +447,7 @@ public class KeyguardIndicationController implements StateListener,
|
||||||
|
isError = mTransientTextIsError;
|
||||||
|
} else if (!TextUtils.isEmpty(trustGrantedIndication)
|
||||||
|
&& mKeyguardUpdateMonitor.getUserHasTrust(userId)) {
|
||||||
|
- if (powerIndication != null) {
|
||||||
|
- String indication = mContext.getResources().getString(
|
||||||
|
- R.string.keyguard_indication_trust_unlocked_plugged_in,
|
||||||
|
- trustGrantedIndication, powerIndication);
|
||||||
|
- mTextView.switchIndication(indication);
|
||||||
|
- hideIndication = !mBatteryPresent;
|
||||||
|
- } else {
|
||||||
|
- mTextView.switchIndication(trustGrantedIndication);
|
||||||
|
- }
|
||||||
|
+ mTextView.switchIndication(trustGrantedIndication);
|
||||||
|
} else if (!TextUtils.isEmpty(mAlignmentIndication)) {
|
||||||
|
mTextView.switchIndication(mAlignmentIndication);
|
||||||
|
isError = true;
|
||||||
|
@@ -475,7 +467,7 @@ public class KeyguardIndicationController implements StateListener,
|
||||||
|
&& !mKeyguardUpdateMonitor.getUserHasTrust(userId)) {
|
||||||
|
mTextView.switchIndication(trustManagedIndication);
|
||||||
|
} else {
|
||||||
|
- mTextView.switchIndication(mRestingIndication);
|
||||||
|
+ mTextView.switchIndication(R.string.keyguard_unlock);
|
||||||
|
}
|
||||||
|
mTextView.setTextColor(isError ? Utils.getColorError(mContext)
|
||||||
|
: mInitialTextColorState);
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,133 @@
|
|||||||
|
From 00720384d76b0a650014db49705df71e055b18ec Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sat, 20 Mar 2021 10:35:14 +0000
|
||||||
|
Subject: [PATCH 15/18] Keyguard/UI: Fix status bar margins and paddings
|
||||||
|
|
||||||
|
- Change keyguard_carrier_text_margin into a padding
|
||||||
|
- Link keyguard paddings to status_bar_padding_{start|end}
|
||||||
|
- Add status_bar_padding_{start|end} to quick settings header
|
||||||
|
|
||||||
|
Change-Id: Ic91fa398813e1907297bb0892c444d96405950e7
|
||||||
|
---
|
||||||
|
packages/SystemUI/res/layout/keyguard_status_bar.xml | 2 +-
|
||||||
|
.../layout/quick_status_bar_header_system_icons.xml | 6 ++++--
|
||||||
|
packages/SystemUI/res/values-sw600dp/dimens.xml | 6 ------
|
||||||
|
packages/SystemUI/res/values/dimens.xml | 4 ++--
|
||||||
|
.../statusbar/phone/KeyguardStatusBarView.java | 11 -----------
|
||||||
|
5 files changed, 7 insertions(+), 22 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/res/layout/keyguard_status_bar.xml b/packages/SystemUI/res/layout/keyguard_status_bar.xml
|
||||||
|
index 58343800c2e..3782df2539e 100644
|
||||||
|
--- a/packages/SystemUI/res/layout/keyguard_status_bar.xml
|
||||||
|
+++ b/packages/SystemUI/res/layout/keyguard_status_bar.xml
|
||||||
|
@@ -68,7 +68,7 @@
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:paddingTop="@dimen/status_bar_padding_top"
|
||||||
|
- android:layout_marginStart="@dimen/keyguard_carrier_text_margin"
|
||||||
|
+ android:paddingStart="@dimen/keyguard_carrier_text_margin"
|
||||||
|
android:layout_toStartOf="@id/system_icons_container"
|
||||||
|
android:gravity="center_vertical"
|
||||||
|
android:ellipsize="marquee"
|
||||||
|
diff --git a/packages/SystemUI/res/layout/quick_status_bar_header_system_icons.xml b/packages/SystemUI/res/layout/quick_status_bar_header_system_icons.xml
|
||||||
|
index 3c748018187..74bcbf2685e 100644
|
||||||
|
--- a/packages/SystemUI/res/layout/quick_status_bar_header_system_icons.xml
|
||||||
|
+++ b/packages/SystemUI/res/layout/quick_status_bar_header_system_icons.xml
|
||||||
|
@@ -32,7 +32,8 @@
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
- android:gravity="center_vertical|start" >
|
||||||
|
+ android:gravity="center_vertical|start"
|
||||||
|
+ android:paddingStart="@dimen/status_bar_padding_start" >
|
||||||
|
|
||||||
|
<com.android.systemui.statusbar.policy.Clock
|
||||||
|
android:id="@+id/clock"
|
||||||
|
@@ -59,7 +60,8 @@
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_weight="1"
|
||||||
|
android:orientation="horizontal"
|
||||||
|
- android:gravity="center_vertical|end" >
|
||||||
|
+ android:gravity="center_vertical|end"
|
||||||
|
+ android:paddingEnd="@dimen/status_bar_padding_end" >
|
||||||
|
|
||||||
|
<include layout="@layout/ongoing_privacy_chip" />
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/res/values-sw600dp/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml
|
||||||
|
index d06906bab08..75fd4abba84 100644
|
||||||
|
--- a/packages/SystemUI/res/values-sw600dp/dimens.xml
|
||||||
|
+++ b/packages/SystemUI/res/values-sw600dp/dimens.xml
|
||||||
|
@@ -60,9 +60,6 @@
|
||||||
|
<!-- end margin for multi user switch in collapsed quick settings -->
|
||||||
|
<dimen name="multi_user_switch_keyguard_margin">6dp</dimen>
|
||||||
|
|
||||||
|
- <!-- Margin on the left side of the carrier text on Keyguard -->
|
||||||
|
- <dimen name="keyguard_carrier_text_margin">24dp</dimen>
|
||||||
|
-
|
||||||
|
<!-- The width/height of the phone/camera/unlock icon on keyguard. -->
|
||||||
|
<dimen name="keyguard_affordance_height">80dp</dimen>
|
||||||
|
<dimen name="keyguard_affordance_width">120dp</dimen>
|
||||||
|
@@ -73,9 +70,6 @@
|
||||||
|
|
||||||
|
<dimen name="keyguard_indication_margin_bottom">40dp</dimen>
|
||||||
|
|
||||||
|
- <!-- Margin on the right side of the system icon group on Keyguard. -->
|
||||||
|
- <dimen name="system_icons_keyguard_padding_end">2dp</dimen>
|
||||||
|
-
|
||||||
|
<!-- Screen pinning request width -->
|
||||||
|
<dimen name="screen_pinning_request_width">400dp</dimen>
|
||||||
|
<!-- Screen pinning request bottom button circle widths -->
|
||||||
|
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
|
||||||
|
index 7190def8786..9172bfa823e 100644
|
||||||
|
--- a/packages/SystemUI/res/values/dimens.xml
|
||||||
|
+++ b/packages/SystemUI/res/values/dimens.xml
|
||||||
|
@@ -784,7 +784,7 @@
|
||||||
|
<dimen name="kg_framed_avatar_size">54dp</dimen>
|
||||||
|
|
||||||
|
<!-- Margin on the left side of the carrier text on Keyguard -->
|
||||||
|
- <dimen name="keyguard_carrier_text_margin">16dp</dimen>
|
||||||
|
+ <dimen name="keyguard_carrier_text_margin">@dimen/status_bar_padding_start</dimen>
|
||||||
|
|
||||||
|
<!-- Margin on the left side of the battery % in the header. -->
|
||||||
|
<dimen name="header_battery_margin_expanded">6dp</dimen>
|
||||||
|
@@ -793,7 +793,7 @@
|
||||||
|
<dimen name="header_battery_margin_keyguard">6dp</dimen>
|
||||||
|
|
||||||
|
<!-- Margin on the right side of the system icon group on Keyguard. -->
|
||||||
|
- <dimen name="system_icons_keyguard_padding_end">4dp</dimen>
|
||||||
|
+ <dimen name="system_icons_keyguard_padding_end">@dimen/status_bar_padding_end</dimen>
|
||||||
|
|
||||||
|
<!-- Additional translation (downwards) for appearing notifications when going to the full shade
|
||||||
|
from Keyguard. -->
|
||||||
|
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
|
||||||
|
index 9baac56410a..c75cab3d469 100644
|
||||||
|
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
|
||||||
|
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
|
||||||
|
@@ -238,7 +238,6 @@ public class KeyguardStatusBarView extends RelativeLayout
|
||||||
|
Pair<Integer, Integer> cornerCutoutMargins =
|
||||||
|
StatusBarWindowView.cornerCutoutMargins(mDisplayCutout, getDisplay());
|
||||||
|
updatePadding(cornerCutoutMargins);
|
||||||
|
- updateCarrierLabelParams();
|
||||||
|
if (mDisplayCutout == null || cornerCutoutMargins != null) {
|
||||||
|
return updateLayoutParamsNoCutout();
|
||||||
|
} else {
|
||||||
|
@@ -255,16 +254,6 @@ public class KeyguardStatusBarView extends RelativeLayout
|
||||||
|
setPadding(mPadding.first, waterfallTop, mPadding.second, 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
- private void updateCarrierLabelParams() {
|
||||||
|
- int marginStart = calculateMargin(
|
||||||
|
- getResources().getDimensionPixelSize(R.dimen.keyguard_carrier_text_margin),
|
||||||
|
- mPadding.first);
|
||||||
|
- MarginLayoutParams lp = (MarginLayoutParams) mCarrierLabel.getLayoutParams();
|
||||||
|
- lp.setMarginStart(marginStart);
|
||||||
|
-
|
||||||
|
- mCarrierLabel.setLayoutParams(lp);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
private boolean updateLayoutParamsNoCutout() {
|
||||||
|
if (mLayoutState == LAYOUT_NO_CUTOUT) {
|
||||||
|
return false;
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,53 @@
|
|||||||
|
From 0d94e66575aa5c5eda8a4a93b8747fd335db5dce Mon Sep 17 00:00:00 2001
|
||||||
|
From: AndyCGYan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Fri, 22 Mar 2019 00:41:20 +0800
|
||||||
|
Subject: [PATCH 16/18] Disable FP lockouts
|
||||||
|
|
||||||
|
Both timed and permanent lockouts - GET THE FUCK OUT
|
||||||
|
Android 10 seems to have unified biometrics procedures - only disable lockouts for FP for now
|
||||||
|
|
||||||
|
Change-Id: I2d4b091f3546d4d7903bfb4d5585629212dc9915
|
||||||
|
---
|
||||||
|
.../fingerprint/FingerprintService.java | 19 +------------------
|
||||||
|
1 file changed, 1 insertion(+), 18 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
|
||||||
|
index def1a873590..e8362580510 100644
|
||||||
|
--- a/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
|
||||||
|
+++ b/services/core/java/com/android/server/biometrics/fingerprint/FingerprintService.java
|
||||||
|
@@ -173,15 +173,7 @@ public class FingerprintService extends BiometricServiceBase {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int handleFailedAttempt() {
|
||||||
|
- final int currentUser = ActivityManager.getCurrentUser();
|
||||||
|
- mFailedAttempts.put(currentUser, mFailedAttempts.get(currentUser, 0) + 1);
|
||||||
|
- mTimedLockoutCleared.put(ActivityManager.getCurrentUser(), false);
|
||||||
|
-
|
||||||
|
- if (getLockoutMode() != AuthenticationClient.LOCKOUT_NONE) {
|
||||||
|
- scheduleLockoutResetForUser(currentUser);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- return super.handleFailedAttempt();
|
||||||
|
+ return AuthenticationClient.LOCKOUT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean isDetectOnly() {
|
||||||
|
@@ -983,15 +975,6 @@ public class FingerprintService extends BiometricServiceBase {
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected int getLockoutMode() {
|
||||||
|
- final int currentUser = ActivityManager.getCurrentUser();
|
||||||
|
- final int failedAttempts = mFailedAttempts.get(currentUser, 0);
|
||||||
|
- if (failedAttempts >= MAX_FAILED_ATTEMPTS_LOCKOUT_PERMANENT) {
|
||||||
|
- return AuthenticationClient.LOCKOUT_PERMANENT;
|
||||||
|
- } else if (failedAttempts > 0
|
||||||
|
- && !mTimedLockoutCleared.get(currentUser, false)
|
||||||
|
- && (failedAttempts % MAX_FAILED_ATTEMPTS_LOCKOUT_TIMED == 0)) {
|
||||||
|
- return AuthenticationClient.LOCKOUT_TIMED;
|
||||||
|
- }
|
||||||
|
return AuthenticationClient.LOCKOUT_NONE;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,387 @@
|
|||||||
|
From 8670dcd137ae5b202cb97e83e60f8ba672395a82 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 20 Jun 2021 03:39:32 +0000
|
||||||
|
Subject: [PATCH 17/18] Add MiuiNavbarOverlay
|
||||||
|
|
||||||
|
Change-Id: I0e6791abc3c9521d7dc612df2fec2b041affe7e9
|
||||||
|
---
|
||||||
|
packages/overlays/Android.mk | 1 +
|
||||||
|
.../overlays/MiuiNavbarOverlay/Android.mk | 27 ++++++++++++++++++
|
||||||
|
.../MiuiNavbarOverlay/AndroidManifest.xml | 21 ++++++++++++++
|
||||||
|
.../res/drawable-440dpi-v4/ic_sysbar_back.png | Bin 0 -> 2756 bytes
|
||||||
|
.../ic_sysbar_back_darkmode.png | Bin 0 -> 2547 bytes
|
||||||
|
.../drawable-440dpi-v4/ic_sysbar_docked.png | Bin 0 -> 3642 bytes
|
||||||
|
.../ic_sysbar_docked_darkmode.png | Bin 0 -> 2810 bytes
|
||||||
|
.../res/drawable-440dpi-v4/ic_sysbar_home.png | Bin 0 -> 1362 bytes
|
||||||
|
.../ic_sysbar_home_darkmode.png | Bin 0 -> 980 bytes
|
||||||
|
.../drawable-440dpi-v4/ic_sysbar_recent.png | Bin 0 -> 278 bytes
|
||||||
|
.../ic_sysbar_recent_darkmode.png | Bin 0 -> 205 bytes
|
||||||
|
11 files changed, 49 insertions(+)
|
||||||
|
create mode 100644 packages/overlays/MiuiNavbarOverlay/Android.mk
|
||||||
|
create mode 100644 packages/overlays/MiuiNavbarOverlay/AndroidManifest.xml
|
||||||
|
create mode 100644 packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_back.png
|
||||||
|
create mode 100644 packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_back_darkmode.png
|
||||||
|
create mode 100644 packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_docked.png
|
||||||
|
create mode 100644 packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_docked_darkmode.png
|
||||||
|
create mode 100644 packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_home.png
|
||||||
|
create mode 100644 packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_home_darkmode.png
|
||||||
|
create mode 100644 packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_recent.png
|
||||||
|
create mode 100644 packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_recent_darkmode.png
|
||||||
|
|
||||||
|
diff --git a/packages/overlays/Android.mk b/packages/overlays/Android.mk
|
||||||
|
index 999ab080246..de3afebac43 100644
|
||||||
|
--- a/packages/overlays/Android.mk
|
||||||
|
+++ b/packages/overlays/Android.mk
|
||||||
|
@@ -72,6 +72,7 @@ LOCAL_REQUIRED_MODULES := \
|
||||||
|
IconShapeTaperedRectOverlay \
|
||||||
|
IconShapeTeardropOverlay \
|
||||||
|
IconShapeVesselOverlay \
|
||||||
|
+ MiuiNavbarOverlay \
|
||||||
|
NavigationBarMode3ButtonOverlay \
|
||||||
|
NavigationBarModeGesturalOverlay \
|
||||||
|
NavigationBarModeGesturalOverlayNarrowBack \
|
||||||
|
diff --git a/packages/overlays/MiuiNavbarOverlay/Android.mk b/packages/overlays/MiuiNavbarOverlay/Android.mk
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..3a577ef5920
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/packages/overlays/MiuiNavbarOverlay/Android.mk
|
||||||
|
@@ -0,0 +1,27 @@
|
||||||
|
+#
|
||||||
|
+# Copyright (C) 2020, The Android Open Source Project
|
||||||
|
+#
|
||||||
|
+# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
+# you may not use this file except in compliance with the License.
|
||||||
|
+# You may obtain a copy of the License at
|
||||||
|
+#
|
||||||
|
+# http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
+#
|
||||||
|
+# Unless required by applicable law or agreed to in writing, software
|
||||||
|
+# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
+# See the License for the specific language governing permissions and
|
||||||
|
+# limitations under the License.
|
||||||
|
+#
|
||||||
|
+
|
||||||
|
+LOCAL_PATH:= $(call my-dir)
|
||||||
|
+include $(CLEAR_VARS)
|
||||||
|
+
|
||||||
|
+LOCAL_PRODUCT_MODULE := true
|
||||||
|
+
|
||||||
|
+LOCAL_RESOURCE_DIR := $(LOCAL_PATH)/res
|
||||||
|
+
|
||||||
|
+LOCAL_PACKAGE_NAME := MiuiNavbarOverlay
|
||||||
|
+LOCAL_SDK_VERSION := current
|
||||||
|
+
|
||||||
|
+include $(BUILD_RRO_PACKAGE)
|
||||||
|
diff --git a/packages/overlays/MiuiNavbarOverlay/AndroidManifest.xml b/packages/overlays/MiuiNavbarOverlay/AndroidManifest.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 00000000000..3956effddfb
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/packages/overlays/MiuiNavbarOverlay/AndroidManifest.xml
|
||||||
|
@@ -0,0 +1,21 @@
|
||||||
|
+<!--
|
||||||
|
+ ~ Copyright (C) 2020 The Android Open Source Project
|
||||||
|
+ ~
|
||||||
|
+ ~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
+ ~ you may not use this file except in compliance with the License.
|
||||||
|
+ ~ You may obtain a copy of the License at
|
||||||
|
+ ~
|
||||||
|
+ ~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
+ ~
|
||||||
|
+ ~ Unless required by applicable law or agreed to in writing, software
|
||||||
|
+ ~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
+ ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
+ ~ See the License for the specific language governing permissions and
|
||||||
|
+ ~ limitations under the License.
|
||||||
|
+ -->
|
||||||
|
+<manifest xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
+ package="com.miui.systemui.navbar.overlay"
|
||||||
|
+ android:versionCode="1"
|
||||||
|
+ android:versionName="1.0">
|
||||||
|
+ <overlay android:targetPackage="com.android.systemui" android:priority="1337" android:isStatic="true"/>
|
||||||
|
+</manifest>
|
||||||
|
diff --git a/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_back.png b/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_back.png
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..be2b145b4c698679bfdfdc3e5834ad12a56724c0
|
||||||
|
GIT binary patch
|
||||||
|
literal 2756
|
||||||
|
zcmcgu3s4hx8V?1-3OZnL5L?tGprz_2n-D@036KXu)CfXOJj=t)?k3rRWWy$qfRADd
|
||||||
|
zhu~RzrHmZ`k!wBAa-g0-rC<@UbSw%?@2-FjLbWI3sc4FiE8=+@UZak6oX*Yd%<lg8
|
||||||
|
z|Nnj8_xql+C5ap3=6k*A#b7YztKyYO^xNUO0Ve${b@zQjzvi0be`{edy!~9a8{=SQ
|
||||||
|
z0E02-I-%KO-J;$gK}jPA!ALF6u^Y`an!$*Swwn<&6Ssm|Tu+#!?7J;(Y>>dD?38dd
|
||||||
|
ztTrof0}-E3;mP?MHE4b&D#qB+QDCH9LMt%hRs^&gvrHC=UCN%+E1}n}Z7v&}gjh4B
|
||||||
|
zY?;d-xJ8`^Do6?k!#P3-<q7y;gqXt<!eYK)HOPl~5nMQe%L{{Go&*+3!o=Y8#ip%M
|
||||||
|
zm`;+UTsv)x{*tl{R;yXU<=SjEjxCHsQhF{=EEaQNK9|pjXar=*Gg%QkWU>U$Xi(x7
|
||||||
|
zlp@Slf;53Hjfj@au}axA(<v8>=2^8S%XFCNfN|}JnaktAE|(^O7&?nH=TKRb#xazO
|
||||||
|
zXW>TNWVO&(-YnK^Ag!duK>mX2+2iL7(4keUXKlQci_ti1!eWihrQMhg$V<@{O`aL&
|
||||||
|
zCgBz`heGk#T$*OE%Nw&qLE(s%q%<U%HIt~s8OoqS;Yy4M3{4?S7-_S-^Nb9xM69@!
|
||||||
|
z&4>9g1PdUZSi=)Z;4q0mv<jvd@Dx-{VuUX5c_<&&z+wr^e-1~N42D>dS0gc0q9Z9I
|
||||||
|
zLVHUX5k1Z|oAhjOHii-fnMG2xNt##Kv->KAB9S6>L>7HuNs5z$s#t}PCl(4JK8H6+
|
||||||
|
zRIQe%OcpC*LUEN+%BCa3AqY&Oi@?J$Ow5Nc1V$i!xIhPKg(wU~XoZ+CLZFL41n7*s
|
||||||
|
zl0<V{`Ja);Xn7tSCgcf3;dFTT0*D_WKq0M&r-igAj_`Ftfmj4%Gx7-(LH8e$^{e%`
|
||||||
|
zy3$oRl6b;Gr!;T6Z<6us=~Wg1PS%P9L0vr{Wuva-<1~Y*ZQ>;ncs&oM<ZT9=R{DyH
|
||||||
|
zn1WeIoz;d=xJ*w+>vf8b`%C;SNbalIzh3@c#{R`3{gu?GBa0dklOCsMDwpkYhU=O>
|
||||||
|
zQ+eUOn6k;UXC~DQoF0F!<?P(0KV~O4ZlYCF^j!XUap^q<!=qTGlxgghcLpzI2I7Hd
|
||||||
|
zop&1=Rb{C=O13WFv&cEW&Z{wW;e<Q&?MZ<+BoVl;U0-vbb#Cc)|K)p_8jp83c{$Qs
|
||||||
|
zf#$i|iq9(c4X9IU6PsEtnf9^*eRi@sPh4r$f7vp`odAP8ZY+*k++U>^ZVLS7lRN7l
|
||||||
|
zGj9J74={mtxg3rG{8<h+`H2sG=lME{3bz&bt`6~VFWeRs6aad7&uwP}ZTX)=m&8A2
|
||||||
|
z<bEDn+B8vnHu!AKy$90a>eHA0^M}}$j0Nn&!DSa(^KN}#w`^tkw+ViJesRq{pPnhb
|
||||||
|
zetNmiJ2qydzrX+F*1FBVSA4B?vU;l?=0D88{Gim=ZOI}|s)%}cdtiN9T3S#2#PE$v
|
||||||
|
z718cb|70_~Q{Hs`<9eWKq`PVjExG8r^3<tQ%iQ<7J^n7e=TLQ9gAX_dsM2>==4BGZ
|
||||||
|
zu@9BzC*uzicE4Tlr0%{ayKp?GGHU1ezBRVdAIpHh4&2tewg0R3&kcRSg@f;(a14JD
|
||||||
|
z;%IJe?&)Lu%KdusfwggQ`!y@ee+~z}x_$Fz9tFJ-BydIo?Z=XjrXSa=w5UAB#>O(j
|
||||||
|
z<zV58Lu-NG6&Ghf2f7AA97RP%U4w&z2~#JMC6U?J&UgKj%FCVaAir0*&`d!05%AN`
|
||||||
|
z6Xp9r+EfCo{X*H>87s@zrIZ0)Md!+|UcGuW!Vv?gBUb@TCNq6?`MS0h3s!SDyZZY2
|
||||||
|
z9$j3!0H`VP6!i`bJ>79kGrqiJxO3lIL!|$1--Gso`c%#%ge8lre(JpULr0I%U$#bW
|
||||||
|
zIM%X1JMeD8uC~_J3ERS0V`Dqkbp*=xJPvp=Jv}o*4|M%4v)=2iT}OILNAQjj?j84j
|
||||||
|
z8PGd?=6!k1y*oPIXJ?iMW%;}j^G$DW@2Z@u>WTcYfbY`x`!@Nw9Y!(i$HsL>eu|!V
|
||||||
|
zYcRuC?!BRE^Qh>?M*&oGYR8%n<c8fu;-D00P960={75z_mFq8Ob;wx?VMSd_P%NO1
|
||||||
|
zy7hNM^|g?aouxE-ASTDg>A84uN0N`?@~s8uMrC^ny2nO(+S2Marz|s+To)apFUHaY
|
||||||
|
zZTxnryk82`26T3Ie(;;xe+-oc)TgyP+{BualgDfAM>p3#ImztsJp1Xt3)YWyuh?7A
|
||||||
|
z?Q}YAnT?mLRr8XQlkd7$5y#_z?e55&j+zZCEEA)HE$`LEg!=D2Ky(yuOO7sB81xtI
|
||||||
|
zX}j~9^U4=wM%vb`2P-Nocld}taaHOcjg{w%KR515?39hZm&k0m>4`VY^SF`@H7YJN
|
||||||
|
h9r{0Z;ER1d?z2;NqUud$cCPC`Qx&^WSufw__%Gd*;i3Ql
|
||||||
|
|
||||||
|
literal 0
|
||||||
|
HcmV?d00001
|
||||||
|
|
||||||
|
diff --git a/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_back_darkmode.png b/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_back_darkmode.png
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..4873f84ff7f4750fa3adc70428ffb123502c1051
|
||||||
|
GIT binary patch
|
||||||
|
literal 2547
|
||||||
|
zcmb_eeQeZZ81J!-O&ofY7;XsC6~zzi_3L(9o89Ji-N!}lm~(+4Q|z_9t?aJ7wPkn1
|
||||||
|
zfy<Q1N5sVaL5?ZINzkZ#i3x{-Y|2E!v6)~*5ZF)|2|5SPgf9`_?&AVxDjF|o`}Xbc
|
||||||
|
z`8~hq<9%|gOFhMtCrz6KLC|DZ30nr9O~#cn5!}}#n6HD!9l?@?8U)=r#kfq+hSx0+
|
||||||
|
zl=PESUZGdG=Q6w!uyTUp6|Lbw5TGF_Codf2_!?1%y<(LlJCMPT_am?*IFJRIZrmMo
|
||||||
|
ziq%rdGF5zPnWvmzR>RW*l9vnTgc(2(5Ood?2mG?egdNB*F9X)bHip2%5WU8M<Qop*
|
||||||
|
z3U?{&R8$epwAxXgu#s>UZ6)kDP1+uVNu0>S@GOj=P@G_JJ44a%=nnzjRKdrTu|=c4
|
||||||
|
zz?%c9*7YERVWCjS8ltR<T7?lbO=CETkt7Nbs8%oQTo{$LSz`>WsPU>4)FnlR4MxtZ
|
||||||
|
zEY%$dP&yJqAQ-2Wwb3+zgkfPWh!IxY2x%B7@Nrylsp=ngF7TM>7XzZKYXD2cvB7FZ
|
||||||
|
zSF~#7FR0_6Z*c%p>vqR|jH@LOh`Z4A!a5MfXhOzCYvuJp5i1ilWvR-Gg>^vYEF+pA
|
||||||
|
z<5WdXSJZMv@sAa%bWAerbQ*=ph96!a$$}En9=XXzWI0`QAS6!WC~iXux}3;naEh^I
|
||||||
|
z&%wb0AA!0RLGsn#3MKJ!oMv#6!HHX-plbw9=l&5a@QhDU100B13UE~-7L=<HIG#zy
|
||||||
|
zsrVHYI0ovdoA+H#XQ`_ABtQ6|l@%Aju0p4spzU^)v=YN|-EPJuYdR<MqKkDPAU{?~
|
||||||
|
z5*Q!n&BA${LP-(NMrofd3-x+QaO3TnbS6)6w2d6IXBB>_(FJ4nf?>~lMcU3$XeKX^
|
||||||
|
zC{5YCD2-?0C_&PkS0rsbne7|1pQlRT6mtIm%wwEQqkWhXNdtwgA3Z%!iM69EzXT6=
|
||||||
|
z48!rpNpK*%(E_4?jBZQgW#G0V7@-YSi-7cR`eFp8DLy^KsbYQ=$ky$&9`;xIHLmU-
|
||||||
|
z)ZbS9##28|tNuszqsir~Ik`#%!xck}crarOjg$uabJd2w-88bs;9w3K%lH5WFYysB
|
||||||
|
z%79u01Ns?xr3r!(wz}B-^6={er+U|J(JTiqUYb=r=?+)j*+%v?w(NOt*UUFdHlyw5
|
||||||
|
zewov1Kk?#Ly5gAsp5x!BkN<A+KDn+0K~`^eKX8v{`o-)h)=(Ad^0W*NeA2sp*Ojk4
|
||||||
|
z$L0?1Ydf)g%fk2P&)M9vZ04p~Jkiv=$(u4EHNVT8XlYuLk%A}Q>oh-?@@O;MVJ=V2
|
||||||
|
zZ_Ied(gZn6iT@dxz2}l?QDA3<|9p?wU)Pu3XY1=ft6n)i|8!<uZdzmP<ix$ElTc+s
|
||||||
|
z&X<?kZ=C+g`9*BVf<$*jde7^gtX+3yP(4Y{CR>;EFHfs|=cwyc%>Gg==jDv1wXO9i
|
||||||
|
za{teI*@9iE0OJeO(an)d#Rr^kc+Sgp8Md^_6WwXGFTCAS#LdqT`WJT8bcjb9py>9V
|
||||||
|
z!taSzGdVQ34-eK;c_x;P{l0rsHv(uA!uLkoBW)9Ywl{VD0E8S(N1`7@?w$~u*1350
|
||||||
|
zjDo_TCHiipEvYWOv#4eAn@Bi4`cdR=Q^?Y}b9Q=xZ{wuBiIv~RdI<KyqPF)w5A1x}
|
||||||
|
z{Udhp>eZ`{bj;~k=UZ`q^g(3B_1$e%OM2J8Kz2R!scbL0fIMXBobD!GdTald#UE8(
|
||||||
|
z%%i%@UpIy}ys9K^?2aAT$BVOPPc2}7OFfyg_uJTRQ}Qck2Hn=g##NVBpE*@Dm^n1i
|
||||||
|
z(ein)p(WJ>BP)beXRiBBC*{bg2RHarptOq#pB+Ase57IO4mtHcH)B|BJag#6lT>d)
|
||||||
|
z&e!MKYd16)pcy-+T#iQ8NA~PL>UxV>Ywqi@Y)j6S`k$w?tzd_2HABdEi<&LDf&OGl
|
||||||
|
zTMQD)&(DC^16irql!1BVKzD548=h$^kFSKxX^W`?7wW0OL$Ts(m0$Hf=7d(Q+HUb)
|
||||||
|
zZja176mx*WEKzSvUf!OU*cv&PpiG!*8*(2$`^!o+r{-7RHTJTToo?Eeu+BEr?K!7Y
|
||||||
|
z*9^Z;G+Rzj%oUn%d}G_QeqvzVy#Kj5|3$lBneo8k53^T$kGYM%Wv)UGyRG24rau72
|
||||||
|
C-gtlj
|
||||||
|
|
||||||
|
literal 0
|
||||||
|
HcmV?d00001
|
||||||
|
|
||||||
|
diff --git a/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_docked.png b/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_docked.png
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..1c88fc5d571d0ec91b735082cb9c512603b9ceec
|
||||||
|
GIT binary patch
|
||||||
|
literal 3642
|
||||||
|
zcmd5<c|4T)AAgXLtU?sZ>`;z1=4ec27}t!mFecWOW6V65n4>u|Nyt(m{I-K4RF+T?
|
||||||
|
zD;v2IE9>Y`v5jG4)vknAtz6k>N?yCa-~O)sYv(o3Jm2U0eSbg4`}_WUW+sK=?xeCt
|
||||||
|
zdkp{pDlX1sDs)ejUW%)s&s4c}i_lGp>+Ht|0A+RQB?IJ~+Xw*ix=b%$fv?*x0-eJ$
|
||||||
|
zqcJ$4pqYrph0p+CWh3I!=#iiR77B(l*+lr{%_caE$sodg%-v9KToM?;bdKSHyJOtF
|
||||||
|
z=rNIWJOgfH4YLvvAOkE=K!b@`QEWazM1;S$OMu4GX(Sx>9wLY&!tJCEVZLq@7>UCJ
|
||||||
|
zVdiEy1RagVz;@ux&^QzxgEfU=Q0N^<)D9$iI|79!pm2okc-Zm_4te7-!U$Bd<FYU4
|
||||||
|
zi3pDn2)G0!GCDfiEPA^chZl}S<MDVT3WLO85D)^vKfo5yL<lxt|Dy#m$fxs|Tmh5A
|
||||||
|
zhDj~bLODVK5e`NAAq5t9#Vnh@OcO*HQbgk-(Pk)VO7DRT`U;LK<VC%A&Y&Z~D3ArR
|
||||||
|
z1$+pLUcquBI06nog7a@ouPpz;0Yt5v+lr4rjfKTpalscj?1$1=Cge}ie6Iss5J?63
|
||||||
|
z93hVmI_!tS)R$(%C6IU^O~B!KaX3*Q4~p_JWEhDgJs1m^kq?v2;6(F{f42uD(*z(9
|
||||||
|
zjzM8i2ox59#(QBf1aor&8v7Z_f`CGOfVy!Q%&-Ih3f)dXLvP$4ppa@9Gy(0uf*Eu|
|
||||||
|
z7>CEAK{+#7v~Uo~WrxFID@+ndoG1<tatuYc{rB@OBoc+k31db<3w)}RJ<P>{ghS(T
|
||||||
|
zI0VKF{XSebH-ZbBFQBpMpbMD@hxjpLG8u$WIxRE|2Z9JRnt?{(vDi=qEewl6phC?-
|
||||||
|
z9NIh-1%hE8_meqvp;QGQ_cQ*_{T@6fRE4ytzidZZn^O4@oSA&+U=J);&u(zv@+gW4
|
||||||
|
zd#@M*jV`SOBAhOj0LXwZPc#2A10T#rM}Uyg|DcNxFg_<t5KZHOcHt0P|BLjHQ2a<~
|
||||||
|
z*?vd``OjItU;AB&e}qGQLpoe(SkS{t%LCa^pW{Idtrjhl4*-g-E@V3|(Ycp-tO$+S
|
||||||
|
z&FxK=+vlxrqVESZoEf;j@ym6`TKrmdN42#hk`pIQVr1+tAak^g?MGujO?qpO{vqvD
|
||||||
|
zHRYZ@)@0Cf=sFkqkax9h%U4c?&Y?!xhLT5C<2_vy<2|I{u6V)m>NPj(CVp9L&g@tS
|
||||||
|
z-yi+VrXX+DW}!c6PoMm!)CSdrdOgZ2*#!7H83!0(B)k6a@^F|sDOZw3F?#K~J^@wF
|
||||||
|
z-woWEO3H4<*{t)OyK%TkFGEo$LH;~E3%OXB=D5_PrGm5vf)gHIkL-&ZkVqCw%gXXP
|
||||||
|
z7(6GeHtRHqU;oL`lc^UCNEiOG3aBz|H*lc>&HK)!vc%hf8|9IHS>9K?O#F+e#yQ2a
|
||||||
|
z4^hXj6f>93=I1vGhg(w)0$33hTO(s#{sJdZv<HSqMn(!od9?>8#BF|lezimlrb^HD
|
||||||
|
z3UjP-P=WGBNkn#Za#B50JUjlTuM+oDU84mS`%rG5&mo`Z^EL1v>(UQ}D<4QtLMSUM
|
||||||
|
z_gNAMahe04n`QTX{r&hib>+y&oSHo*ryuVuI^k)mseHnqR!2uiUR=WhC>jnfmwL-a
|
||||||
|
zEG{rGXH&`W4w2Ph&aQ1@Z||4=jfdvr96V3lnkmT5y;*l~W+GVb&W;%3V@c~?xdaS>
|
||||||
|
z5YsFSG@MEnhJ}SSj!#Yw$(>iR)wWf$)g63kwFU-<o3;dJrXEroHfI6>3JMA{J$LU8
|
||||||
|
ztsUH8+KHK)o3maGdvtS4S$TVmo~;V`n535fe8(;2*Hce#>j2iaES=jlz%nZ<i>+W2
|
||||||
|
z$>aT^1)PfMBVE70c0|#YkT>z#CrWG<STA}dn_w=I)cbqNT#Fg`Hhub5%Vx{{f{RKq
|
||||||
|
z!QHULugb>U<3XYD&8^YSY%NNFQmn}(_q;iuO5fOLTGiFnvB$QRv>&mN0o*T8d|&za
|
||||||
|
z2L#OM5@V`2bDjriTgShP^|0D9G^VAoCRw*$=F*YkP2_7h98Pm#gM+79_}%<PL;_;U
|
||||||
|
zaYJOX?0F%VJCznf!{sh+87!fbdNtq!4F_k;Wc6bu5=nuFheyGSmoFC;Z9hxUs1It+
|
||||||
|
zeZ4WUVfBWfiVLiekdT@2@$pFlbX;Tc87%Q=X=!PEp%OVFXJ1lLQBlPcu~;EdoZ2@0
|
||||||
|
zbrf!1)vZ@kIk_d3nWIxzuBF>vDGcm0Iqljuv?I^`@(F|Ftu80pEbL7*(~8tn$d2BR
|
||||||
|
zGBIbn44-m+RT`HHoif=1p>T1Hu2V_8BAiaAE4cOUi5^;igmz`Es_IP3&BBKbTguYw
|
||||||
|
z^lTp){;*zlUBQ_%KLrN{E>673t|ahk2PF6J-<ONHSbHQ)gtb~yALLsLr=N8fL__Ru
|
||||||
|
zRZGbr!z+o}>1<Dpt)IG3_jsN%0`64lo;ENZZ|biym25ao^UI=%YnbBwm3z#zT#Fv`
|
||||||
|
zQcGWB3+^Jjy1HWd3vXXF$r-^=^ZiqA`lk%1_F5;dsz}ybzf-B=nSMy`gS*73eX^Y)
|
||||||
|
zD7_1Z`_EC-$ZFz+B9D99qI=_VgC{#5_WQ)CcN?@!x1Q?g==g$2Bo-9+{@mkhT7%F`
|
||||||
|
zW2KSd#(r5NRi;iG99)2)Onr;Ojl0|{O*;j;mm;8`a-P-EHhQeR?RzdacV7JT_R*!a
|
||||||
|
zllLi(Un_b}I=Wt855qw!hh=w47UNYK{IAv3%}H8Y$u{-hcTsjfq&KLZA5))FRD}rC
|
||||||
|
zK2rJ1T&J(juHHR*Iy#n$6$t7~ObIThsParcWO<}K@MgxUZ@f)5Aac9oE;FCZ9HB9G
|
||||||
|
z7Ev1^Iu`7<w(m2UjSZTfQ9XM5DFahF_l4{Ii0ZAUT@RI%?RDCA62I;o9Y`1*9j%C-
|
||||||
|
z7?|A&ykHmlFdE#h-~i{NpKN{t`ekie__n8~C(ay&x|gn%Vr&w$B`mJ@$5R>!j|T?_
|
||||||
|
z_1rx?mTpN-0sN;e$<|mqYkP_6`PJ~GilBxV3!_^tEiHXOO<_$sZBuj2{LJK%@ms%d
|
||||||
|
z*b;&~?DI)!3bY3<Jq(PVymE1I@t|X9s!GV>KrNr11#XI??cAxXzI#ypD=(8bhnuLT
|
||||||
|
zngw}ye%R{4W{<0t<-tvj^))rW-a|SUQFrY+;K7BeC*QERb>!96Y_q^8%IHmA^iwAd
|
||||||
|
zJ@(gJzb>4Y&nZS6PBEU8e>~Ejsg)@2l%b24tN7A)=Ozu{>LrhYclKGM&riC|#=c_}
|
||||||
|
zwKW8cNt{dV=$>OQUd%%Z)9*i)TTsx1x3IXO)%<zAb9g+I{KooQaGSh_t4&SucOji+
|
||||||
|
zPZS4zaV9zHZ4jyVxPDhp&%4IUmtRc(fa|P!ZRnA|u)DX~A+Rqyt!>!9cF$vBAkz87
|
||||||
|
zkI$wLbXS=w0}Q{c0DpgK#z@leD-l#+TSF`RHNCyXCp#Dix1F3dP)mtYYFru~9u6j0
|
||||||
|
zT4pAWD85lWjDfmy;fuM8^BE|&>9aR<ux)ojA>PN-MRrjP24m^F@4jQrjEbYXJ4Sgk
|
||||||
|
z-?q2gkkq@)v7Lo7BJ_MoP%UrNY5v!j^C@LzHqHiWXCtt62;EQGZ$G_OX5?z6vBtQ$
|
||||||
|
zv%@%J#J7f(4M1JEy~?zKTKZEBOQ)Dw{&U?s-`?tE1=TIF{PF(ErbLKVt)-Ep7>)Y3
|
||||||
|
zmB;;;C`Ss;J@85~Rzb>^s&u0=Z1)0xudnCjUkeLb#35AXG~LEX`tQ!g!JS-gACmYR
|
||||||
|
D=8d64
|
||||||
|
|
||||||
|
literal 0
|
||||||
|
HcmV?d00001
|
||||||
|
|
||||||
|
diff --git a/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_docked_darkmode.png b/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_docked_darkmode.png
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..fe51e11921ecb35c5535e7c446769af7f66be893
|
||||||
|
GIT binary patch
|
||||||
|
literal 2810
|
||||||
|
zcmcIm3se(V8jh_}EK8-jfcRpFisopZKuAUc4GBuXuz*;Bl4?jMA>=V}5=f#b5>wH&
|
||||||
|
zNOz?^0L5da^%X&CG(sC#P&iP~WhtQrr3fM-rHFt=DYz3}$L@Bwk8?Wb+_`t|{qFa_
|
||||||
|
z|1$?7BQ`j{x#&#{2II^LWk;j4-aZ^1(Dz?ocNs&cxysNu6$az9z&>VSa`P8rFmskj
|
||||||
|
zVq(>?+>M|BmJ|3wI1wUf<w_Kd!2|?pm3)B|QUi&QSfXHH2g=H^fJDf^Zt>%ixJnk3
|
||||||
|
zBnjPtK$~_%#0Yjs1#}@cC=dwHf+&F;Qu6_=T&7TgS_XE47ev?gZ6X$!fT*PmEYmI!
|
||||||
|
zh~-8CEEs_RKLQmmAp24Pe>#CoCDAFqYXJ(0>`x^56Ujb!5*Z{>K_5CW^<YtHh)@JZ
|
||||||
|
zv)50_LcbW;B(+)z5{Vj(hM@5wz=)Vgrqk&}5`{>i;86r#rBkT+TD(HFe42p`sRW2b
|
||||||
|
zsg}SBz|P1|gj3WEEUM|G33BBOtwJ^BCe&d>Eni6_6G(QGCV)c03{IJX$R>mf1w=>&
|
||||||
|
z$svVWg<{DwSY;BdhE+-M|Dc{Z{)qt8wOsCujGxs-E}s#hQir6XW=uKcXVIz{of0BO
|
||||||
|
zLn=505kMiSsG7^|)+j+10`b)_5(C4s=|DwJs|>JM_Q249)mtPAA*@m1UbzFY`D%!P
|
||||||
|
zrI08jJjoYNrpHhypr0Q|_FY4wfh5u-lnV<bBHe#OeLyk=B>VgXie`<Fujc<ESSSER
|
||||||
|
zFe2xpHcRAuF+@}<#8_a)lOPM0!3ZiC)z0VDeGZEiiNGR>3_VaqZwLlBAuKAHPNm{0
|
||||||
|
z1oDKsTrS8_sMLIg0OGJ2SkylRi9`sBXk?nNfF{5T{i$TU(AO8j(?nD{o=Q)INCJ^R
|
||||||
|
z**8%%eV+{rQtVkUeP8$+@BamnpjF71{caw6ZQ9cZ43((R!0M)|XA`u2Y9*5Z6Bz^Y
|
||||||
|
z1@=l{U<LLRfP~noZOQNUz$C3E2|`K#PhL#IRIo^`;Uf@JjC$+Wq#hB~pJ*@JNmGdb
|
||||||
|
zY30P(D<wV+NBf3-In%JvkC~PSDbPNLpbgCy>ah>)lLii(8Kcebzsuc!V$0GuI>awl
|
||||||
|
zKKQ(mz4v(ayJf{4l_4t~-GU<TTtDl?GrKVT^|zvu@hjKN-ORof>8>}smVR9r8}m<W
|
||||||
|
zh&#{G^<3);?tT+Dw<xTy#!Ty>z@Ih*BLgSu?>&<}_;O%Z&v;M!^X~kild63eWir`*
|
||||||
|
zGgOwo$4p=0m@(U{bhg(=0Q)E~d%oe}e8W3>7oOfF)a7)z%WHFk)pLUZ=6(XxafM^!
|
||||||
|
z%0C9IY)gHK87eL*K^nT^`^L1GfodMj!1yM6m)W$nbg^c*tL1TW(75}hj*rJjmfY$r
|
||||||
|
zvTeq7XE*Iw{$tOoHLNcVEHlLSeQEOwyj+1Sws}~h!|369Wm9ZiT$Ge|b6~rc0~J(V
|
||||||
|
zj;?$Dc3_oP>AoM<wJ+4W4~FMgI+^!eFyARCH@qC~YAe3xInY#^b&c=(EXi0uUMv0X
|
||||||
|
z;D*60o#jA3g?+HtVzHbbD-rMgz&T*wg2J3FMWb0SGvoVarMYj-&9~_HN~O}GhEJ+f
|
||||||
|
z7ZrxsK5B5O=qk+F&=Yqm2bs0?lF71k-qWU?O3#zW#m0V8U4K_&?cnCLof)R94ziRC
|
||||||
|
z(-F}PAb=O9(?xv{hD)zJUVBc1KX0XE%{Me1?i!UEHH7n#<sl3TeWderGQMdwljcWn
|
||||||
|
z&)nb^E0tbTz2FwL^4EK;4K&`x)jNDRuQ{H0Z)agnOHb4(Yw3Gs3!dM(KO8jpeZc$a
|
||||||
|
zWzO42zgd-YvO;_<AjP4)Vra~Ey5aiXHLWpE>fi78tTx79DA|(dPy6s$XBVxwd&HAi
|
||||||
|
zm?k&eR_3_PT4voHm+9SesKd$W{If4^wx3wryjn23Fz2w1bTU5pdO=r4bX|D(S<|1Z
|
||||||
|
z)Xtks*6h}VT?sdt#&h3g@y1Gc+OO`n5jxAqY$aFc>o(^d3Ct{)8Y|#%-0h8h&VwF@
|
||||||
|
z9(#9IJ2&~=$nr=mwt4fa-ncSYc~|=x^-0jS&!xwVl=jY6*PFc$a^hN)9z@B7qpJq<
|
||||||
|
zqU(x28(E*UIrHHn@5P(m9TcP`|6^rArF%Fo-J5Ba4C@SgTdQ-*j>bIov~9z6-*+sy
|
||||||
|
z=fY!Y?kr|0nQh0OxXbUSM@b)v4~M<HdYv;z(Q@Pnx*j!M-(NP!X}LsR@~@|>Hi{Q%
|
||||||
|
zE_%fqMn*<>@j>I(+Fs9&zeU$I>%Kl~YR|~L!a39HaBQd5YK^!x8F%w-lb7~%&XZ=H
|
||||||
|
z+e4|_s$}En<A&Wk=G0ta-akY|gU)+zndjDR#+oaapa%~}2zNN^=T@%st`UdfZsX5K
|
||||||
|
z;<{ab<Ri&aN6nciy)qR^J7axe32}Y2(=D4DaiX-{w61nFQ_KIVYk||nl!UxvxgJ=@
|
||||||
|
zPyXaq(EQZ>``&ENi>7hMdC%_F_+PY^hPRo)r3OWZW=K2MPrcDED2RL!Xt8vkJE)zX
|
||||||
|
z-V~oT)Oux5R;-E33*V;tVNb)yb+5NR>W-2ZRjJp$7KAHI+dUEV4C~Ug_)(`b$H#2-
|
||||||
|
z`bQ_KuDK1jhWpnoWa7F50`&#S+^1N^Ir+wKLF%`c_w_FNG}$;%Q}cLP|G-;sNxL%F
|
||||||
|
zjkdIn7B)5DillcP<S(B8-D*l`w7N#LCG5&?4-_@xs>vH$T>QQN$hPt;8`hqev)+b-
|
||||||
|
VfHkC3x%R(PPDlj%Qt&qYzX3LdVM71_
|
||||||
|
|
||||||
|
literal 0
|
||||||
|
HcmV?d00001
|
||||||
|
|
||||||
|
diff --git a/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_home.png b/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_home.png
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..20f1d887aedebaadec7f31184bdfe3e662401522
|
||||||
|
GIT binary patch
|
||||||
|
literal 1362
|
||||||
|
zcma)5dsvcZ6eq3COPOfdW%DV^ZrZSmmu5@DVMeK8>Y7WZW@(O;T+M9eB{VT<`aG7k
|
||||||
|
zn)f@oE<`v`G!hdlR3b#c8xe|l8>DE0=1%!ff9^cb_kQR6zW4o|-#O>~uHt;XmYJ+I
|
||||||
|
zK_C#zum>?m;Z6Mb7#YIa&@1aeAQowH-T|Hv{vWHXtnBFM=<e<w92^`Q8&j**TCH|w
|
||||||
|
zW=5ye&3!WP0UQ|_Q79BrskFVly|A!wfjKuf7x4M{d8JaBnwknAkw}F7z<|f&A$<GE
|
||||||
|
z#9}dz$7^nGX0cc_8jVh;L(;OcvZ|`8#>Pg#+uGV-5Af^tdQj5Y*@;G@7g7WV2lw^$
|
||||||
|
z&Cbrcy1D|=)YK%ANCpN5N=ix~<n#IPDIy{wJ3E`nWcKv*3=a<jJ~cJf+S&>ZaQ652
|
||||||
|
zkB^VPe*JoAXb4sSfdMK7NivzNx3?D%jYb1`<#IVVU0q$En!#X*L?S?ds;;h1AP_)}
|
||||||
|
zAPmlOI2^#?IGhE}g|<Kzp-{LW0Lq7!LM=f-K_n8XzP_H#W&;}}s;H>Q%*+JYC=?2V
|
||||||
|
z!GL%y77OKo5-yhu+n_ns)zwrgwWXy6T1_UCp`W0EKp^Dh<v}6PaFC%=sbDCRlamt@
|
||||||
|
z6CeiW0^~4=G>fQ@x1sX<QD1+=qAyI$kd`a0R;^yM1V^rBzv>>;Oz3t0N?$cpk-RL7
|
||||||
|
z-Curq>S*LLrm$bkV3lSj#D<6Y;{swYW|gxi%Zs*{e(6A+T4!*U^3;3jAJaPzMpw75
|
||||||
|
z7$ut5KkB^M^5?QL0f}~RdGFoYzGCL-{5n-sF6Va91!l$rZes=YHif6k(V{Rhzm^#u
|
||||||
|
zalK`;ZDwOVJvHuRU~uxaZ`Dc^TF`p)x#X>!QNDJ?g&SrFgh3=0gAPcLj)}XDS)x}j
|
||||||
|
zQJ<v!mA=U?%l=1~tj%`B)z`KbFE+KKzBz$GdPW=@wWdy+ogj$E`&FZwuZ!Zp<C4}~
|
||||||
|
zVm#p%keE^NFI+55ke}Hcsp&xT<5FtE)tFl*wILQcp5N@wHNu;kTknn!mb^C}u(Xb{
|
||||||
|
zz`fa%H*memyTCaq1Ap2W>D!)vB`lDpEI*IgAvkB_L`bG*pdVVjPYM(XQGXx5K?%)o
|
||||||
|
zLs2>$w}*(t!qJq_*t<Eng8LR58%v)#oqHZo6K-pf@#;>Nf;aRca6{9uQ_PEv<)W-?
|
||||||
|
z(KCaVz2Og5`HT(EW0DOY#`%Z2w?rbt$vWfcc*OArS@cn<@fq^g9Guwf{7Pas%bMNJ
|
||||||
|
zdS?{t^03BBAX+^7!xLN9zWoH>T^@;-lRUM^DZ}5M%WCC|WMSxw>0+B=^sbRM4jZXO
|
||||||
|
z$_Lnf*!02(cHH5lbT?VLt;YvjoU;yD7jgjM%PiY#eFT3yJ0;{s)Z^`kQt+<!k~_Qu
|
||||||
|
zviuCA6KQS^l4A0z$7lHCo-;d7g&3e}+$(1}x<hC;kGbLH_zAlm>$e4s;^kW?4ngm_
|
||||||
|
zE`Q~cX8O<Z(zEsV8qXf?Mb7nT$Cn62o198j$sS3_dA5Umo!g_|H>CWM;Mc75nWk1-
|
||||||
|
zsTCC62DdZ&CLU}r=+K8QH9PflBu(;$$CuS~(S5S#8@}fRZa&GnX#a%YkXXbwx5=MX
|
||||||
|
z``wiJ|MZgXydqYc;eH`$&5TsFXJu)BBv++(-ld-NA|wj=+9rOa!u0;M{>s}ZN=&zg
|
||||||
|
jp|o;zi!=ZHCR`6amaD0~y#7)m{38ggr!VHdM;P%x23q9L
|
||||||
|
|
||||||
|
literal 0
|
||||||
|
HcmV?d00001
|
||||||
|
|
||||||
|
diff --git a/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_home_darkmode.png b/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_home_darkmode.png
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..96dc83e4a42d70c1b11ac5a55ea5eb8cd75e1e20
|
||||||
|
GIT binary patch
|
||||||
|
literal 980
|
||||||
|
zcmeAS@N?(olHy`uVBq!ia0vp^O(4v{3?%p7eQ=(EfiWY%C&U%V?H>iS4*_MFJ{MqE
|
||||||
|
zmzM<j1v8iwPFQ>B+}+pje*SoQ_Tb9?Tpg9&|JF;%JijfpWO-*ypo^KYc~ESA_nHsA
|
||||||
|
ztz3e$KC_1!6n_!c@R_*xN!py_HCyTq=gggUaniy|?MuCzA69H^h|Zp|b=B<p2PGc`
|
||||||
|
z0>b30*|@*0n4jWq;gIy|zKGh99kpj}USHgEp;$&A80||uT^vIyZoR$k8h+S8g!O?F
|
||||||
|
zcj^bHLXDPyjKZ$qJ6m_`-hKM-Z=Y)^yB^s@+{vH0dq%aAaitu;AQIT=<@xp3rAvP$
|
||||||
|
zy;7MXy;6S{7k&Q3%$mf?)m#uB5~Fl^!4@93r=m)tT64E<TJ6;MO6v5gt#7SPb6q!g
|
||||||
|
zS=4*(tJ=ib0ZZOj6rVo7V5@I<#(RMk0++cf?<&vlvtrdMVZ3YmE^z(23+e$2<s}SK
|
||||||
|
z3ljnsIEfmhoN8+nY~)&eV1{Nl6Oi%vK#S&VmSrqjKFn8_<*>~VU17l9;(OC(gF?VT
|
||||||
|
zew|sHRA+K^s)$ZwynjDjB9%2Z@o9hj@z9yqKg!oksmhKrP8D1bl-3+)o+@o5{UvQu
|
||||||
|
za+deA^S<)eZhOAF(C5HfE5hn~GjCG+m+o&3f0++AEUdr7$EqdsvefBVI!p9|LmNK}
|
||||||
|
z*BAXVwz%BS@myD^`ADnrrX%|0>yoZt>&?Br{aWc8JyVg;b6@KwX1@Ay&*p-y%_*L#
|
||||||
|
z{^ysm=`T&%{PpeY3#V^a$E?)Zo3}Wqvw!=8=ht19w|5|cm|EtWFQ%k?JmTvKOfn3f
|
||||||
|
Lu6{1-oD!M<_NCyP
|
||||||
|
|
||||||
|
literal 0
|
||||||
|
HcmV?d00001
|
||||||
|
|
||||||
|
diff --git a/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_recent.png b/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_recent.png
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..4f0d314e2621d018c3cd2e4267cf4cf82a78943f
|
||||||
|
GIT binary patch
|
||||||
|
literal 278
|
||||||
|
zcmeAS@N?(olHy`uVBq!ia0vp^O(4v{3?%p7eQ+K~IR*HHxB_W3aOlvXS731D$dNyP
|
||||||
|
z{`~&^8>ry@`}c3(z6CO@t*tk0+O&D|W?NfZAou_O|I!nsR|8q1B|(0{3``sX!dw~0
|
||||||
|
z&!m6(D0J#1t5jH`B>TrxD!+gV@;qG}Ln>~)y?T=OumO*&<LOWDj(nQ-FWQ&&(?pJ@
|
||||||
|
znOy%Gk7P>$)d4|WP*!pH)Y~Ek3+0ck%$oDNf%ERC$_@LN)Si65+@j0wqw%{iOg5Zz
|
||||||
|
u=kcQOsZZh^l}((KO_)H0lQP7Be}}|<Jmh~yiM-bb33$5txvX<aXaWF$9A~fq
|
||||||
|
|
||||||
|
literal 0
|
||||||
|
HcmV?d00001
|
||||||
|
|
||||||
|
diff --git a/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_recent_darkmode.png b/packages/overlays/MiuiNavbarOverlay/res/drawable-440dpi-v4/ic_sysbar_recent_darkmode.png
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..f53ec649e615e8491fb6abb63d169ab7e0faa1ce
|
||||||
|
GIT binary patch
|
||||||
|
literal 205
|
||||||
|
zcmeAS@N?(olHy`uVBq!ia0vp^O(4v{3?%p7eQ+K~DF*n2xB}^ZynuIaZ52=vS4ogx
|
||||||
|
zFoXa0-5=lXWwUX~o_?MiC>rSL;uunK>+RLuyayBnTpaC=HT>3}!PR$SSH`j?-mt2r
|
||||||
|
zKs7+%uwa{9mTBst&#^sIIN#?w`Oh@C&bRjEiUzlg7B>c|g@RIyV08!V`R32zx~(4j
|
||||||
|
Q*9XM+boFyt=akR{0CQqV3jhEB
|
||||||
|
|
||||||
|
literal 0
|
||||||
|
HcmV?d00001
|
||||||
|
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,81 @@
|
|||||||
|
From e799f913b42c58821408527a73aac4115d69df11 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 8 Aug 2021 01:43:42 +0000
|
||||||
|
Subject: [PATCH 18/18] Revert "[DO NOT MERGE] Reduce padding in QS for small
|
||||||
|
screens"
|
||||||
|
|
||||||
|
This reverts commit c3182c54802105c614848b26250c2682eb9900bf.
|
||||||
|
---
|
||||||
|
.../res/values-h740dp-port/dimens.xml | 27 -------------------
|
||||||
|
packages/SystemUI/res/values/dimens.xml | 11 ++++----
|
||||||
|
2 files changed, 5 insertions(+), 33 deletions(-)
|
||||||
|
delete mode 100644 packages/SystemUI/res/values-h740dp-port/dimens.xml
|
||||||
|
|
||||||
|
diff --git a/packages/SystemUI/res/values-h740dp-port/dimens.xml b/packages/SystemUI/res/values-h740dp-port/dimens.xml
|
||||||
|
deleted file mode 100644
|
||||||
|
index 966066ffe56..00000000000
|
||||||
|
--- a/packages/SystemUI/res/values-h740dp-port/dimens.xml
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,27 +0,0 @@
|
||||||
|
-<!--
|
||||||
|
- ~ Copyright (C) 2020 The Android Open Source Project
|
||||||
|
- ~
|
||||||
|
- ~ Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
- ~ you may not use this file except in compliance with the License.
|
||||||
|
- ~ You may obtain a copy of the License at
|
||||||
|
- ~
|
||||||
|
- ~ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
- ~
|
||||||
|
- ~ Unless required by applicable law or agreed to in writing, software
|
||||||
|
- ~ distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
- ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
- ~ See the License for the specific language governing permissions and
|
||||||
|
- ~ limitations under the License
|
||||||
|
- -->
|
||||||
|
-
|
||||||
|
-<resources>
|
||||||
|
- <dimen name="qs_tile_height">106dp</dimen>
|
||||||
|
- <dimen name="qs_tile_margin_vertical">24dp</dimen>
|
||||||
|
-
|
||||||
|
- <!-- The height of the qs customize header. Should be
|
||||||
|
- (qs_panel_padding_top (48dp) + brightness_mirror_height (48dp) + qs_tile_margin_top (18dp)) -
|
||||||
|
- (Toolbar_minWidth (56dp) + qs_tile_margin_top_bottom (12dp))
|
||||||
|
- -->
|
||||||
|
- <dimen name="qs_customize_header_min_height">46dp</dimen>
|
||||||
|
- <dimen name="qs_tile_margin_top">18dp</dimen>
|
||||||
|
-</resources>
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
|
||||||
|
index 9172bfa823e..cb6f550ec49 100644
|
||||||
|
--- a/packages/SystemUI/res/values/dimens.xml
|
||||||
|
+++ b/packages/SystemUI/res/values/dimens.xml
|
||||||
|
@@ -490,21 +490,20 @@
|
||||||
|
<!-- The size of the gesture span needed to activate the "pull" notification expansion -->
|
||||||
|
<dimen name="pull_span_min">25dp</dimen>
|
||||||
|
|
||||||
|
- <dimen name="qs_tile_height">96dp</dimen>
|
||||||
|
+ <dimen name="qs_tile_height">106dp</dimen>
|
||||||
|
<!--notification_side_paddings + notification_content_margin_start - (qs_quick_tile_size - qs_tile_background_size) / 2 -->
|
||||||
|
<dimen name="qs_tile_layout_margin_side">18dp</dimen>
|
||||||
|
<dimen name="qs_tile_margin_horizontal">18dp</dimen>
|
||||||
|
<dimen name="qs_tile_margin_horizontal_two_line">2dp</dimen>
|
||||||
|
- <dimen name="qs_tile_margin_vertical">2dp</dimen>
|
||||||
|
+ <dimen name="qs_tile_margin_vertical">24dp</dimen>
|
||||||
|
<dimen name="qs_tile_margin_top_bottom">12dp</dimen>
|
||||||
|
<dimen name="qs_tile_margin_top_bottom_negative">-12dp</dimen>
|
||||||
|
<!-- The height of the qs customize header. Should be
|
||||||
|
- (qs_panel_padding_top (48dp) + brightness_mirror_height (48dp) + qs_tile_margin_top (0dp)) -
|
||||||
|
+ (qs_panel_padding_top (48dp) + brightness_mirror_height (48dp) + qs_tile_margin_top (18dp)) -
|
||||||
|
(Toolbar_minWidth (56dp) + qs_tile_margin_top_bottom (12dp))
|
||||||
|
-->
|
||||||
|
- <dimen name="qs_customize_header_min_height">28dp</dimen>
|
||||||
|
- <dimen name="qs_tile_margin_top">0dp</dimen>
|
||||||
|
- <dimen name="qs_tile_icon_background_stroke_width">-1dp</dimen>
|
||||||
|
+ <dimen name="qs_customize_header_min_height">46dp</dimen>
|
||||||
|
+ <dimen name="qs_tile_margin_top">18dp</dimen>
|
||||||
|
<dimen name="qs_tile_background_size">44dp</dimen>
|
||||||
|
<dimen name="qs_quick_tile_size">48dp</dimen>
|
||||||
|
<dimen name="qs_quick_tile_padding">12dp</dimen>
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,28 @@
|
|||||||
|
From e89e2d8f376fcb77078ba06138afa395f91ab55d Mon Sep 17 00:00:00 2001
|
||||||
|
From: AndyCGYan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Wed, 5 Jun 2019 05:10:00 +0000
|
||||||
|
Subject: [PATCH] WiFi: Relax throttling greatly for foreground apps
|
||||||
|
|
||||||
|
...to the extent that it virtually doesn't exist
|
||||||
|
|
||||||
|
Change-Id: Ic01d08ef9c09de128ac08ecebb52aa7f90cf9e4e
|
||||||
|
---
|
||||||
|
service/java/com/android/server/wifi/ScanRequestProxy.java | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/service/java/com/android/server/wifi/ScanRequestProxy.java b/service/java/com/android/server/wifi/ScanRequestProxy.java
|
||||||
|
index 0a9a446ab..3cedc343e 100644
|
||||||
|
--- a/service/java/com/android/server/wifi/ScanRequestProxy.java
|
||||||
|
+++ b/service/java/com/android/server/wifi/ScanRequestProxy.java
|
||||||
|
@@ -67,7 +67,7 @@ public class ScanRequestProxy {
|
||||||
|
private static final String TAG = "WifiScanRequestProxy";
|
||||||
|
|
||||||
|
@VisibleForTesting
|
||||||
|
- public static final int SCAN_REQUEST_THROTTLE_TIME_WINDOW_FG_APPS_MS = 120 * 1000;
|
||||||
|
+ public static final int SCAN_REQUEST_THROTTLE_TIME_WINDOW_FG_APPS_MS = 1;
|
||||||
|
@VisibleForTesting
|
||||||
|
public static final int SCAN_REQUEST_THROTTLE_MAX_IN_TIME_WINDOW_FG_APPS = 4;
|
||||||
|
@VisibleForTesting
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,62 @@
|
|||||||
|
From f6baebedc09b503e477f7f4f1d83ac494d5028d3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Tue, 8 Jun 2021 12:00:26 +0000
|
||||||
|
Subject: [PATCH] Telephony: Disable SPN retrieval
|
||||||
|
|
||||||
|
Kills "double carrier name" on lock screen
|
||||||
|
Not ideal, but not worth wasting more time on
|
||||||
|
|
||||||
|
Change-Id: I06dd17989194590972e526de85dbacf74eff805e
|
||||||
|
---
|
||||||
|
.../internal/telephony/uicc/IccRecords.java | 25 +++++--------------
|
||||||
|
1 file changed, 6 insertions(+), 19 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/java/com/android/internal/telephony/uicc/IccRecords.java b/src/java/com/android/internal/telephony/uicc/IccRecords.java
|
||||||
|
index b33e899b9..220ed875d 100644
|
||||||
|
--- a/src/java/com/android/internal/telephony/uicc/IccRecords.java
|
||||||
|
+++ b/src/java/com/android/internal/telephony/uicc/IccRecords.java
|
||||||
|
@@ -717,35 +717,22 @@ public abstract class IccRecords extends Handler implements IccConstants {
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
- * Return Service Provider Name stored in SIM (EF_SPN=0x6F46) or in RUIM (EF_RUIM_SPN=0x6F41).
|
||||||
|
+ * Return null, disabling Service Provider Name.
|
||||||
|
*
|
||||||
|
- * @return null if SIM is not yet ready or no RUIM entry
|
||||||
|
+ * @return null
|
||||||
|
*/
|
||||||
|
public String getServiceProviderName() {
|
||||||
|
- if (mCarrierTestOverride.isInTestMode()) {
|
||||||
|
- String fakeSpn = mCarrierTestOverride.getFakeSpn();
|
||||||
|
- if (fakeSpn != null) {
|
||||||
|
- return fakeSpn;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- return mSpn;
|
||||||
|
+ return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
- * Return Service Provider Name stored in SIM (EF_SPN=0x6F46) or in RUIM (EF_RUIM_SPN=0x6F41) or
|
||||||
|
- * the brand override. The brand override has higher priority than the SPN from SIM.
|
||||||
|
+ * Return null, disabling Service Provider Name.
|
||||||
|
*
|
||||||
|
- * @return service provider name.
|
||||||
|
+ * @return null
|
||||||
|
*/
|
||||||
|
@Nullable
|
||||||
|
public String getServiceProviderNameWithBrandOverride() {
|
||||||
|
- if (mParentApp != null && mParentApp.getUiccProfile() != null) {
|
||||||
|
- String brandOverride = mParentApp.getUiccProfile().getOperatorBrandOverride();
|
||||||
|
- if (!TextUtils.isEmpty(brandOverride)) {
|
||||||
|
- return brandOverride;
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
- return mSpn;
|
||||||
|
+ return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected void setServiceProviderName(String spn) {
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,33 @@
|
|||||||
|
From 8a3d38d3148713836c12d85f7fc4a6a366cc00e4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: AndyCGYan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Mon, 4 Mar 2019 14:27:56 +0800
|
||||||
|
Subject: [PATCH] sdk: Do not warn about SELinux and build signature status
|
||||||
|
|
||||||
|
Change-Id: I6e1ca9f2c2f7763364a9a370f444dfe8059d0563
|
||||||
|
---
|
||||||
|
.../org/lineageos/platform/internal/TrustInterfaceService.java | 9 ---------
|
||||||
|
1 file changed, 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/lineage/lib/main/java/org/lineageos/platform/internal/TrustInterfaceService.java b/lineage/lib/main/java/org/lineageos/platform/internal/TrustInterfaceService.java
|
||||||
|
index 2dcb938..e9f2dca 100644
|
||||||
|
--- a/lineage/lib/main/java/org/lineageos/platform/internal/TrustInterfaceService.java
|
||||||
|
+++ b/lineage/lib/main/java/org/lineageos/platform/internal/TrustInterfaceService.java
|
||||||
|
@@ -197,15 +197,6 @@ public class TrustInterfaceService extends LineageSystemService {
|
||||||
|
}
|
||||||
|
|
||||||
|
private void runTestInternal() {
|
||||||
|
- int selinuxStatus = getSELinuxStatus();
|
||||||
|
- if (selinuxStatus != TrustInterface.TRUST_FEATURE_LEVEL_GOOD) {
|
||||||
|
- postNotificationForFeatureInternal(TrustInterface.TRUST_WARN_SELINUX);
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- int keysStatus = getKeysStatus();
|
||||||
|
- if (keysStatus != TrustInterface.TRUST_FEATURE_LEVEL_GOOD) {
|
||||||
|
- postNotificationForFeatureInternal(TrustInterface.TRUST_WARN_PUBLIC_KEY);
|
||||||
|
- }
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Utils */
|
||||||
|
--
|
||||||
|
2.7.4
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,561 @@
|
|||||||
|
From c17ad9817f16ca7ef8d0209713dec79a0d0afbac Mon Sep 17 00:00:00 2001
|
||||||
|
From: AndyCGYan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Wed, 26 Dec 2018 22:38:54 +0800
|
||||||
|
Subject: [PATCH 2/2] DeskClock: Revert date and clock to Lollipop style
|
||||||
|
|
||||||
|
Also added dynamic date format based on alarm presence
|
||||||
|
|
||||||
|
Change-Id: I04ce41d4817c794edb1579dc3a493a1cf1e8d658
|
||||||
|
---
|
||||||
|
res/layout-land/main_clock_frame.xml | 1 +
|
||||||
|
res/layout/date_and_next_alarm_time.xml | 6 ++----
|
||||||
|
res/layout/digital_widget.xml | 4 ++--
|
||||||
|
res/layout/digital_widget_sizer.xml | 2 --
|
||||||
|
res/layout/main_clock_frame.xml | 1 +
|
||||||
|
res/layout/stopwatch_time.xml | 1 -
|
||||||
|
res/layout/timer_setup_time.xml | 2 +-
|
||||||
|
res/layout/world_clock_remote_list_item.xml | 8 +++----
|
||||||
|
res/values-h560dp/dimens.xml | 2 +-
|
||||||
|
res/values-h650dp/dimens.xml | 2 +-
|
||||||
|
res/values-v21/styles.xml | 8 +++----
|
||||||
|
res/values-v23/styles.xml | 2 --
|
||||||
|
res/values/dimens.xml | 10 ++++-----
|
||||||
|
res/values/styles.xml | 5 +++--
|
||||||
|
.../alarmclock/DigitalAppWidgetProvider.java | 10 +++++++--
|
||||||
|
src/com/android/deskclock/ClockFragment.java | 21 ++++++++++++-------
|
||||||
|
src/com/android/deskclock/Screensaver.java | 8 ++++---
|
||||||
|
.../deskclock/ScreensaverActivity.java | 8 ++++---
|
||||||
|
src/com/android/deskclock/Utils.java | 16 ++++++++++++--
|
||||||
|
19 files changed, 70 insertions(+), 47 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/res/layout-land/main_clock_frame.xml b/res/layout-land/main_clock_frame.xml
|
||||||
|
index b72f62333..a1fa3557d 100644
|
||||||
|
--- a/res/layout-land/main_clock_frame.xml
|
||||||
|
+++ b/res/layout-land/main_clock_frame.xml
|
||||||
|
@@ -38,6 +38,7 @@
|
||||||
|
<com.android.deskclock.widget.AutoSizingTextClock
|
||||||
|
android:id="@+id/digital_clock"
|
||||||
|
style="@style/display_time"
|
||||||
|
+ android:fontFamily="sans-serif-thin"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="none"
|
||||||
|
diff --git a/res/layout/date_and_next_alarm_time.xml b/res/layout/date_and_next_alarm_time.xml
|
||||||
|
index ad25502a8..e4edff237 100644
|
||||||
|
--- a/res/layout/date_and_next_alarm_time.xml
|
||||||
|
+++ b/res/layout/date_and_next_alarm_time.xml
|
||||||
|
@@ -25,8 +25,7 @@
|
||||||
|
android:id="@+id/date"
|
||||||
|
style="@style/body"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
- android:layout_height="wrap_content"
|
||||||
|
- android:textAllCaps="true" />
|
||||||
|
+ android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/nextAlarmIcon"
|
||||||
|
@@ -45,7 +44,6 @@
|
||||||
|
android:id="@+id/nextAlarm"
|
||||||
|
style="@style/body"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
- android:layout_height="wrap_content"
|
||||||
|
- android:textAllCaps="true" />
|
||||||
|
+ android:layout_height="wrap_content" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/res/layout/digital_widget.xml b/res/layout/digital_widget.xml
|
||||||
|
index c5b4837a6..7e2bae454 100644
|
||||||
|
--- a/res/layout/digital_widget.xml
|
||||||
|
+++ b/res/layout/digital_widget.xml
|
||||||
|
@@ -43,13 +43,13 @@
|
||||||
|
<TextClock
|
||||||
|
android:id="@+id/date"
|
||||||
|
style="@style/widget_label"
|
||||||
|
+ android:fontFamily="sans-serif"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:ellipsize="none"
|
||||||
|
android:includeFontPadding="false"
|
||||||
|
android:singleLine="true"
|
||||||
|
- android:textAllCaps="true"
|
||||||
|
android:textColor="@color/white" />
|
||||||
|
|
||||||
|
<ImageView
|
||||||
|
@@ -63,13 +63,13 @@
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/nextAlarm"
|
||||||
|
style="@style/widget_label"
|
||||||
|
+ android:fontFamily="sans-serif"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="center"
|
||||||
|
android:ellipsize="none"
|
||||||
|
android:includeFontPadding="false"
|
||||||
|
android:singleLine="true"
|
||||||
|
- android:textAllCaps="true"
|
||||||
|
android:textColor="@color/white" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
diff --git a/res/layout/digital_widget_sizer.xml b/res/layout/digital_widget_sizer.xml
|
||||||
|
index f524cf536..7b08ca590 100644
|
||||||
|
--- a/res/layout/digital_widget_sizer.xml
|
||||||
|
+++ b/res/layout/digital_widget_sizer.xml
|
||||||
|
@@ -46,7 +46,6 @@
|
||||||
|
android:includeFontPadding="false"
|
||||||
|
android:ellipsize="none"
|
||||||
|
android:singleLine="true"
|
||||||
|
- android:textAllCaps="true"
|
||||||
|
android:textColor="@color/white" />
|
||||||
|
|
||||||
|
<!-- This view is drawn to a Bitmap and sent to the widget as an icon. -->
|
||||||
|
@@ -71,7 +70,6 @@
|
||||||
|
android:includeFontPadding="false"
|
||||||
|
android:ellipsize="none"
|
||||||
|
android:singleLine="true"
|
||||||
|
- android:textAllCaps="true"
|
||||||
|
android:textColor="@color/white" />
|
||||||
|
|
||||||
|
</LinearLayout>
|
||||||
|
diff --git a/res/layout/main_clock_frame.xml b/res/layout/main_clock_frame.xml
|
||||||
|
index ab960728f..2042c5b04 100644
|
||||||
|
--- a/res/layout/main_clock_frame.xml
|
||||||
|
+++ b/res/layout/main_clock_frame.xml
|
||||||
|
@@ -51,6 +51,7 @@
|
||||||
|
<com.android.deskclock.widget.AutoSizingTextClock
|
||||||
|
android:id="@+id/digital_clock"
|
||||||
|
style="@style/display_time"
|
||||||
|
+ android:fontFamily="sans-serif-thin"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="none"
|
||||||
|
diff --git a/res/layout/stopwatch_time.xml b/res/layout/stopwatch_time.xml
|
||||||
|
index c1895b488..71320fcd0 100644
|
||||||
|
--- a/res/layout/stopwatch_time.xml
|
||||||
|
+++ b/res/layout/stopwatch_time.xml
|
||||||
|
@@ -42,7 +42,6 @@
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:duplicateParentState="true"
|
||||||
|
- android:fontFamily="sans-serif"
|
||||||
|
android:includeFontPadding="false"
|
||||||
|
android:paddingEnd="30dp"
|
||||||
|
android:paddingStart="3dp"
|
||||||
|
diff --git a/res/layout/timer_setup_time.xml b/res/layout/timer_setup_time.xml
|
||||||
|
index 572063fc6..14e9ea3bb 100644
|
||||||
|
--- a/res/layout/timer_setup_time.xml
|
||||||
|
+++ b/res/layout/timer_setup_time.xml
|
||||||
|
@@ -32,7 +32,7 @@
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:ellipsize="none"
|
||||||
|
- android:fontFamily="sans-serif"
|
||||||
|
+ android:fontFamily="sans-serif-light"
|
||||||
|
android:fontFeatureSettings="tnum"
|
||||||
|
android:includeFontPadding="false"
|
||||||
|
android:singleLine="true"
|
||||||
|
diff --git a/res/layout/world_clock_remote_list_item.xml b/res/layout/world_clock_remote_list_item.xml
|
||||||
|
index 9a69cb517..f5f4eaa21 100644
|
||||||
|
--- a/res/layout/world_clock_remote_list_item.xml
|
||||||
|
+++ b/res/layout/world_clock_remote_list_item.xml
|
||||||
|
@@ -58,13 +58,13 @@
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/city_name_left"
|
||||||
|
style="@style/widget_label"
|
||||||
|
+ android:fontFamily="sans-serif"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="end"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:includeFontPadding="false"
|
||||||
|
android:singleLine="true"
|
||||||
|
- android:textAllCaps="true"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="@dimen/city_widget_name_font_size" />
|
||||||
|
|
||||||
|
@@ -73,6 +73,7 @@
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/city_day_left"
|
||||||
|
style="@style/widget_label"
|
||||||
|
+ android:fontFamily="sans-serif"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/style_label_space"
|
||||||
|
@@ -81,7 +82,6 @@
|
||||||
|
android:format24Hour="@string/abbrev_wday"
|
||||||
|
android:includeFontPadding="false"
|
||||||
|
android:singleLine="true"
|
||||||
|
- android:textAllCaps="true"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="@dimen/city_widget_name_font_size" />
|
||||||
|
|
||||||
|
@@ -120,13 +120,13 @@
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/city_name_right"
|
||||||
|
style="@style/widget_label"
|
||||||
|
+ android:fontFamily="sans-serif"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_gravity="end"
|
||||||
|
android:ellipsize="end"
|
||||||
|
android:includeFontPadding="false"
|
||||||
|
android:singleLine="true"
|
||||||
|
- android:textAllCaps="true"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="@dimen/city_widget_name_font_size" />
|
||||||
|
|
||||||
|
@@ -135,6 +135,7 @@
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/city_day_right"
|
||||||
|
style="@style/widget_label"
|
||||||
|
+ android:fontFamily="sans-serif"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginStart="@dimen/style_label_space"
|
||||||
|
@@ -143,7 +144,6 @@
|
||||||
|
android:format24Hour="@string/abbrev_wday"
|
||||||
|
android:includeFontPadding="false"
|
||||||
|
android:singleLine="true"
|
||||||
|
- android:textAllCaps="true"
|
||||||
|
android:textColor="@color/white"
|
||||||
|
android:textSize="@dimen/city_widget_name_font_size" />
|
||||||
|
|
||||||
|
diff --git a/res/values-h560dp/dimens.xml b/res/values-h560dp/dimens.xml
|
||||||
|
index 003a5ad9f..6e25621ab 100644
|
||||||
|
--- a/res/values-h560dp/dimens.xml
|
||||||
|
+++ b/res/values-h560dp/dimens.xml
|
||||||
|
@@ -16,5 +16,5 @@
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<!-- The maximum size of the font for the time in widgets. -->
|
||||||
|
- <dimen name="widget_max_clock_font_size">96dp</dimen>
|
||||||
|
+ <dimen name="widget_max_clock_font_size">88dp</dimen>
|
||||||
|
</resources>
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/res/values-h650dp/dimens.xml b/res/values-h650dp/dimens.xml
|
||||||
|
index 2cc58cb32..6e25621ab 100644
|
||||||
|
--- a/res/values-h650dp/dimens.xml
|
||||||
|
+++ b/res/values-h650dp/dimens.xml
|
||||||
|
@@ -16,5 +16,5 @@
|
||||||
|
|
||||||
|
<resources>
|
||||||
|
<!-- The maximum size of the font for the time in widgets. -->
|
||||||
|
- <dimen name="widget_max_clock_font_size">100dp</dimen>
|
||||||
|
+ <dimen name="widget_max_clock_font_size">88dp</dimen>
|
||||||
|
</resources>
|
||||||
|
\ No newline at end of file
|
||||||
|
diff --git a/res/values-v21/styles.xml b/res/values-v21/styles.xml
|
||||||
|
index f1dca16c0..7bc382a4d 100644
|
||||||
|
--- a/res/values-v21/styles.xml
|
||||||
|
+++ b/res/values-v21/styles.xml
|
||||||
|
@@ -18,17 +18,17 @@
|
||||||
|
<resources>
|
||||||
|
|
||||||
|
<style name="body">
|
||||||
|
- <item name="android:textSize">14sp</item>
|
||||||
|
+ <item name="android:textSize">16sp</item>
|
||||||
|
<item name="android:textColor">@color/white</item>
|
||||||
|
- <item name="android:fontFamily">sans-serif-medium</item>
|
||||||
|
+ <item name="android:fontFamily">sans-serif</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="PrimaryLabelTextAppearance" parent="PrimaryLabelTextParentAppearance">
|
||||||
|
- <item name="android:fontFamily">sans-serif-medium</item>
|
||||||
|
+ <item name="android:fontFamily">sans-serif</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="SecondaryLabelTextAppearance" parent="SecondaryLabelTextParentAppearance">
|
||||||
|
- <item name="android:fontFamily">sans-serif-medium</item>
|
||||||
|
+ <item name="android:fontFamily">sans-serif</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
</resources>
|
||||||
|
diff --git a/res/values-v23/styles.xml b/res/values-v23/styles.xml
|
||||||
|
index 34dcf5d73..6bf964256 100644
|
||||||
|
--- a/res/values-v23/styles.xml
|
||||||
|
+++ b/res/values-v23/styles.xml
|
||||||
|
@@ -26,8 +26,6 @@
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="widget_label" parent="label">
|
||||||
|
- <item name="android:textAllCaps">true</item>
|
||||||
|
- <item name="android:letterSpacing">0.15</item>
|
||||||
|
<item name="android:shadowRadius">@dimen/widget_shadow_radius</item>
|
||||||
|
<item name="android:shadowColor">@color/widget_shadow_color</item>
|
||||||
|
<item name="android:shadowDx">@dimen/widget_shadow_dx</item>
|
||||||
|
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
|
||||||
|
index 6a384e94b..442fdb1cc 100644
|
||||||
|
--- a/res/values/dimens.xml
|
||||||
|
+++ b/res/values/dimens.xml
|
||||||
|
@@ -44,7 +44,7 @@
|
||||||
|
<dimen name="alarm_lockscreen_bottom_margin">40dp</dimen>
|
||||||
|
|
||||||
|
<dimen name="main_clock_font_size">64sp</dimen>
|
||||||
|
- <dimen name="main_clock_digital_font_size">90sp</dimen>
|
||||||
|
+ <dimen name="main_clock_digital_font_size">88sp</dimen>
|
||||||
|
<dimen name="main_clock_digital_padding">24dp</dimen>
|
||||||
|
<dimen name="big_font_size">32sp</dimen>
|
||||||
|
<dimen name="label_font_size">16sp</dimen>
|
||||||
|
@@ -93,15 +93,15 @@
|
||||||
|
<dimen name="digital_widget_city_24_medium_font_size">40sp</dimen>
|
||||||
|
|
||||||
|
<!-- The fixed size of the font for the city name / day of week in the city widget. -->
|
||||||
|
- <dimen name="city_widget_name_font_size">10dp</dimen>
|
||||||
|
+ <dimen name="city_widget_name_font_size">12dp</dimen>
|
||||||
|
<!-- The maximum size of the font for the time in widgets. -->
|
||||||
|
<dimen name="widget_max_clock_font_size">88dp</dimen>
|
||||||
|
<dimen name="widget_min_world_city_list_size">80dp</dimen>
|
||||||
|
|
||||||
|
<!-- shadow styles for widget text with drop shadows -->
|
||||||
|
- <item name="widget_shadow_radius" format="float" type="dimen">2.75</item>
|
||||||
|
- <item name="widget_shadow_dx" format="float" type="dimen">2.0</item>
|
||||||
|
- <item name="widget_shadow_dy" format="float" type="dimen">2.0</item>
|
||||||
|
+ <item name="widget_shadow_radius" format="float" type="dimen">0</item>
|
||||||
|
+ <item name="widget_shadow_dx" format="float" type="dimen">0</item>
|
||||||
|
+ <item name="widget_shadow_dy" format="float" type="dimen">0</item>
|
||||||
|
|
||||||
|
<!-- Divider height -->
|
||||||
|
<dimen name="hairline_height">1dp</dimen>
|
||||||
|
diff --git a/res/values/styles.xml b/res/values/styles.xml
|
||||||
|
index fbe62ae3a..ca60e46b8 100644
|
||||||
|
--- a/res/values/styles.xml
|
||||||
|
+++ b/res/values/styles.xml
|
||||||
|
@@ -51,12 +51,13 @@
|
||||||
|
<style name="world_clock_time">
|
||||||
|
<item name="android:textSize">48sp</item>
|
||||||
|
<item name="android:textColor">@color/white</item>
|
||||||
|
- <item name="android:fontFamily">sans-serif-light</item>
|
||||||
|
+ <item name="android:fontFamily">sans-serif-thin</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="body">
|
||||||
|
- <item name="android:textSize">14sp</item>
|
||||||
|
+ <item name="android:textSize">16sp</item>
|
||||||
|
<item name="android:textColor">@color/white</item>
|
||||||
|
+ <item name="android:fontFamily">sans-serif</item>
|
||||||
|
</style>
|
||||||
|
|
||||||
|
<style name="big_thin">
|
||||||
|
diff --git a/src/com/android/alarmclock/DigitalAppWidgetProvider.java b/src/com/android/alarmclock/DigitalAppWidgetProvider.java
|
||||||
|
index 3be07eca7..86f1d991e 100644
|
||||||
|
--- a/src/com/android/alarmclock/DigitalAppWidgetProvider.java
|
||||||
|
+++ b/src/com/android/alarmclock/DigitalAppWidgetProvider.java
|
||||||
|
@@ -453,7 +453,13 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
|
||||||
|
*/
|
||||||
|
private static String getDateFormat(Context context) {
|
||||||
|
final Locale locale = Locale.getDefault();
|
||||||
|
- final String skeleton = context.getString(R.string.abbrev_wday_month_day_no_year);
|
||||||
|
+ final String nextAlarmTime = Utils.getNextAlarm(context);
|
||||||
|
+ final String skeleton;
|
||||||
|
+ if (TextUtils.isEmpty(nextAlarmTime)) {
|
||||||
|
+ skeleton = context.getString(R.string.full_wday_month_day_no_year);
|
||||||
|
+ } else {
|
||||||
|
+ skeleton = context.getString(R.string.abbrev_wday_month_day_no_year);
|
||||||
|
+ }
|
||||||
|
return DateFormat.getBestDateTimePattern(locale, skeleton);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -495,7 +501,7 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
|
||||||
|
private int getClockFontSizePx() { return mClockFontSizePx; }
|
||||||
|
private void setClockFontSizePx(int clockFontSizePx) {
|
||||||
|
mClockFontSizePx = clockFontSizePx;
|
||||||
|
- mFontSizePx = max(1, round(clockFontSizePx / 7.5f));
|
||||||
|
+ mFontSizePx = max(1, round(clockFontSizePx / 5.5f));
|
||||||
|
mIconFontSizePx = (int) (mFontSizePx * 1.4f);
|
||||||
|
mIconPaddingPx = mFontSizePx / 3;
|
||||||
|
}
|
||||||
|
diff --git a/src/com/android/deskclock/ClockFragment.java b/src/com/android/deskclock/ClockFragment.java
|
||||||
|
index b487e52be..1459094ee 100644
|
||||||
|
--- a/src/com/android/deskclock/ClockFragment.java
|
||||||
|
+++ b/src/com/android/deskclock/ClockFragment.java
|
||||||
|
@@ -80,6 +80,7 @@ public final class ClockFragment extends DeskClockFragment {
|
||||||
|
private SelectedCitiesAdapter mCityAdapter;
|
||||||
|
private RecyclerView mCityList;
|
||||||
|
private String mDateFormat;
|
||||||
|
+ private String mDateFormatAlarm;
|
||||||
|
private String mDateFormatForAccessibility;
|
||||||
|
|
||||||
|
/**
|
||||||
|
@@ -103,11 +104,12 @@ public final class ClockFragment extends DeskClockFragment {
|
||||||
|
|
||||||
|
final View fragmentView = inflater.inflate(R.layout.clock_fragment, container, false);
|
||||||
|
|
||||||
|
- mDateFormat = getString(R.string.abbrev_wday_month_day_no_year);
|
||||||
|
+ mDateFormat = getString(R.string.full_wday_month_day_no_year);
|
||||||
|
+ mDateFormatAlarm = getString(R.string.abbrev_wday_month_day_no_year);
|
||||||
|
mDateFormatForAccessibility = getString(R.string.full_wday_month_day_no_year);
|
||||||
|
|
||||||
|
mCityAdapter = new SelectedCitiesAdapter(getActivity(), mDateFormat,
|
||||||
|
- mDateFormatForAccessibility);
|
||||||
|
+ mDateFormatAlarm, mDateFormatForAccessibility);
|
||||||
|
|
||||||
|
mCityList = (RecyclerView) fragmentView.findViewById(R.id.cities);
|
||||||
|
mCityList.setLayoutManager(new LinearLayoutManager(getActivity()));
|
||||||
|
@@ -129,7 +131,7 @@ public final class ClockFragment extends DeskClockFragment {
|
||||||
|
mDigitalClock = (TextClock) mClockFrame.findViewById(R.id.digital_clock);
|
||||||
|
mAnalogClock = (AnalogClock) mClockFrame.findViewById(R.id.analog_clock);
|
||||||
|
Utils.setClockIconTypeface(mClockFrame);
|
||||||
|
- Utils.updateDate(mDateFormat, mDateFormatForAccessibility, mClockFrame);
|
||||||
|
+ Utils.updateDate(getActivity(), mDateFormat, mDateFormatAlarm, mDateFormatForAccessibility, mClockFrame);
|
||||||
|
Utils.setClockStyle(mDigitalClock, mAnalogClock);
|
||||||
|
Utils.setClockSecondsEnabled(mDigitalClock, mAnalogClock);
|
||||||
|
}
|
||||||
|
@@ -146,7 +148,8 @@ public final class ClockFragment extends DeskClockFragment {
|
||||||
|
|
||||||
|
final Activity activity = getActivity();
|
||||||
|
|
||||||
|
- mDateFormat = getString(R.string.abbrev_wday_month_day_no_year);
|
||||||
|
+ mDateFormat = getString(R.string.full_wday_month_day_no_year);
|
||||||
|
+ mDateFormatAlarm = getString(R.string.abbrev_wday_month_day_no_year);
|
||||||
|
mDateFormatForAccessibility = getString(R.string.full_wday_month_day_no_year);
|
||||||
|
|
||||||
|
// Watch for system events that effect clock time or format.
|
||||||
|
@@ -348,13 +351,15 @@ public final class ClockFragment extends DeskClockFragment {
|
||||||
|
private final Context mContext;
|
||||||
|
private final boolean mIsPortrait;
|
||||||
|
private final boolean mShowHomeClock;
|
||||||
|
- private final String mDateFormat;
|
||||||
|
- private final String mDateFormatForAccessibility;
|
||||||
|
+ private static String mDateFormat;
|
||||||
|
+ private static String mDateFormatAlarm;
|
||||||
|
+ private static String mDateFormatForAccessibility;
|
||||||
|
|
||||||
|
private SelectedCitiesAdapter(Context context, String dateFormat,
|
||||||
|
- String dateFormatForAccessibility) {
|
||||||
|
+ String dateFormatAlarm, String dateFormatForAccessibility) {
|
||||||
|
mContext = context;
|
||||||
|
mDateFormat = dateFormat;
|
||||||
|
+ mDateFormatAlarm = dateFormatAlarm;
|
||||||
|
mDateFormatForAccessibility = dateFormatForAccessibility;
|
||||||
|
mInflater = LayoutInflater.from(context);
|
||||||
|
mIsPortrait = Utils.isPortrait(context);
|
||||||
|
@@ -541,7 +546,7 @@ public final class ClockFragment extends DeskClockFragment {
|
||||||
|
String dateFormatForAccessibility, boolean showHairline) {
|
||||||
|
Utils.refreshAlarm(context, itemView);
|
||||||
|
|
||||||
|
- Utils.updateDate(dateFormat, dateFormatForAccessibility, itemView);
|
||||||
|
+ Utils.updateDate(context, mDateFormat, mDateFormatAlarm, mDateFormatForAccessibility, itemView);
|
||||||
|
Utils.setClockStyle(mDigitalClock, mAnalogClock);
|
||||||
|
mHairline.setVisibility(showHairline ? VISIBLE : GONE);
|
||||||
|
|
||||||
|
diff --git a/src/com/android/deskclock/Screensaver.java b/src/com/android/deskclock/Screensaver.java
|
||||||
|
index 68899d96e..7f01d880a 100644
|
||||||
|
--- a/src/com/android/deskclock/Screensaver.java
|
||||||
|
+++ b/src/com/android/deskclock/Screensaver.java
|
||||||
|
@@ -43,6 +43,7 @@ public final class Screensaver extends DreamService {
|
||||||
|
private MoveScreensaverRunnable mPositionUpdater;
|
||||||
|
|
||||||
|
private String mDateFormat;
|
||||||
|
+ private String mDateFormatAlarm;
|
||||||
|
private String mDateFormatForAccessibility;
|
||||||
|
|
||||||
|
private View mContentView;
|
||||||
|
@@ -63,7 +64,7 @@ public final class Screensaver extends DreamService {
|
||||||
|
private final Runnable mMidnightUpdater = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
- Utils.updateDate(mDateFormat, mDateFormatForAccessibility, mContentView);
|
||||||
|
+ Utils.updateDate(Screensaver.this, mDateFormat, mDateFormatAlarm, mDateFormatForAccessibility, mContentView);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
@@ -84,7 +85,8 @@ public final class Screensaver extends DreamService {
|
||||||
|
setTheme(R.style.Theme_DeskClock);
|
||||||
|
super.onCreate();
|
||||||
|
|
||||||
|
- mDateFormat = getString(R.string.abbrev_wday_month_day_no_year);
|
||||||
|
+ mDateFormat = getString(R.string.full_wday_month_day_no_year);
|
||||||
|
+ mDateFormatAlarm = getString(R.string.abbrev_wday_month_day_no_year);
|
||||||
|
mDateFormatForAccessibility = getString(R.string.full_wday_month_day_no_year);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -129,7 +131,7 @@ public final class Screensaver extends DreamService {
|
||||||
|
getContentResolver().registerContentObserver(uri, false, mSettingsContentObserver);
|
||||||
|
}
|
||||||
|
|
||||||
|
- Utils.updateDate(mDateFormat, mDateFormatForAccessibility, mContentView);
|
||||||
|
+ Utils.updateDate(this, mDateFormat, mDateFormatAlarm, mDateFormatForAccessibility, mContentView);
|
||||||
|
Utils.refreshAlarm(this, mContentView);
|
||||||
|
|
||||||
|
startPositionUpdater();
|
||||||
|
diff --git a/src/com/android/deskclock/ScreensaverActivity.java b/src/com/android/deskclock/ScreensaverActivity.java
|
||||||
|
index c7d54af3f..14c9bab00 100644
|
||||||
|
--- a/src/com/android/deskclock/ScreensaverActivity.java
|
||||||
|
+++ b/src/com/android/deskclock/ScreensaverActivity.java
|
||||||
|
@@ -87,11 +87,12 @@ public class ScreensaverActivity extends BaseActivity {
|
||||||
|
private final Runnable mMidnightUpdater = new Runnable() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
- Utils.updateDate(mDateFormat, mDateFormatForAccessibility, mContentView);
|
||||||
|
+ Utils.updateDate(ScreensaverActivity.this, mDateFormat, mDateFormatAlarm, mDateFormatForAccessibility, mContentView);
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
private String mDateFormat;
|
||||||
|
+ private String mDateFormatAlarm;
|
||||||
|
private String mDateFormatForAccessibility;
|
||||||
|
|
||||||
|
private View mContentView;
|
||||||
|
@@ -103,7 +104,8 @@ public class ScreensaverActivity extends BaseActivity {
|
||||||
|
protected void onCreate(Bundle savedInstanceState) {
|
||||||
|
super.onCreate(savedInstanceState);
|
||||||
|
|
||||||
|
- mDateFormat = getString(R.string.abbrev_wday_month_day_no_year);
|
||||||
|
+ mDateFormat = getString(R.string.full_wday_month_day_no_year);
|
||||||
|
+ mDateFormatAlarm = getString(R.string.abbrev_wday_month_day_no_year);
|
||||||
|
mDateFormatForAccessibility = getString(R.string.full_wday_month_day_no_year);
|
||||||
|
|
||||||
|
setContentView(R.layout.desk_clock_saver);
|
||||||
|
@@ -160,7 +162,7 @@ public class ScreensaverActivity extends BaseActivity {
|
||||||
|
public void onResume() {
|
||||||
|
super.onResume();
|
||||||
|
|
||||||
|
- Utils.updateDate(mDateFormat, mDateFormatForAccessibility, mContentView);
|
||||||
|
+ Utils.updateDate(ScreensaverActivity.this, mDateFormat, mDateFormatAlarm, mDateFormatForAccessibility, mContentView);
|
||||||
|
Utils.refreshAlarm(ScreensaverActivity.this, mContentView);
|
||||||
|
|
||||||
|
startPositionUpdater();
|
||||||
|
diff --git a/src/com/android/deskclock/Utils.java b/src/com/android/deskclock/Utils.java
|
||||||
|
index 6d97912f7..cba5c0909 100644
|
||||||
|
--- a/src/com/android/deskclock/Utils.java
|
||||||
|
+++ b/src/com/android/deskclock/Utils.java
|
||||||
|
@@ -353,6 +353,11 @@ public class Utils {
|
||||||
|
nextAlarmView.setVisibility(View.GONE);
|
||||||
|
nextAlarmIconView.setVisibility(View.GONE);
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ String mDateFormat = context.getString(R.string.full_wday_month_day_no_year);
|
||||||
|
+ String mDateFormatAlarm = context.getString(R.string.abbrev_wday_month_day_no_year);
|
||||||
|
+ String mDateFormatForAccessibility = context.getString(R.string.full_wday_month_day_no_year);
|
||||||
|
+ Utils.updateDate(context, mDateFormat, mDateFormatAlarm, mDateFormatForAccessibility, clock);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void setClockIconTypeface(View clock) {
|
||||||
|
@@ -363,14 +368,21 @@ public class Utils {
|
||||||
|
/**
|
||||||
|
* Clock views can call this to refresh their date.
|
||||||
|
**/
|
||||||
|
- public static void updateDate(String dateSkeleton, String descriptionSkeleton, View clock) {
|
||||||
|
+ public static void updateDate(Context context, String dateSkeleton, String dateSkeletonAlarm, String descriptionSkeleton, View clock) {
|
||||||
|
final TextView dateDisplay = (TextView) clock.findViewById(R.id.date);
|
||||||
|
if (dateDisplay == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Locale l = Locale.getDefault();
|
||||||
|
- final String datePattern = DateFormat.getBestDateTimePattern(l, dateSkeleton);
|
||||||
|
+ final String datePattern;
|
||||||
|
+ final String alarm = getNextAlarm(context);
|
||||||
|
+ if (!TextUtils.isEmpty(alarm)) {
|
||||||
|
+ datePattern = DateFormat.getBestDateTimePattern(l, dateSkeletonAlarm);
|
||||||
|
+ } else {
|
||||||
|
+ datePattern = DateFormat.getBestDateTimePattern(l, dateSkeleton);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
final String descriptionPattern = DateFormat.getBestDateTimePattern(l, descriptionSkeleton);
|
||||||
|
|
||||||
|
final Date now = new Date();
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
File diff suppressed because it is too large
Load Diff
@ -0,0 +1,30 @@
|
|||||||
|
From 734d1b69c62d1ab2e097da3e5c15ce041394d558 Mon Sep 17 00:00:00 2001
|
||||||
|
From: AndyCGYan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Mon, 1 Jul 2019 07:03:04 +0000
|
||||||
|
Subject: [PATCH 1/2] vendor_lineage: Ignore neverallows... again
|
||||||
|
|
||||||
|
Because unofficial builds are better than no builds!
|
||||||
|
|
||||||
|
Change-Id: I4b19d09b28f79c6f5020bf03fdf8931145bca03a
|
||||||
|
---
|
||||||
|
build/core/config.mk | 5 +++++
|
||||||
|
1 file changed, 5 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/build/core/config.mk b/build/core/config.mk
|
||||||
|
index f2e595ff..d6d036a9 100644
|
||||||
|
--- a/build/core/config.mk
|
||||||
|
+++ b/build/core/config.mk
|
||||||
|
@@ -20,5 +20,10 @@ FRAMEWORK_LINEAGE_PLATFORM_API_FILE := $(TOPDIR)lineage-sdk/api/lineage_current.
|
||||||
|
FRAMEWORK_LINEAGE_PLATFORM_REMOVED_API_FILE := $(TOPDIR)lineage-sdk/api/lineage_removed.txt
|
||||||
|
FRAMEWORK_LINEAGE_API_NEEDS_UPDATE_TEXT := $(TOPDIR)vendor/lineage/build/core/apicheck_msg_current.txt
|
||||||
|
|
||||||
|
+# We modify several neverallows, so let the build proceed
|
||||||
|
+ifneq ($(TARGET_BUILD_VARIANT),user)
|
||||||
|
+SELINUX_IGNORE_NEVERALLOWS := true
|
||||||
|
+endif
|
||||||
|
+
|
||||||
|
# Rules for QCOM targets
|
||||||
|
include $(TOPDIR)vendor/lineage/build/core/qcom_target.mk
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,36 @@
|
|||||||
|
From f20707d1b08d3c6fbaf301e4fb621f081b7a81f1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 20 Jun 2021 09:09:15 +0000
|
||||||
|
Subject: [PATCH 2/2] build: Integrate prop modifications (2/2)
|
||||||
|
|
||||||
|
Change-Id: I076973f902ab20011964e50955e4326c18d5b34e
|
||||||
|
---
|
||||||
|
build/core/main_version.mk | 7 +------
|
||||||
|
1 file changed, 1 insertion(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/build/core/main_version.mk b/build/core/main_version.mk
|
||||||
|
index dddeee77..dd86cbfd 100644
|
||||||
|
--- a/build/core/main_version.mk
|
||||||
|
+++ b/build/core/main_version.mk
|
||||||
|
@@ -5,17 +5,12 @@ ADDITIONAL_BUILD_PROPERTIES += \
|
||||||
|
endif
|
||||||
|
|
||||||
|
# LineageOS System Version
|
||||||
|
+# Do not set Display Versions here, due to Makefile not playing nice with spaces
|
||||||
|
ADDITIONAL_BUILD_PROPERTIES += \
|
||||||
|
- ro.lineage.version=$(LINEAGE_VERSION) \
|
||||||
|
ro.lineage.releasetype=$(LINEAGE_BUILDTYPE) \
|
||||||
|
ro.lineage.build.version=$(PRODUCT_VERSION_MAJOR).$(PRODUCT_VERSION_MINOR) \
|
||||||
|
- ro.modversion=$(LINEAGE_VERSION) \
|
||||||
|
ro.lineagelegal.url=https://lineageos.org/legal
|
||||||
|
|
||||||
|
-# LineageOS Platform Display Version
|
||||||
|
-ADDITIONAL_BUILD_PROPERTIES += \
|
||||||
|
- ro.lineage.display.version=$(LINEAGE_DISPLAY_VERSION)
|
||||||
|
-
|
||||||
|
# LineageOS Platform SDK Version
|
||||||
|
ADDITIONAL_BUILD_PROPERTIES += \
|
||||||
|
ro.lineage.build.version.plat.sdk=$(LINEAGE_PLATFORM_SDK_VERSION)
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,48 @@
|
|||||||
|
From 44c6b955f1b787984bcddb53d35bf8eda20e02d1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 8 Aug 2021 01:43:40 +0000
|
||||||
|
Subject: [PATCH] Revert "recovery: Allow custom bootloader msg offset in block
|
||||||
|
misc"
|
||||||
|
|
||||||
|
This reverts commit 0e369f42b82c4d12edba9a46dd20bee0d4b783ec.
|
||||||
|
---
|
||||||
|
bootloader_message/Android.bp | 1 -
|
||||||
|
.../include/bootloader_message/bootloader_message.h | 10 +++++-----
|
||||||
|
2 files changed, 5 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/bootloader_message/Android.bp b/bootloader_message/Android.bp
|
||||||
|
index f23b1dea..6443a077 100644
|
||||||
|
--- a/bootloader_message/Android.bp
|
||||||
|
+++ b/bootloader_message/Android.bp
|
||||||
|
@@ -16,7 +16,6 @@
|
||||||
|
|
||||||
|
cc_defaults {
|
||||||
|
name: "libbootloader_message_defaults",
|
||||||
|
- defaults: ["bootloader_message_offset_defaults"],
|
||||||
|
srcs: ["bootloader_message.cpp"],
|
||||||
|
cflags: [
|
||||||
|
"-Wall",
|
||||||
|
diff --git a/bootloader_message/include/bootloader_message/bootloader_message.h b/bootloader_message/include/bootloader_message/bootloader_message.h
|
||||||
|
index 387692b9..e4cf09b2 100644
|
||||||
|
--- a/bootloader_message/include/bootloader_message/bootloader_message.h
|
||||||
|
+++ b/bootloader_message/include/bootloader_message/bootloader_message.h
|
||||||
|
@@ -29,11 +29,11 @@
|
||||||
|
// 32K - 64K System space, used for miscellanious AOSP features. See below.
|
||||||
|
// Note that these offsets are admitted by bootloader,recovery and uncrypt, so they
|
||||||
|
// are not configurable without changing all of them.
|
||||||
|
-constexpr size_t BOOTLOADER_MESSAGE_OFFSET_IN_MISC = BOARD_RECOVERY_BLDRMSG_OFFSET;
|
||||||
|
-constexpr size_t VENDOR_SPACE_OFFSET_IN_MISC = 2 * 1024 + BOARD_RECOVERY_BLDRMSG_OFFSET;
|
||||||
|
-constexpr size_t WIPE_PACKAGE_OFFSET_IN_MISC = 16 * 1024 + BOARD_RECOVERY_BLDRMSG_OFFSET;
|
||||||
|
-constexpr size_t SYSTEM_SPACE_OFFSET_IN_MISC = 32 * 1024 + BOARD_RECOVERY_BLDRMSG_OFFSET;
|
||||||
|
-constexpr size_t SYSTEM_SPACE_SIZE_IN_MISC = 32 * 1024 + BOARD_RECOVERY_BLDRMSG_OFFSET;
|
||||||
|
+constexpr size_t BOOTLOADER_MESSAGE_OFFSET_IN_MISC = 0;
|
||||||
|
+constexpr size_t VENDOR_SPACE_OFFSET_IN_MISC = 2 * 1024;
|
||||||
|
+constexpr size_t WIPE_PACKAGE_OFFSET_IN_MISC = 16 * 1024;
|
||||||
|
+constexpr size_t SYSTEM_SPACE_OFFSET_IN_MISC = 32 * 1024;
|
||||||
|
+constexpr size_t SYSTEM_SPACE_SIZE_IN_MISC = 32 * 1024;
|
||||||
|
|
||||||
|
/* Bootloader Message (2-KiB)
|
||||||
|
*
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,60 @@
|
|||||||
|
From e679bd168b2d45d552e43072f11786f2891358db Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Mon, 5 Oct 2020 01:51:46 +0000
|
||||||
|
Subject: [PATCH 1/2] build: Don't handle apns-conf
|
||||||
|
|
||||||
|
Leave it to vendor/lineage instead
|
||||||
|
|
||||||
|
Change-Id: I51fb1436ee0ee2e33b20ca0810b69e827f3f34dc
|
||||||
|
---
|
||||||
|
target/product/aosp_product.mk | 5 -----
|
||||||
|
target/product/full_base_telephony.mk | 5 -----
|
||||||
|
target/product/mainline.mk | 4 ----
|
||||||
|
3 files changed, 14 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/target/product/aosp_product.mk b/target/product/aosp_product.mk
|
||||||
|
index 3e03e6213..1e370fce8 100644
|
||||||
|
--- a/target/product/aosp_product.mk
|
||||||
|
+++ b/target/product/aosp_product.mk
|
||||||
|
@@ -40,11 +40,6 @@ PRODUCT_PACKAGES += \
|
||||||
|
WallpaperPicker \
|
||||||
|
|
||||||
|
ifeq ($(LINEAGE_BUILD),)
|
||||||
|
-# Telephony:
|
||||||
|
-# Provide a APN configuration to GSI product
|
||||||
|
-PRODUCT_COPY_FILES += \
|
||||||
|
- device/sample/etc/apns-full-conf.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/apns-conf.xml
|
||||||
|
-
|
||||||
|
# NFC:
|
||||||
|
# Provide a libnfc-nci.conf to GSI product
|
||||||
|
PRODUCT_COPY_FILES += \
|
||||||
|
diff --git a/target/product/full_base_telephony.mk b/target/product/full_base_telephony.mk
|
||||||
|
index 314de3e92..ad46fb97f 100644
|
||||||
|
--- a/target/product/full_base_telephony.mk
|
||||||
|
+++ b/target/product/full_base_telephony.mk
|
||||||
|
@@ -30,10 +30,5 @@ endif
|
||||||
|
PRODUCT_COPY_FILES := \
|
||||||
|
frameworks/native/data/etc/handheld_core_hardware.xml:$(TARGET_COPY_OUT_VENDOR)/etc/permissions/handheld_core_hardware.xml
|
||||||
|
|
||||||
|
-ifeq ($(LINEAGE_BUILD),)
|
||||||
|
-PRODUCT_COPY_FILES += \
|
||||||
|
- device/sample/etc/apns-full-conf.xml:system/etc/apns-conf.xml
|
||||||
|
-endif
|
||||||
|
-
|
||||||
|
$(call inherit-product, $(SRC_TARGET_DIR)/product/aosp_base.mk)
|
||||||
|
$(call inherit-product, $(SRC_TARGET_DIR)/product/telephony.mk)
|
||||||
|
diff --git a/target/product/mainline.mk b/target/product/mainline.mk
|
||||||
|
index 418b1eedd..9754cc8e2 100644
|
||||||
|
--- a/target/product/mainline.mk
|
||||||
|
+++ b/target/product/mainline.mk
|
||||||
|
@@ -40,7 +40,3 @@ endif
|
||||||
|
PRODUCT_PACKAGES += \
|
||||||
|
PhotoTable \
|
||||||
|
WallpaperPicker \
|
||||||
|
-
|
||||||
|
-ifeq ($(LINEAGE_BUILD),)
|
||||||
|
-PRODUCT_COPY_FILES += device/sample/etc/apns-full-conf.xml:$(TARGET_COPY_OUT_PRODUCT)/etc/apns-conf.xml
|
||||||
|
-endif
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
From d2ccffcaf2ad6f8b467afb04683677a3271deafa Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 8 Aug 2021 01:43:40 +0000
|
||||||
|
Subject: [PATCH 2/2] Revert "mainline_system: Exclude vendor.lineage.power@1.0
|
||||||
|
from artifact path requirements"
|
||||||
|
|
||||||
|
This reverts commit 78c28df40f72fdcbe3f82a83828060ad19765fa1.
|
||||||
|
---
|
||||||
|
target/product/mainline_system.mk | 6 ------
|
||||||
|
1 file changed, 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/target/product/mainline_system.mk b/target/product/mainline_system.mk
|
||||||
|
index e9f9dde13..a787707a0 100644
|
||||||
|
--- a/target/product/mainline_system.mk
|
||||||
|
+++ b/target/product/mainline_system.mk
|
||||||
|
@@ -135,12 +135,6 @@ _base_mk_allowed_list :=
|
||||||
|
|
||||||
|
_my_allowed_list := $(_base_mk_allowed_list)
|
||||||
|
|
||||||
|
-# vendor.lineage.power@1.0 currently violates the artifact path requirements
|
||||||
|
-# Exclude it from the check for now
|
||||||
|
-_my_allowed_list += \
|
||||||
|
- $(TARGET_COPY_OUT_SYSTEM_EXT)/lib/vendor.lineage.power@1.0.so \
|
||||||
|
- $(TARGET_COPY_OUT_SYSTEM_EXT)/lib64/vendor.lineage.power@1.0.so \
|
||||||
|
-
|
||||||
|
# For mainline, system.img should be mounted at /, so we include ROOT here.
|
||||||
|
_my_paths := \
|
||||||
|
$(TARGET_COPY_OUT_ROOT)/ \
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,22 @@
|
|||||||
|
From 13f428e6a81c5bba49ecfe5323b450ddae5025b0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 8 Aug 2021 01:43:40 +0000
|
||||||
|
Subject: [PATCH 1/7] Revert "Update lineage.mk for LineageOS 16.0"
|
||||||
|
|
||||||
|
This reverts commit 82b15278bad816632dcaeaed623b569978e9840d.
|
||||||
|
---
|
||||||
|
lineage.mk | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/lineage.mk b/lineage.mk
|
||||||
|
index 172bb01..f6315b9 100644
|
||||||
|
--- a/lineage.mk
|
||||||
|
+++ b/lineage.mk
|
||||||
|
@@ -1,3 +1,4 @@
|
||||||
|
$(call inherit-product, vendor/lineage/config/common_full_phone.mk)
|
||||||
|
+$(call inherit-product, device/lineage/sepolicy/common/sepolicy.mk)
|
||||||
|
-include vendor/lineage/build/core/config.mk
|
||||||
|
-include vendor/lineage/build/core/apicheck.mk
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,29 @@
|
|||||||
|
From ecd6a5affd7df4bd9ab4b89472b2cadc15a6aeba Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Wed, 23 Oct 2019 09:38:16 +0000
|
||||||
|
Subject: [PATCH 2/7] Remove fsck SELinux labels
|
||||||
|
|
||||||
|
These are covered by LOS sepolicy
|
||||||
|
|
||||||
|
Change-Id: I7c63c9aed39afc07b8c80918053154113f848cd9
|
||||||
|
---
|
||||||
|
sepolicy/file_contexts | 3 ---
|
||||||
|
1 file changed, 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/sepolicy/file_contexts b/sepolicy/file_contexts
|
||||||
|
index 7cfb226..7ab5e91 100644
|
||||||
|
--- a/sepolicy/file_contexts
|
||||||
|
+++ b/sepolicy/file_contexts
|
||||||
|
@@ -6,9 +6,6 @@
|
||||||
|
/system/bin/phh-on-data.sh u:object_r:phhsu_exec:s0
|
||||||
|
/system/bin/asus-motor u:object_r:phhsu_exec:s0
|
||||||
|
|
||||||
|
-#/system/bin/fsck\.exfat u:object_r:fsck_exec:s0
|
||||||
|
-/system/bin/fsck\.ntfs u:object_r:fsck_exec:s0
|
||||||
|
-
|
||||||
|
/bt_firmware(/.*)? u:object_r:bt_firmware_file:s0
|
||||||
|
|
||||||
|
/sec_storage(/.*)? u:object_r:teecd_data_file:s0
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,135 @@
|
|||||||
|
From cceaa8cfab8e6f00b1c0d79f2852f7fb2623b075 Mon Sep 17 00:00:00 2001
|
||||||
|
From: AndyCGYan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Mon, 15 Jul 2019 10:43:52 +0000
|
||||||
|
Subject: [PATCH 3/7] treble: Add overlay-lineage
|
||||||
|
|
||||||
|
Change-Id: I9d313b1488d98acc7cf37d23820946ee99745426
|
||||||
|
---
|
||||||
|
base.mk | 12 ++-
|
||||||
|
.../lineage/res/res/values/config.xml | 81 +++++++++++++++++++
|
||||||
|
2 files changed, 90 insertions(+), 3 deletions(-)
|
||||||
|
create mode 100644 overlay-lineage/lineage-sdk/lineage/res/res/values/config.xml
|
||||||
|
|
||||||
|
diff --git a/base.mk b/base.mk
|
||||||
|
index 43f3707..5d16dbe 100644
|
||||||
|
--- a/base.mk
|
||||||
|
+++ b/base.mk
|
||||||
|
@@ -13,7 +13,13 @@ PRODUCT_COPY_FILES += \
|
||||||
|
device/sample/etc/apns-full-conf.xml:system/etc/apns-conf.xml
|
||||||
|
|
||||||
|
BOARD_PLAT_PRIVATE_SEPOLICY_DIR += device/phh/treble/sepolicy
|
||||||
|
-PRODUCT_PACKAGE_OVERLAYS += device/phh/treble/overlay
|
||||||
|
+
|
||||||
|
+PRODUCT_PACKAGE_OVERLAYS += \
|
||||||
|
+ device/phh/treble/overlay \
|
||||||
|
+ device/phh/treble/overlay-lineage
|
||||||
|
+
|
||||||
|
+PRODUCT_ENFORCE_RRO_EXCLUDED_OVERLAYS += \
|
||||||
|
+ device/phh/treble/overlay-lineage/lineage-sdk
|
||||||
|
|
||||||
|
$(call inherit-product, vendor/hardware_overlay/overlay.mk)
|
||||||
|
$(call inherit-product, $(SRC_TARGET_DIR)/product/core_64_bit.mk)
|
||||||
|
@@ -30,11 +36,11 @@ PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||||
|
ro.build.version.security_patch=$(PLATFORM_SECURITY_PATCH) \
|
||||||
|
ro.adb.secure=0 \
|
||||||
|
ro.logd.auditd=true
|
||||||
|
-
|
||||||
|
+
|
||||||
|
#Huawei HiSuite (also other OEM custom programs I guess) it's of no use in AOSP builds
|
||||||
|
PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||||
|
persist.sys.usb.config=adb \
|
||||||
|
- ro.cust.cdrom=/dev/null
|
||||||
|
+ ro.cust.cdrom=/dev/null
|
||||||
|
|
||||||
|
#VNDK config files
|
||||||
|
PRODUCT_COPY_FILES += \
|
||||||
|
diff --git a/overlay-lineage/lineage-sdk/lineage/res/res/values/config.xml b/overlay-lineage/lineage-sdk/lineage/res/res/values/config.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..8df673a
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/overlay-lineage/lineage-sdk/lineage/res/res/values/config.xml
|
||||||
|
@@ -0,0 +1,81 @@
|
||||||
|
+<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
+<!--
|
||||||
|
+ Copyright (C) 2015-2016 The CyanogenMod Project
|
||||||
|
+ 2017-2018 The LineageOS Project
|
||||||
|
+
|
||||||
|
+ Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
+ you may not use this file except in compliance with the License.
|
||||||
|
+ You may obtain a copy of the License at
|
||||||
|
+ http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
+ Unless required by applicable law or agreed to in writing, software
|
||||||
|
+ distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
+ See the License for the specific language governing permissions and
|
||||||
|
+ limitations under the License.
|
||||||
|
+-->
|
||||||
|
+<resources>
|
||||||
|
+ <!-- Whether device has screen with higher aspect ratio -->
|
||||||
|
+ <bool name="config_haveHigherAspectRatioScreen">true</bool>
|
||||||
|
+
|
||||||
|
+ <!-- All the capabilities of the LEDs on this device, stored as a bit field.
|
||||||
|
+ This integer should equal the sum of the corresponding value for each
|
||||||
|
+ of the following capabilities present:
|
||||||
|
+ // Device has a color adjustable battery light.
|
||||||
|
+ LIGHTS_RGB_NOTIFICATION_LED = 1
|
||||||
|
+ // Device has a color adjustable notification light.
|
||||||
|
+ LIGHTS_RGB_BATTERY_LED = 2
|
||||||
|
+ LIGHTS_MULTIPLE_NOTIFICATION_LED = 4 (deprecated)
|
||||||
|
+ // The notification light has adjustable pulsing capability.
|
||||||
|
+ LIGHTS_PULSATING_LED = 8
|
||||||
|
+ // Device has a multi-segment battery light that is able to
|
||||||
|
+ // use the light brightness value to determine how many
|
||||||
|
+ // segments to show (in order to represent battery level).
|
||||||
|
+ LIGHTS_SEGMENTED_BATTERY_LED = 16
|
||||||
|
+ // The notification light supports HAL adjustable brightness
|
||||||
|
+ // via the alpha channel.
|
||||||
|
+ // Note: if a device notification light supports LIGHTS_RGB_NOTIFICATION_LED
|
||||||
|
+ // then HAL support is not necessary for brightness control. In this case,
|
||||||
|
+ // brightness support will be provided by lineage-sdk through the scaling of
|
||||||
|
+ // RGB color values.
|
||||||
|
+ LIGHTS_ADJUSTABLE_NOTIFICATION_LED_BRIGHTNESS = 32
|
||||||
|
+ // Device has a battery light.
|
||||||
|
+ LIGHTS_BATTERY_LED = 64
|
||||||
|
+ // The battery light supports HAL adjustable brightness via
|
||||||
|
+ // the alpha channel.
|
||||||
|
+ // Note: if a device battery light supports LIGHTS_RGB_BATTERY_LED then HAL
|
||||||
|
+ // support is not necessary for brightness control. In this case,
|
||||||
|
+ // brightness support will be provided by lineage-sdk through the scaling of
|
||||||
|
+ // RGB color values.
|
||||||
|
+ LIGHTS_ADJUSTABLE_BATTERY_LED_BRIGHTNESS = 128
|
||||||
|
+ For example, a device with notification and battery lights that supports
|
||||||
|
+ pulsating and RGB control would set this config to 75. -->
|
||||||
|
+ <integer name="config_deviceLightCapabilities">255</integer>
|
||||||
|
+
|
||||||
|
+ <!-- Hardware keys present on the device, stored as a bit field.
|
||||||
|
+ This integer should equal the sum of the corresponding value for each
|
||||||
|
+ of the following keys present:
|
||||||
|
+ 1 - Home
|
||||||
|
+ 2 - Back
|
||||||
|
+ 4 - Menu
|
||||||
|
+ 8 - Assistant (search)
|
||||||
|
+ 16 - App switch
|
||||||
|
+ 32 - Camera
|
||||||
|
+ 64 - Volume rocker
|
||||||
|
+ For example, a device with Home, Back and Menu keys would set this
|
||||||
|
+ config to 7. -->
|
||||||
|
+ <integer name="config_deviceHardwareKeys">127</integer>
|
||||||
|
+
|
||||||
|
+ <!-- Hardware keys present on the device with the ability to wake, stored as a bit field.
|
||||||
|
+ This integer should equal the sum of the corresponding value for each
|
||||||
|
+ of the following keys present:
|
||||||
|
+ 1 - Home
|
||||||
|
+ 2 - Back
|
||||||
|
+ 4 - Menu
|
||||||
|
+ 8 - Assistant (search)
|
||||||
|
+ 16 - App switch
|
||||||
|
+ 32 - Camera
|
||||||
|
+ 64 - Volume rocker
|
||||||
|
+ For example, a device with Home, Back and Menu keys would set this
|
||||||
|
+ config to 7. -->
|
||||||
|
+ <integer name="config_deviceHardwareWakeKeys">127</integer>
|
||||||
|
+</resources>
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,25 @@
|
|||||||
|
From 1ab462e2b735ff92e75fc9eef0d62b3b920771f1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Tue, 10 Sep 2019 02:42:36 +0000
|
||||||
|
Subject: [PATCH 4/7] treble: Don't specify config_wallpaperCropperPackage
|
||||||
|
|
||||||
|
Change-Id: I72b59def304779e4bd9a399c01cf1180d15bf444
|
||||||
|
---
|
||||||
|
overlay/frameworks/base/core/res/res/values/config.xml | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/overlay/frameworks/base/core/res/res/values/config.xml b/overlay/frameworks/base/core/res/res/values/config.xml
|
||||||
|
index 2d5c21e..7a15163 100644
|
||||||
|
--- a/overlay/frameworks/base/core/res/res/values/config.xml
|
||||||
|
+++ b/overlay/frameworks/base/core/res/res/values/config.xml
|
||||||
|
@@ -22,7 +22,6 @@
|
||||||
|
<string name="config_icon_mask" translatable="false">"M50 0C77.6 0 100 22.4 100 50C100 77.6 77.6 100 50 100C22.4 100 0 77.6 0 50C0 22.4 22.4 0 50 0Z"</string>
|
||||||
|
<bool name="config_useRoundIcon">true</bool>
|
||||||
|
|
||||||
|
- <string name="config_wallpaperCropperPackage">com.android.wallpaperpicker</string>
|
||||||
|
<bool name="config_unplugTurnsOnScreen">true</bool>
|
||||||
|
<integer name="config_multiuserMaximumUsers">5</integer>
|
||||||
|
<bool name="config_enableMultiUserUI">true</bool>
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,39 @@
|
|||||||
|
From 1e5aef82a995e0244b3eb084fca25c7f1eedc324 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 27 Jun 2021 15:37:56 +0000
|
||||||
|
Subject: [PATCH 5/7] treble: Don't handle apns-conf
|
||||||
|
|
||||||
|
LineageOS has its own well-maintained copy
|
||||||
|
|
||||||
|
Change-Id: If568101f21098c75879af8b9b6141af179566960
|
||||||
|
---
|
||||||
|
base-pre.mk | 3 ---
|
||||||
|
base.mk | 4 ----
|
||||||
|
2 files changed, 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/base-pre.mk b/base-pre.mk
|
||||||
|
index 6a317e4..e69de29 100644
|
||||||
|
--- a/base-pre.mk
|
||||||
|
+++ b/base-pre.mk
|
||||||
|
@@ -1,3 +0,0 @@
|
||||||
|
-#Use a more decent APN config
|
||||||
|
-PRODUCT_COPY_FILES += \
|
||||||
|
- device/sample/etc/apns-full-conf.xml:system/etc/apns-conf.xml
|
||||||
|
diff --git a/base.mk b/base.mk
|
||||||
|
index 5d16dbe..878aaae 100644
|
||||||
|
--- a/base.mk
|
||||||
|
+++ b/base.mk
|
||||||
|
@@ -8,10 +8,6 @@ PRODUCT_COPY_FILES := \
|
||||||
|
frameworks/native/data/etc/android.hardware.bluetooth_le.xml:system/etc/permissions/android.hardware.bluetooth_le.xml \
|
||||||
|
frameworks/native/data/etc/android.hardware.usb.host.xml:system/etc/permissions/android.hardware.usb.host.xml \
|
||||||
|
|
||||||
|
-#Use a more decent APN config
|
||||||
|
-PRODUCT_COPY_FILES += \
|
||||||
|
- device/sample/etc/apns-full-conf.xml:system/etc/apns-conf.xml
|
||||||
|
-
|
||||||
|
BOARD_PLAT_PRIVATE_SEPOLICY_DIR += device/phh/treble/sepolicy
|
||||||
|
|
||||||
|
PRODUCT_PACKAGE_OVERLAYS += \
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,22 @@
|
|||||||
|
From d7b179f234d76c3acf7a723fc05f07efe9adc84c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 8 Aug 2021 09:29:32 +0000
|
||||||
|
Subject: [PATCH 6/7] treble: Set BOARD_EXT4_SHARE_DUP_BLOCKS explicitly
|
||||||
|
|
||||||
|
Change-Id: I725443154fabde548d2e6c1b072d34c27596c421
|
||||||
|
---
|
||||||
|
board-base.mk | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/board-base.mk b/board-base.mk
|
||||||
|
index 0da1061..e270068 100644
|
||||||
|
--- a/board-base.mk
|
||||||
|
+++ b/board-base.mk
|
||||||
|
@@ -4,3 +4,4 @@ TARGET_EXFAT_DRIVER := exfat
|
||||||
|
DEVICE_FRAMEWORK_MANIFEST_FILE := device/phh/treble/framework_manifest.xml
|
||||||
|
|
||||||
|
BOARD_ROOT_EXTRA_FOLDERS += bt_firmware sec_storage efs
|
||||||
|
+BOARD_EXT4_SHARE_DUP_BLOCKS := true
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,20 @@
|
|||||||
|
From 9d0b5acf3e811eb17eb7501dd43ff952ec3b172f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Victor Bo <bvoid@yandex.ru>
|
||||||
|
Date: Tue, 15 Sep 2020 21:26:45 -0400
|
||||||
|
Subject: [PATCH 7/7] add offline charger sepolicy
|
||||||
|
|
||||||
|
---
|
||||||
|
sepolicy/gsicharger.te | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
create mode 100644 sepolicy/gsicharger.te
|
||||||
|
|
||||||
|
diff --git a/sepolicy/gsicharger.te b/sepolicy/gsicharger.te
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..91cfb5c
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/sepolicy/gsicharger.te
|
||||||
|
@@ -0,0 +1 @@
|
||||||
|
+permissive charger;
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,51 @@
|
|||||||
|
From 0ec12cb7e70f7a0cbeee9934d9b9aa5680359491 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 8 Aug 2021 01:43:40 +0000
|
||||||
|
Subject: [PATCH] Revert "camera: Allow devices to load custom CameraParameter
|
||||||
|
code"
|
||||||
|
|
||||||
|
This reverts commit 5a5606dbd92f01de322c797a7128fce69902d067.
|
||||||
|
---
|
||||||
|
camera/Android.bp | 12 +-----------
|
||||||
|
1 file changed, 1 insertion(+), 11 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/camera/Android.bp b/camera/Android.bp
|
||||||
|
index 21ef9eed70..fa36bb31b1 100644
|
||||||
|
--- a/camera/Android.bp
|
||||||
|
+++ b/camera/Android.bp
|
||||||
|
@@ -14,7 +14,6 @@
|
||||||
|
|
||||||
|
cc_library_shared {
|
||||||
|
name: "libcamera_client",
|
||||||
|
- defaults: ["camera_parameter_library_defaults"],
|
||||||
|
|
||||||
|
aidl: {
|
||||||
|
export_aidl_headers: true,
|
||||||
|
@@ -33,6 +32,7 @@ cc_library_shared {
|
||||||
|
// Source for camera interface parcelables, and manually-written interfaces
|
||||||
|
"Camera.cpp",
|
||||||
|
"CameraMetadata.cpp",
|
||||||
|
+ "CameraParameters.cpp",
|
||||||
|
"CaptureResult.cpp",
|
||||||
|
"CameraParameters2.cpp",
|
||||||
|
"ICamera.cpp",
|
||||||
|
@@ -77,16 +77,6 @@ cc_library_shared {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
-cc_library_static {
|
||||||
|
- name: "libcamera_parameters",
|
||||||
|
-
|
||||||
|
- export_include_dirs: [
|
||||||
|
- "include",
|
||||||
|
- ],
|
||||||
|
- srcs: ["CameraParameters.cpp"],
|
||||||
|
-
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
// AIDL interface between camera clients and the camera service.
|
||||||
|
filegroup {
|
||||||
|
name: "libcamera_client_aidl",
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,40 @@
|
|||||||
|
From 15c6984df105af4e92c20c33ef53451eb99524a9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 8 Aug 2021 01:43:40 +0000
|
||||||
|
Subject: [PATCH] Revert "Add suspend_resume trace events to the atrace 'freq'
|
||||||
|
category."
|
||||||
|
|
||||||
|
This reverts commit 581c22f979af05e48ad4843cdfa9605186d286da.
|
||||||
|
---
|
||||||
|
cmds/atrace/atrace.cpp | 1 -
|
||||||
|
cmds/atrace/atrace.rc | 2 --
|
||||||
|
2 files changed, 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/cmds/atrace/atrace.cpp b/cmds/atrace/atrace.cpp
|
||||||
|
index 28fdaa430..36a35f9f7 100644
|
||||||
|
--- a/cmds/atrace/atrace.cpp
|
||||||
|
+++ b/cmds/atrace/atrace.cpp
|
||||||
|
@@ -171,7 +171,6 @@ static const TracingCategory k_categories[] = {
|
||||||
|
{ OPT, "events/clk/clk_disable/enable" },
|
||||||
|
{ OPT, "events/clk/clk_enable/enable" },
|
||||||
|
{ OPT, "events/power/cpu_frequency_limits/enable" },
|
||||||
|
- { OPT, "events/power/suspend_resume/enable" },
|
||||||
|
} },
|
||||||
|
{ "membus", "Memory Bus Utilization", 0, {
|
||||||
|
{ REQ, "events/memory_bus/enable" },
|
||||||
|
diff --git a/cmds/atrace/atrace.rc b/cmds/atrace/atrace.rc
|
||||||
|
index f442dae66..3fb58275e 100644
|
||||||
|
--- a/cmds/atrace/atrace.rc
|
||||||
|
+++ b/cmds/atrace/atrace.rc
|
||||||
|
@@ -49,8 +49,6 @@ on late-init
|
||||||
|
chmod 0666 /sys/kernel/tracing/events/power/cpu_frequency_limits/enable
|
||||||
|
chmod 0666 /sys/kernel/debug/tracing/events/power/gpu_frequency/enable
|
||||||
|
chmod 0666 /sys/kernel/tracing/events/power/gpu_frequency/enable
|
||||||
|
- chmod 0666 /sys/kernel/debug/tracing/events/power/suspend_resume/enable
|
||||||
|
- chmod 0666 /sys/kernel/tracing/events/power/suspend_resume/enable
|
||||||
|
chmod 0666 /sys/kernel/debug/tracing/events/cpufreq_interactive/enable
|
||||||
|
chmod 0666 /sys/kernel/tracing/events/cpufreq_interactive/enable
|
||||||
|
chmod 0666 /sys/kernel/debug/tracing/events/vmscan/mm_vmscan_direct_reclaim_begin/enable
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,43 @@
|
|||||||
|
From 0b1838a0019eae94f2c2e1d9931bbdb33ac28dad Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 8 Aug 2021 01:43:40 +0000
|
||||||
|
Subject: [PATCH] Revert "Bluetooth: Reset packages/apps/Bluetooth to upstream"
|
||||||
|
|
||||||
|
This reverts commit 4ceb47e32c1be30640e40f81b6f741942f8598ed.
|
||||||
|
---
|
||||||
|
Android.bp | 5 -----
|
||||||
|
tests/robotests/Android.mk | 4 ----
|
||||||
|
2 files changed, 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/Android.bp b/Android.bp
|
||||||
|
index c16faff96..08e0ee116 100644
|
||||||
|
--- a/Android.bp
|
||||||
|
+++ b/Android.bp
|
||||||
|
@@ -1,8 +1,3 @@
|
||||||
|
-// Bluetooth is in it's own namespace to allow it to be replaced with an
|
||||||
|
-// alternate implementation.
|
||||||
|
-soong_namespace {
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
// MAP API module
|
||||||
|
|
||||||
|
java_library {
|
||||||
|
diff --git a/tests/robotests/Android.mk b/tests/robotests/Android.mk
|
||||||
|
index 678ab4bc1..0cb6917ce 100644
|
||||||
|
--- a/tests/robotests/Android.mk
|
||||||
|
+++ b/tests/robotests/Android.mk
|
||||||
|
@@ -1,5 +1,3 @@
|
||||||
|
-ifneq ($(TARGET_USE_QTI_BT_STACK),true)
|
||||||
|
-
|
||||||
|
#############################################################
|
||||||
|
# Bluetooth Robolectric test target. #
|
||||||
|
#############################################################
|
||||||
|
@@ -47,5 +45,3 @@ LOCAL_TEST_PACKAGE := Bluetooth
|
||||||
|
LOCAL_INSTRUMENT_SOURCE_DIRS := $(dir $(LOCAL_PATH))../src
|
||||||
|
|
||||||
|
include external/robolectric-shadows/run_robotests.mk
|
||||||
|
-
|
||||||
|
-endif
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,186 @@
|
|||||||
|
From e587d5f4e924737b481095925d152d9d31adf2cc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sat, 19 Dec 2020 15:57:27 +0000
|
||||||
|
Subject: [PATCH 1/4] Revert "init: Add vendor-specific initialization hooks."
|
||||||
|
|
||||||
|
This reverts commit 7bc78d1354cd2e8df1ba693c627d5be39206e375.
|
||||||
|
|
||||||
|
Change-Id: I0c3241ef3626bc989b34723e30b2339e4a62399d
|
||||||
|
---
|
||||||
|
init/Android.bp | 9 ---------
|
||||||
|
init/NOTICE | 26 --------------------------
|
||||||
|
init/property_service.cpp | 4 ----
|
||||||
|
init/vendor_init.cpp | 37 -------------------------------------
|
||||||
|
init/vendor_init.h | 33 ---------------------------------
|
||||||
|
5 files changed, 109 deletions(-)
|
||||||
|
delete mode 100644 init/vendor_init.cpp
|
||||||
|
delete mode 100644 init/vendor_init.h
|
||||||
|
|
||||||
|
diff --git a/init/Android.bp b/init/Android.bp
|
||||||
|
index e28d9f026..827a8293f 100644
|
||||||
|
--- a/init/Android.bp
|
||||||
|
+++ b/init/Android.bp
|
||||||
|
@@ -71,14 +71,6 @@ init_host_sources = [
|
||||||
|
"host_init_verifier.cpp",
|
||||||
|
]
|
||||||
|
|
||||||
|
-cc_library_static {
|
||||||
|
- name: "vendor_init",
|
||||||
|
- recovery_available: true,
|
||||||
|
- srcs: [
|
||||||
|
- "vendor_init.cpp",
|
||||||
|
- ],
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
cc_defaults {
|
||||||
|
name: "init_defaults",
|
||||||
|
cpp_std: "experimental",
|
||||||
|
@@ -169,7 +161,6 @@ cc_library_static {
|
||||||
|
defaults: [
|
||||||
|
"init_defaults",
|
||||||
|
"selinux_policy_version",
|
||||||
|
- "vendor_init_defaults",
|
||||||
|
],
|
||||||
|
srcs: init_common_sources + init_device_sources,
|
||||||
|
whole_static_libs: [
|
||||||
|
diff --git a/init/NOTICE b/init/NOTICE
|
||||||
|
index 383d0f541..c5b1efa7a 100644
|
||||||
|
--- a/init/NOTICE
|
||||||
|
+++ b/init/NOTICE
|
||||||
|
@@ -188,29 +188,3 @@
|
||||||
|
|
||||||
|
END OF TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
|
||||||
|
-
|
||||||
|
-Redistribution and use in source and binary forms, with or without
|
||||||
|
-modification, are permitted provided that the following conditions are
|
||||||
|
-met:
|
||||||
|
- * Redistributions of source code must retain the above copyright
|
||||||
|
- notice, this list of conditions and the following disclaimer.
|
||||||
|
- * Redistributions in binary form must reproduce the above
|
||||||
|
- copyright notice, this list of conditions and the following
|
||||||
|
- disclaimer in the documentation and/or other materials provided
|
||||||
|
- with the distribution.
|
||||||
|
- * Neither the name of The Linux Foundation nor the names of its
|
||||||
|
- contributors may be used to endorse or promote products derived
|
||||||
|
- from this software without specific prior written permission.
|
||||||
|
-
|
||||||
|
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||||
|
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||||
|
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
|
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
diff --git a/init/property_service.cpp b/init/property_service.cpp
|
||||||
|
index 44b51c2cf..019955b16 100644
|
||||||
|
--- a/init/property_service.cpp
|
||||||
|
+++ b/init/property_service.cpp
|
||||||
|
@@ -70,7 +70,6 @@
|
||||||
|
#include "subcontext.h"
|
||||||
|
#include "system/core/init/property_service.pb.h"
|
||||||
|
#include "util.h"
|
||||||
|
-#include "vendor_init.h"
|
||||||
|
|
||||||
|
using namespace std::literals;
|
||||||
|
|
||||||
|
@@ -976,9 +975,6 @@ void PropertyLoadBootDefaults() {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
- // Update with vendor-specific property runtime overrides
|
||||||
|
- vendor_load_properties();
|
||||||
|
-
|
||||||
|
property_initialize_ro_product_props();
|
||||||
|
property_derive_build_fingerprint();
|
||||||
|
property_initialize_ro_cpu_abilist();
|
||||||
|
diff --git a/init/vendor_init.cpp b/init/vendor_init.cpp
|
||||||
|
deleted file mode 100644
|
||||||
|
index d3fd5ffe2..000000000
|
||||||
|
--- a/init/vendor_init.cpp
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,37 +0,0 @@
|
||||||
|
-/*
|
||||||
|
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
|
||||||
|
-
|
||||||
|
-Redistribution and use in source and binary forms, with or without
|
||||||
|
-modification, are permitted provided that the following conditions are
|
||||||
|
-met:
|
||||||
|
- * Redistributions of source code must retain the above copyright
|
||||||
|
- notice, this list of conditions and the following disclaimer.
|
||||||
|
- * Redistributions in binary form must reproduce the above
|
||||||
|
- copyright notice, this list of conditions and the following
|
||||||
|
- disclaimer in the documentation and/or other materials provided
|
||||||
|
- with the distribution.
|
||||||
|
- * Neither the name of The Linux Foundation nor the names of its
|
||||||
|
- contributors may be used to endorse or promote products derived
|
||||||
|
- from this software without specific prior written permission.
|
||||||
|
-
|
||||||
|
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||||
|
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||||
|
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
|
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-#include "vendor_init.h"
|
||||||
|
-
|
||||||
|
-/* init vendor override stubs */
|
||||||
|
-
|
||||||
|
-__attribute__ ((weak))
|
||||||
|
-void vendor_load_properties()
|
||||||
|
-{
|
||||||
|
-}
|
||||||
|
diff --git a/init/vendor_init.h b/init/vendor_init.h
|
||||||
|
deleted file mode 100644
|
||||||
|
index 9afb449be..000000000
|
||||||
|
--- a/init/vendor_init.h
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,33 +0,0 @@
|
||||||
|
-/*
|
||||||
|
-Copyright (c) 2013, The Linux Foundation. All rights reserved.
|
||||||
|
-
|
||||||
|
-Redistribution and use in source and binary forms, with or without
|
||||||
|
-modification, are permitted provided that the following conditions are
|
||||||
|
-met:
|
||||||
|
- * Redistributions of source code must retain the above copyright
|
||||||
|
- notice, this list of conditions and the following disclaimer.
|
||||||
|
- * Redistributions in binary form must reproduce the above
|
||||||
|
- copyright notice, this list of conditions and the following
|
||||||
|
- disclaimer in the documentation and/or other materials provided
|
||||||
|
- with the distribution.
|
||||||
|
- * Neither the name of The Linux Foundation nor the names of its
|
||||||
|
- contributors may be used to endorse or promote products derived
|
||||||
|
- from this software without specific prior written permission.
|
||||||
|
-
|
||||||
|
-THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED
|
||||||
|
-WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
-MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT
|
||||||
|
-ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS
|
||||||
|
-BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
|
||||||
|
-CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
|
||||||
|
-SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
|
||||||
|
-BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
|
||||||
|
-WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
-OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
|
||||||
|
-IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
- */
|
||||||
|
-
|
||||||
|
-#ifndef __INIT_VENDOR__H__
|
||||||
|
-#define __INIT_VENDOR__H__
|
||||||
|
-extern void vendor_load_properties(void);
|
||||||
|
-#endif /* __INIT_VENDOR__H__ */
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,38 @@
|
|||||||
|
From abbb1f38b347c8681cac4388d49c227e874ea3d9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Wed, 4 Sep 2019 21:11:48 +0200
|
||||||
|
Subject: [PATCH 2/4] Panic into recovery rather than bootloader
|
||||||
|
|
||||||
|
Getting last_kmsg/pstore from bootloader isn't possible for other people
|
||||||
|
than the OEM, but we have TWRP to access last_kmsg/pstore
|
||||||
|
|
||||||
|
Change-Id: If04bb6572dc66677d7b44f7d302b2d69ce526200
|
||||||
|
---
|
||||||
|
init/reboot_utils.cpp | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/init/reboot_utils.cpp b/init/reboot_utils.cpp
|
||||||
|
index 76460a5df..5a12dd7af 100644
|
||||||
|
--- a/init/reboot_utils.cpp
|
||||||
|
+++ b/init/reboot_utils.cpp
|
||||||
|
@@ -34,7 +34,7 @@
|
||||||
|
namespace android {
|
||||||
|
namespace init {
|
||||||
|
|
||||||
|
-static std::string init_fatal_reboot_target = "bootloader";
|
||||||
|
+static std::string init_fatal_reboot_target = "recovery";
|
||||||
|
static bool init_fatal_panic = false;
|
||||||
|
|
||||||
|
void SetFatalRebootTarget() {
|
||||||
|
@@ -48,7 +48,7 @@ void SetFatalRebootTarget() {
|
||||||
|
const char kRebootTargetString[] = "androidboot.init_fatal_reboot_target=";
|
||||||
|
auto start_pos = cmdline.find(kRebootTargetString);
|
||||||
|
if (start_pos == std::string::npos) {
|
||||||
|
- return; // We already default to bootloader if no setting is provided.
|
||||||
|
+ return; // We already default to recovery if no setting is provided
|
||||||
|
}
|
||||||
|
start_pos += sizeof(kRebootTargetString) - 1;
|
||||||
|
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,87 @@
|
|||||||
|
From 9a9baec3df926da5cf27c690590482e11172f821 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Victor Bo <bvoid@yandex.ru>
|
||||||
|
Date: Wed, 3 Mar 2021 06:31:17 -0500
|
||||||
|
Subject: [PATCH 3/4] Restore /sbin for Magisk compatibility
|
||||||
|
|
||||||
|
Squash of:
|
||||||
|
- Revert "Do not create /sbin"
|
||||||
|
- Revert "Remove sbin from fs_config.cpp"
|
||||||
|
- add /sbin to the PATH
|
||||||
|
|
||||||
|
Change-Id: I1224c9b64ce8eb14f7d15c8441c0633a7e6a20de
|
||||||
|
---
|
||||||
|
CleanSpec.mk | 2 --
|
||||||
|
libcutils/fs_config.cpp | 3 +++
|
||||||
|
rootdir/Android.mk | 2 +-
|
||||||
|
rootdir/init.environ.rc.in | 1 +
|
||||||
|
4 files changed, 5 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/CleanSpec.mk b/CleanSpec.mk
|
||||||
|
index 0a534a2bd..81150a0fa 100644
|
||||||
|
--- a/CleanSpec.mk
|
||||||
|
+++ b/CleanSpec.mk
|
||||||
|
@@ -80,8 +80,6 @@ $(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/etc/vndksp.libraries.txt)
|
||||||
|
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/)
|
||||||
|
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/root/sbin/charger)
|
||||||
|
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/sbin/charger)
|
||||||
|
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/root/sbin)
|
||||||
|
-$(call add-clean-step, rm -rf $(PRODUCT_OUT)/recovery/root/sbin)
|
||||||
|
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/product_services)
|
||||||
|
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/product_services.img)
|
||||||
|
$(call add-clean-step, rm -rf $(PRODUCT_OUT)/system/product_services)
|
||||||
|
diff --git a/libcutils/fs_config.cpp b/libcutils/fs_config.cpp
|
||||||
|
index 5805a4d19..b30707fc8 100644
|
||||||
|
--- a/libcutils/fs_config.cpp
|
||||||
|
+++ b/libcutils/fs_config.cpp
|
||||||
|
@@ -80,6 +80,7 @@ static const struct fs_path_config android_dirs[] = {
|
||||||
|
{ 00771, AID_SYSTEM, AID_SYSTEM, 0, "data" },
|
||||||
|
{ 00755, AID_ROOT, AID_SYSTEM, 0, "mnt" },
|
||||||
|
{ 00751, AID_ROOT, AID_SHELL, 0, "product/bin" },
|
||||||
|
+ { 00750, AID_ROOT, AID_SHELL, 0, "sbin" },
|
||||||
|
{ 00777, AID_ROOT, AID_ROOT, 0, "sdcard" },
|
||||||
|
{ 00751, AID_ROOT, AID_SDCARD_R, 0, "storage" },
|
||||||
|
{ 00751, AID_ROOT, AID_SHELL, 0, "system/bin" },
|
||||||
|
@@ -164,6 +165,7 @@ static const struct fs_path_config android_files[] = {
|
||||||
|
{ 00600, AID_ROOT, AID_ROOT, 0, "system_ext/build.prop" },
|
||||||
|
{ 00444, AID_ROOT, AID_ROOT, 0, system_ext_conf_dir + 1 },
|
||||||
|
{ 00444, AID_ROOT, AID_ROOT, 0, system_ext_conf_file + 1 },
|
||||||
|
+ { 00750, AID_ROOT, AID_SHELL, 0, "sbin/fs_mgr" },
|
||||||
|
{ 00755, AID_ROOT, AID_SHELL, 0, "system/bin/crash_dump32" },
|
||||||
|
{ 00755, AID_ROOT, AID_SHELL, 0, "system/bin/crash_dump64" },
|
||||||
|
{ 00755, AID_ROOT, AID_SHELL, 0, "system/bin/debuggerd" },
|
||||||
|
@@ -209,6 +211,7 @@ static const struct fs_path_config android_files[] = {
|
||||||
|
{ 00750, AID_ROOT, AID_SHELL, 0, "init*" },
|
||||||
|
{ 00755, AID_ROOT, AID_SHELL, 0, "odm/bin/*" },
|
||||||
|
{ 00755, AID_ROOT, AID_SHELL, 0, "product/bin/*" },
|
||||||
|
+ { 00750, AID_ROOT, AID_SHELL, 0, "sbin/*" },
|
||||||
|
{ 00755, AID_ROOT, AID_SHELL, 0, "system/bin/*" },
|
||||||
|
{ 00755, AID_ROOT, AID_SHELL, 0, "system/xbin/*" },
|
||||||
|
{ 00755, AID_ROOT, AID_SHELL, 0, "system/apex/*/bin/*" },
|
||||||
|
diff --git a/rootdir/Android.mk b/rootdir/Android.mk
|
||||||
|
index 7d383f522..6d518dcb3 100644
|
||||||
|
--- a/rootdir/Android.mk
|
||||||
|
+++ b/rootdir/Android.mk
|
||||||
|
@@ -77,7 +77,7 @@ endif
|
||||||
|
#
|
||||||
|
# create some directories (some are mount points) and symlinks
|
||||||
|
LOCAL_POST_INSTALL_CMD := mkdir -p $(addprefix $(TARGET_ROOT_OUT)/, \
|
||||||
|
- dev proc sys system data data_mirror odm oem acct config storage mnt apex debug_ramdisk \
|
||||||
|
+ sbin dev proc sys system data data_mirror odm oem acct config storage mnt apex debug_ramdisk \
|
||||||
|
linkerconfig postinstall $(BOARD_ROOT_EXTRA_FOLDERS)); \
|
||||||
|
ln -sf /system/bin $(TARGET_ROOT_OUT)/bin; \
|
||||||
|
ln -sf /system/etc $(TARGET_ROOT_OUT)/etc; \
|
||||||
|
diff --git a/rootdir/init.environ.rc.in b/rootdir/init.environ.rc.in
|
||||||
|
index fdaaf1abe..72ba861a8 100644
|
||||||
|
--- a/rootdir/init.environ.rc.in
|
||||||
|
+++ b/rootdir/init.environ.rc.in
|
||||||
|
@@ -10,6 +10,7 @@ on early-init
|
||||||
|
export ANDROID_TZDATA_ROOT /apex/com.android.tzdata
|
||||||
|
export EXTERNAL_STORAGE /sdcard
|
||||||
|
export ASEC_MOUNTPOINT /mnt/asec
|
||||||
|
+ export PATH /sbin:/product/bin:/apex/com.android.runtime/bin:/apex/com.android.art/bin:/system_ext/bin:/system/bin:/system/xbin:/odm/bin:/vendor/bin:/vendor/xbin
|
||||||
|
export BOOTCLASSPATH %BOOTCLASSPATH%
|
||||||
|
export DEX2OATBOOTCLASSPATH %DEX2OATBOOTCLASSPATH%
|
||||||
|
export SYSTEMSERVERCLASSPATH %SYSTEMSERVERCLASSPATH%
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
52
patches_treble/system_core/0004-fix-offline-charger-v7.patch
Normal file
52
patches_treble/system_core/0004-fix-offline-charger-v7.patch
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
From f2b0a4042521fc7ad60de242227fcbcf21691a3b Mon Sep 17 00:00:00 2001
|
||||||
|
From: Victor Bo <bvoid@yandex.ru>
|
||||||
|
Date: Wed, 26 Feb 2020 07:23:44 +0200
|
||||||
|
Subject: [PATCH 4/4] fix offline charger v7
|
||||||
|
|
||||||
|
modified: rootdir/init.rc
|
||||||
|
---
|
||||||
|
rootdir/init.rc | 13 +++++++++++--
|
||||||
|
1 file changed, 11 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/rootdir/init.rc b/rootdir/init.rc
|
||||||
|
index a9af0b094..b136f1059 100644
|
||||||
|
--- a/rootdir/init.rc
|
||||||
|
+++ b/rootdir/init.rc
|
||||||
|
@@ -11,6 +11,11 @@ import /vendor/etc/init/hw/init.${ro.hardware}.rc
|
||||||
|
import /system/etc/init/hw/init.usb.configfs.rc
|
||||||
|
import /system/etc/init/hw/init.${ro.zygote}.rc
|
||||||
|
|
||||||
|
+service gsicharger /bin/charger
|
||||||
|
+ class gsicharger
|
||||||
|
+ user system
|
||||||
|
+ group system shell input graphics wakelock
|
||||||
|
+
|
||||||
|
# Cgroups are mounted right before early-init using list from /etc/cgroups.json
|
||||||
|
on early-init
|
||||||
|
# Disable sysrq from keyboard
|
||||||
|
@@ -399,7 +404,7 @@ on init
|
||||||
|
# Healthd can trigger a full boot from charger mode by signaling this
|
||||||
|
# property when the power button is held.
|
||||||
|
on property:sys.boot_from_charger_mode=1
|
||||||
|
- class_stop charger
|
||||||
|
+ class_stop gsicharger
|
||||||
|
trigger late-init
|
||||||
|
|
||||||
|
on load_persist_props_action
|
||||||
|
@@ -945,8 +950,12 @@ on nonencrypted
|
||||||
|
on property:sys.init_log_level=*
|
||||||
|
loglevel ${sys.init_log_level}
|
||||||
|
|
||||||
|
+on charger && property:ro.hardware=mt*
|
||||||
|
+ write /sys/class/leds/lcd-backlight/trigger "backlight"
|
||||||
|
+ write /sys/class/android_usb/android0/enable 1
|
||||||
|
+
|
||||||
|
on charger
|
||||||
|
- class_start charger
|
||||||
|
+ class_start gsicharger
|
||||||
|
|
||||||
|
on property:vold.decrypt=trigger_load_persist_props
|
||||||
|
load_persist_props
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,24 @@
|
|||||||
|
From 4f035a6b34ee9f42774998de1c5008f6bce30a18 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 8 Aug 2021 01:43:40 +0000
|
||||||
|
Subject: [PATCH] Revert "system_suspend: start early"
|
||||||
|
|
||||||
|
This reverts commit cb732f9b635b5f6f79e447ddaf743ebb800b8535.
|
||||||
|
---
|
||||||
|
suspend/1.0/default/android.system.suspend@1.0-service.rc | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/suspend/1.0/default/android.system.suspend@1.0-service.rc b/suspend/1.0/default/android.system.suspend@1.0-service.rc
|
||||||
|
index 965ca16..c5d3869 100644
|
||||||
|
--- a/suspend/1.0/default/android.system.suspend@1.0-service.rc
|
||||||
|
+++ b/suspend/1.0/default/android.system.suspend@1.0-service.rc
|
||||||
|
@@ -1,5 +1,5 @@
|
||||||
|
service system_suspend /system/bin/hw/android.system.suspend@1.0-service
|
||||||
|
- class early_hal
|
||||||
|
+ class hal
|
||||||
|
user system
|
||||||
|
group system wakelock
|
||||||
|
capabilities BLOCK_SUSPEND
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,42 @@
|
|||||||
|
From f12f94ae51ec13744bd2f93585ce744128ee192f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Mon, 5 Oct 2020 01:29:18 +0000
|
||||||
|
Subject: [PATCH] Revert "sepolicy: Relabel wifi. properties as wifi_prop"
|
||||||
|
|
||||||
|
This reverts commit bf52f194873840546c996c232eb44c8427ddcd5c.
|
||||||
|
|
||||||
|
Change-Id: I0446540331684eb57f7e17bcc3273d6247915854
|
||||||
|
---
|
||||||
|
private/property_contexts | 1 -
|
||||||
|
private/system_server.te | 3 ---
|
||||||
|
2 files changed, 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/private/property_contexts b/private/property_contexts
|
||||||
|
index a4fab1f22..cf0a2dee5 100644
|
||||||
|
--- a/private/property_contexts
|
||||||
|
+++ b/private/property_contexts
|
||||||
|
@@ -171,7 +171,6 @@ dalvik. u:object_r:dalvik_prop:s0
|
||||||
|
ro.dalvik. u:object_r:dalvik_prop:s0
|
||||||
|
|
||||||
|
# Shared between system server and wificond
|
||||||
|
-wifi. u:object_r:wifi_prop:s0
|
||||||
|
wlan. u:object_r:wifi_prop:s0
|
||||||
|
|
||||||
|
# Lowpan properties
|
||||||
|
diff --git a/private/system_server.te b/private/system_server.te
|
||||||
|
index 3c1d192d7..b63b47d3d 100644
|
||||||
|
--- a/private/system_server.te
|
||||||
|
+++ b/private/system_server.te
|
||||||
|
@@ -676,9 +676,6 @@ get_prop(system_server, mock_ota_prop)
|
||||||
|
# Read the property as feature flag for protecting apks with fs-verity.
|
||||||
|
get_prop(system_server, apk_verity_prop)
|
||||||
|
|
||||||
|
-# Read wifi.interface
|
||||||
|
-get_prop(system_server, wifi_prop)
|
||||||
|
-
|
||||||
|
# Read the vendor property that indicates if Incremental features is enabled
|
||||||
|
get_prop(system_server, incremental_prop)
|
||||||
|
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,45 @@
|
|||||||
|
From f0b8b09faba7f40bfe376a7c6d3a0f81e7d587c4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: AndyCGYan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 3 Mar 2019 14:07:33 +0800
|
||||||
|
Subject: [PATCH] build_soong: Disable generated_kernel_headers
|
||||||
|
|
||||||
|
...but done in a way so that there's no need to remove generated_kernel_headers from individual projects - thanks @ExpressLuke
|
||||||
|
|
||||||
|
Change-Id: I630857cec208f1830e776bf5031d7bb9bc4435d0
|
||||||
|
---
|
||||||
|
build/soong/Android.bp | 12 ------------
|
||||||
|
1 file changed, 12 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/build/soong/Android.bp b/build/soong/Android.bp
|
||||||
|
index 5076e684..2279bf44 100644
|
||||||
|
--- a/build/soong/Android.bp
|
||||||
|
+++ b/build/soong/Android.bp
|
||||||
|
@@ -20,9 +20,6 @@ bootstrap_go_package {
|
||||||
|
lineage_generator {
|
||||||
|
name: "generated_kernel_includes",
|
||||||
|
|
||||||
|
- // The headers make command
|
||||||
|
- cmd: "$(PATH_OVERRIDE_SOONG) $(KERNEL_MAKE_CMD) $(KERNEL_MAKE_FLAGS) -C $(TARGET_KERNEL_SOURCE) O=$(KERNEL_BUILD_OUT_PREFIX)$(genDir) ARCH=$(KERNEL_ARCH) $(KERNEL_CROSS_COMPILE) headers_install",
|
||||||
|
-
|
||||||
|
// Directories that can be imported by a cc_* module generated_headers property
|
||||||
|
export_include_dirs: [
|
||||||
|
"usr/audio/include/uapi",
|
||||||
|
@@ -30,15 +27,6 @@ lineage_generator {
|
||||||
|
"usr/include/audio/include/uapi",
|
||||||
|
"usr/techpack/audio/include",
|
||||||
|
],
|
||||||
|
-
|
||||||
|
- // Sources for dependency tracking
|
||||||
|
- dep_root: "$(TARGET_KERNEL_SOURCE)",
|
||||||
|
- dep_files: [
|
||||||
|
- "Makefile",
|
||||||
|
- "include/**/*",
|
||||||
|
- "arch/$(KERNEL_ARCH)/include/**/*",
|
||||||
|
- "techpack/audio/include/**/*",
|
||||||
|
- ],
|
||||||
|
}
|
||||||
|
|
||||||
|
cc_library_headers {
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,23 @@
|
|||||||
|
From 79bc0294a742981eff0905118921e035241878dc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 8 Aug 2021 09:31:01 +0000
|
||||||
|
Subject: [PATCH 1/3] Revert "treble: Set BOARD_EXT4_SHARE_DUP_BLOCKS
|
||||||
|
explicitly"
|
||||||
|
|
||||||
|
This reverts commit d7b179f234d76c3acf7a723fc05f07efe9adc84c.
|
||||||
|
---
|
||||||
|
board-base.mk | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/board-base.mk b/board-base.mk
|
||||||
|
index e270068..0da1061 100644
|
||||||
|
--- a/board-base.mk
|
||||||
|
+++ b/board-base.mk
|
||||||
|
@@ -4,4 +4,3 @@ TARGET_EXFAT_DRIVER := exfat
|
||||||
|
DEVICE_FRAMEWORK_MANIFEST_FILE := device/phh/treble/framework_manifest.xml
|
||||||
|
|
||||||
|
BOARD_ROOT_EXTRA_FOLDERS += bt_firmware sec_storage efs
|
||||||
|
-BOARD_EXT4_SHARE_DUP_BLOCKS := true
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,430 @@
|
|||||||
|
From ec91b5cae6341702dc39bf6e579a4fd791af87c0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Tue, 22 Jun 2021 13:38:31 +0000
|
||||||
|
Subject: [PATCH 2/3] Add Meizu 18 vibrator support
|
||||||
|
|
||||||
|
Thanks to:
|
||||||
|
- @phhusson for guidance
|
||||||
|
- Google for marlin HAL as reference in implementing 1.0
|
||||||
|
- @xingrz for Meizu 16th HAL as reference in implementing 1.3
|
||||||
|
|
||||||
|
Change-Id: Iecf12cd814e8773abfd78a19f98e31125a73761a
|
||||||
|
---
|
||||||
|
base.mk | 3 +
|
||||||
|
framework_manifest.xml | 10 ++
|
||||||
|
hal/meizu-vibrator/Android.bp | 31 ++++
|
||||||
|
hal/meizu-vibrator/Vibrator.cpp | 140 ++++++++++++++++++
|
||||||
|
hal/meizu-vibrator/Vibrator.h | 60 ++++++++
|
||||||
|
...oid.hardware.vibrator@1.3-service.meizu.rc | 4 +
|
||||||
|
hal/meizu-vibrator/service.cpp | 72 +++++++++
|
||||||
|
sepolicy/file_contexts | 1 +
|
||||||
|
sepolicy/hal.te | 11 ++
|
||||||
|
9 files changed, 332 insertions(+)
|
||||||
|
create mode 100644 hal/meizu-vibrator/Android.bp
|
||||||
|
create mode 100644 hal/meizu-vibrator/Vibrator.cpp
|
||||||
|
create mode 100644 hal/meizu-vibrator/Vibrator.h
|
||||||
|
create mode 100644 hal/meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.rc
|
||||||
|
create mode 100644 hal/meizu-vibrator/service.cpp
|
||||||
|
|
||||||
|
diff --git a/base.mk b/base.mk
|
||||||
|
index 878aaae..1755f9e 100644
|
||||||
|
--- a/base.mk
|
||||||
|
+++ b/base.mk
|
||||||
|
@@ -203,3 +203,6 @@ PRODUCT_SYSTEM_DEFAULT_PROPERTIES += \
|
||||||
|
# AOSP overlays
|
||||||
|
PRODUCT_PACKAGES += \
|
||||||
|
NavigationBarMode2ButtonOverlay
|
||||||
|
+
|
||||||
|
+PRODUCT_PACKAGES += \
|
||||||
|
+ android.hardware.vibrator@1.3-service.meizu
|
||||||
|
diff --git a/framework_manifest.xml b/framework_manifest.xml
|
||||||
|
index cb37b49..1b45b4a 100644
|
||||||
|
--- a/framework_manifest.xml
|
||||||
|
+++ b/framework_manifest.xml
|
||||||
|
@@ -19,5 +19,15 @@
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
+
|
||||||
|
+ <hal>
|
||||||
|
+ <name>android.hardware.vibrator</name>
|
||||||
|
+ <transport>hwbinder</transport>
|
||||||
|
+ <version>1.3</version>
|
||||||
|
+ <interface>
|
||||||
|
+ <name>IVibrator</name>
|
||||||
|
+ <instance>default</instance>
|
||||||
|
+ </interface>
|
||||||
|
+ </hal>
|
||||||
|
</manifest>
|
||||||
|
|
||||||
|
diff --git a/hal/meizu-vibrator/Android.bp b/hal/meizu-vibrator/Android.bp
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..4e3c1b9
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/hal/meizu-vibrator/Android.bp
|
||||||
|
@@ -0,0 +1,31 @@
|
||||||
|
+//
|
||||||
|
+// Copyright (C) 2017 The Android Open Source Project
|
||||||
|
+//
|
||||||
|
+// Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
+// you may not use this file except in compliance with the License.
|
||||||
|
+// You may obtain a copy of the License at
|
||||||
|
+//
|
||||||
|
+// http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
+//
|
||||||
|
+// Unless required by applicable law or agreed to in writing, software
|
||||||
|
+// distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
+// See the License for the specific language governing permissions and
|
||||||
|
+// limitations under the License.
|
||||||
|
+cc_binary {
|
||||||
|
+ name: "android.hardware.vibrator@1.3-service.meizu",
|
||||||
|
+ relative_install_path: "hw",
|
||||||
|
+ init_rc: ["android.hardware.vibrator@1.3-service.meizu.rc"],
|
||||||
|
+ srcs: ["service.cpp", "Vibrator.cpp"],
|
||||||
|
+ cflags: ["-Wall", "-Werror"],
|
||||||
|
+ shared_libs: [
|
||||||
|
+ "libhidlbase",
|
||||||
|
+ "liblog",
|
||||||
|
+ "libutils",
|
||||||
|
+ "libhardware",
|
||||||
|
+ "android.hardware.vibrator@1.0",
|
||||||
|
+ "android.hardware.vibrator@1.1",
|
||||||
|
+ "android.hardware.vibrator@1.2",
|
||||||
|
+ "android.hardware.vibrator@1.3",
|
||||||
|
+ ],
|
||||||
|
+}
|
||||||
|
diff --git a/hal/meizu-vibrator/Vibrator.cpp b/hal/meizu-vibrator/Vibrator.cpp
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..8f12987
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/hal/meizu-vibrator/Vibrator.cpp
|
||||||
|
@@ -0,0 +1,140 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2017 The Android Open Source Project
|
||||||
|
+ *
|
||||||
|
+ * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
+ * you may not use this file except in compliance with the License.
|
||||||
|
+ * You may obtain a copy of the License at
|
||||||
|
+ *
|
||||||
|
+ * http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
+ *
|
||||||
|
+ * Unless required by applicable law or agreed to in writing, software
|
||||||
|
+ * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
+ * See the License for the specific language governing permissions and
|
||||||
|
+ * limitations under the License.
|
||||||
|
+ */
|
||||||
|
+
|
||||||
|
+#define LOG_TAG "VibratorService"
|
||||||
|
+
|
||||||
|
+#include <log/log.h>
|
||||||
|
+
|
||||||
|
+#include <hardware/hardware.h>
|
||||||
|
+#include <hardware/vibrator.h>
|
||||||
|
+
|
||||||
|
+#include "Vibrator.h"
|
||||||
|
+
|
||||||
|
+#include <cinttypes>
|
||||||
|
+#include <cmath>
|
||||||
|
+#include <iostream>
|
||||||
|
+#include <fstream>
|
||||||
|
+#include <thread>
|
||||||
|
+#include <unistd.h>
|
||||||
|
+
|
||||||
|
+namespace android {
|
||||||
|
+namespace hardware {
|
||||||
|
+namespace vibrator {
|
||||||
|
+namespace V1_3 {
|
||||||
|
+namespace implementation {
|
||||||
|
+
|
||||||
|
+Vibrator::Vibrator(std::ofstream&& timeoutAndAmplitude, std::ofstream&& waveNumber, std::ofstream&& effectTrigger) :
|
||||||
|
+ mTimeoutAndAmplitude(std::move(timeoutAndAmplitude)),
|
||||||
|
+ mWaveNumber(std::move(waveNumber)),
|
||||||
|
+ mEffectTrigger(std::move(effectTrigger)) {}
|
||||||
|
+
|
||||||
|
+Return<Status> Vibrator::on(uint32_t timeout_ms) {
|
||||||
|
+ // Wave number 12 for vibrations slightly stronger than stock (13)
|
||||||
|
+ mWaveNumber << 12 << std::endl;
|
||||||
|
+ mTimeoutAndAmplitude << timeout_ms << std::endl;
|
||||||
|
+ if (!mTimeoutAndAmplitude) {
|
||||||
|
+ ALOGE("Failed to turn vibrator on (%d): %s", errno, strerror(errno));
|
||||||
|
+ return Status::UNKNOWN_ERROR;
|
||||||
|
+ }
|
||||||
|
+ return Status::OK;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+Return<Status> Vibrator::off() {
|
||||||
|
+ mTimeoutAndAmplitude << 0 << std::endl;
|
||||||
|
+ if (!mTimeoutAndAmplitude) {
|
||||||
|
+ ALOGE("Failed to turn vibrator off (%d): %s", errno, strerror(errno));
|
||||||
|
+ return Status::UNKNOWN_ERROR;
|
||||||
|
+ }
|
||||||
|
+ return Status::OK;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+Return<bool> Vibrator::supportsAmplitudeControl() {
|
||||||
|
+ return false;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+Return<Status> Vibrator::setAmplitude(uint8_t) {
|
||||||
|
+ return Status::UNSUPPORTED_OPERATION;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+Return<void> Vibrator::perform(V1_0::Effect effect, EffectStrength strength, perform_cb _hidl_cb) {
|
||||||
|
+ return perform<decltype(effect)>(effect, strength, _hidl_cb);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+Return<void> Vibrator::perform_1_1(V1_1::Effect_1_1 effect, EffectStrength strength, perform_cb _hidl_cb) {
|
||||||
|
+ return perform<decltype(effect)>(effect, strength, _hidl_cb);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+Return<void> Vibrator::perform_1_2(V1_2::Effect effect, EffectStrength strength, perform_cb _hidl_cb) {
|
||||||
|
+ return perform<decltype(effect)>(effect, strength, _hidl_cb);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+Return<void> Vibrator::perform_1_3(Effect effect, EffectStrength strength, perform_cb _hidl_cb) {
|
||||||
|
+ return perform<decltype(effect)>(effect, strength, _hidl_cb);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+Return<bool> Vibrator::supportsExternalControl() {
|
||||||
|
+ return false;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+Return<Status> Vibrator::setExternalControl(bool) {
|
||||||
|
+ return Status::UNSUPPORTED_OPERATION;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+Return<void> Vibrator::perform(Effect effect, EffectStrength, perform_cb _hidl_cb) {
|
||||||
|
+ uint32_t id;
|
||||||
|
+ switch (effect) {
|
||||||
|
+ case Effect::CLICK:
|
||||||
|
+ id = 31008;
|
||||||
|
+ break;
|
||||||
|
+ case Effect::DOUBLE_CLICK:
|
||||||
|
+ id = 31003;
|
||||||
|
+ break;
|
||||||
|
+ case Effect::TICK:
|
||||||
|
+ case Effect::TEXTURE_TICK:
|
||||||
|
+ id = 21000;
|
||||||
|
+ break;
|
||||||
|
+ case Effect::THUD:
|
||||||
|
+ id = 30900;
|
||||||
|
+ break;
|
||||||
|
+ case Effect::POP:
|
||||||
|
+ id = 22520;
|
||||||
|
+ break;
|
||||||
|
+ case Effect::HEAVY_CLICK:
|
||||||
|
+ id = 30900;
|
||||||
|
+ break;
|
||||||
|
+ default:
|
||||||
|
+ _hidl_cb(Status::UNSUPPORTED_OPERATION, 0);
|
||||||
|
+ return Void();
|
||||||
|
+ }
|
||||||
|
+ mEffectTrigger << id << std::endl;
|
||||||
|
+ _hidl_cb(Status::OK, 200);
|
||||||
|
+ return Void();
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+template <typename T> Return<void> Vibrator::perform(T effect, EffectStrength strength, perform_cb _hidl_cb) {
|
||||||
|
+ auto validRange = hidl_enum_range<T>();
|
||||||
|
+ if (effect < *validRange.begin() || effect > *std::prev(validRange.end())) {
|
||||||
|
+ _hidl_cb(Status::UNSUPPORTED_OPERATION, 0);
|
||||||
|
+ return Void();
|
||||||
|
+ }
|
||||||
|
+ return perform(static_cast<Effect>(effect), strength, _hidl_cb);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+} // namespace implementation
|
||||||
|
+} // namespace V1_3
|
||||||
|
+} // namespace vibrator
|
||||||
|
+} // namespace hardware
|
||||||
|
+} // namespace android
|
||||||
|
diff --git a/hal/meizu-vibrator/Vibrator.h b/hal/meizu-vibrator/Vibrator.h
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..df901aa
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/hal/meizu-vibrator/Vibrator.h
|
||||||
|
@@ -0,0 +1,60 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2017 The Android Open Source Project
|
||||||
|
+ *
|
||||||
|
+ * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
+ * you may not use this file except in compliance with the License.
|
||||||
|
+ * You may obtain a copy of the License at
|
||||||
|
+ *
|
||||||
|
+ * http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
+ *
|
||||||
|
+ * Unless required by applicable law or agreed to in writing, software
|
||||||
|
+ * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
+ * See the License for the specific language governing permissions and
|
||||||
|
+ * limitations under the License.
|
||||||
|
+ */
|
||||||
|
+#ifndef ANDROID_HARDWARE_VIBRATOR_V1_3_VIBRATOR_H
|
||||||
|
+#define ANDROID_HARDWARE_VIBRATOR_V1_3_VIBRATOR_H
|
||||||
|
+
|
||||||
|
+#include <android/hardware/vibrator/1.3/IVibrator.h>
|
||||||
|
+#include <hidl/Status.h>
|
||||||
|
+
|
||||||
|
+#include <fstream>
|
||||||
|
+
|
||||||
|
+namespace android {
|
||||||
|
+namespace hardware {
|
||||||
|
+namespace vibrator {
|
||||||
|
+namespace V1_3 {
|
||||||
|
+namespace implementation {
|
||||||
|
+
|
||||||
|
+using android::hardware::vibrator::V1_0::EffectStrength;
|
||||||
|
+using android::hardware::vibrator::V1_0::Status;
|
||||||
|
+
|
||||||
|
+class Vibrator : public IVibrator {
|
||||||
|
+public:
|
||||||
|
+ Vibrator(std::ofstream&& timeoutAndAmplitude, std::ofstream&& waveNumber, std::ofstream&& effectTrigger);
|
||||||
|
+ Return<Status> on(uint32_t timeoutMs) override;
|
||||||
|
+ Return<Status> off() override;
|
||||||
|
+ Return<bool> supportsAmplitudeControl() override;
|
||||||
|
+ Return<Status> setAmplitude(uint8_t amplitude) override;
|
||||||
|
+ Return<void> perform(V1_0::Effect effect, EffectStrength strength, perform_cb _hidl_cb) override;
|
||||||
|
+ Return<void> perform_1_1(V1_1::Effect_1_1 effect, EffectStrength strength, perform_cb _hidl_cb) override;
|
||||||
|
+ Return<void> perform_1_2(V1_2::Effect effect, EffectStrength strength, perform_cb _hidl_cb) override;
|
||||||
|
+ Return<void> perform_1_3(Effect effect, EffectStrength strength, perform_cb _hidl_cb) override;
|
||||||
|
+ Return<bool> supportsExternalControl() override;
|
||||||
|
+ Return<Status> setExternalControl(bool enabled) override;
|
||||||
|
+
|
||||||
|
+private:
|
||||||
|
+ Return<void> perform(Effect effect, EffectStrength strength, perform_cb _hidl_cb);
|
||||||
|
+ template <typename T> Return<void> perform(T effect, EffectStrength strength, perform_cb _hidl_cb);
|
||||||
|
+ std::ofstream mTimeoutAndAmplitude;
|
||||||
|
+ std::ofstream mWaveNumber;
|
||||||
|
+ std::ofstream mEffectTrigger;
|
||||||
|
+};
|
||||||
|
+} // namespace implementation
|
||||||
|
+} // namespace V1_3
|
||||||
|
+} // namespace vibrator
|
||||||
|
+} // namespace hardware
|
||||||
|
+} // namespace android
|
||||||
|
+
|
||||||
|
+#endif // ANDROID_HARDWARE_VIBRATOR_V1_3_VIBRATOR_H
|
||||||
|
diff --git a/hal/meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.rc b/hal/meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.rc
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..ddf39c4
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/hal/meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.rc
|
||||||
|
@@ -0,0 +1,4 @@
|
||||||
|
+service vibrator.meizu /system/bin/hw/android.hardware.vibrator@1.3-service.meizu
|
||||||
|
+ class late_start
|
||||||
|
+ user system
|
||||||
|
+ group system
|
||||||
|
diff --git a/hal/meizu-vibrator/service.cpp b/hal/meizu-vibrator/service.cpp
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..1405dfb
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/hal/meizu-vibrator/service.cpp
|
||||||
|
@@ -0,0 +1,72 @@
|
||||||
|
+/*
|
||||||
|
+ * Copyright (C) 2017 The Android Open Source Project
|
||||||
|
+ *
|
||||||
|
+ * Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
+ * you may not use this file except in compliance with the License.
|
||||||
|
+ * You may obtain a copy of the License at
|
||||||
|
+ *
|
||||||
|
+ * http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
+ *
|
||||||
|
+ * Unless required by applicable law or agreed to in writing, software
|
||||||
|
+ * distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
+ * See the License for the specific language governing permissions and
|
||||||
|
+ * limitations under the License.
|
||||||
|
+ */
|
||||||
|
+#define LOG_TAG "android.hardware.vibrator@1.3-service.meizu"
|
||||||
|
+
|
||||||
|
+#include <android/hardware/vibrator/1.3/IVibrator.h>
|
||||||
|
+#include <hidl/HidlSupport.h>
|
||||||
|
+#include <hidl/HidlTransportSupport.h>
|
||||||
|
+#include <utils/Errors.h>
|
||||||
|
+#include <utils/StrongPointer.h>
|
||||||
|
+
|
||||||
|
+#include "Vibrator.h"
|
||||||
|
+
|
||||||
|
+using android::hardware::configureRpcThreadpool;
|
||||||
|
+using android::hardware::joinRpcThreadpool;
|
||||||
|
+using android::hardware::vibrator::V1_3::IVibrator;
|
||||||
|
+using android::hardware::vibrator::V1_3::implementation::Vibrator;
|
||||||
|
+using namespace android;
|
||||||
|
+
|
||||||
|
+static const char *CONTROL_PATH_TIMEOUT = "/sys/class/timed_output/vibrator/enable";
|
||||||
|
+static const char *PATH_WAVE_NUMBER = "/sys/class/meizu/motor/waveform";
|
||||||
|
+static const char *CONTROL_PATH_EFFECT = "/sys/class/meizu/motor/on_off";
|
||||||
|
+
|
||||||
|
+status_t registerVibratorService() {
|
||||||
|
+ std::ofstream timeoutAndAmplitude{CONTROL_PATH_TIMEOUT};
|
||||||
|
+ if (!timeoutAndAmplitude) {
|
||||||
|
+ int error = errno;
|
||||||
|
+ ALOGE("Failed to open %s (%d): %s", CONTROL_PATH_TIMEOUT, error, strerror(error));
|
||||||
|
+ return -error;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ std::ofstream waveNumber{PATH_WAVE_NUMBER};
|
||||||
|
+ if (!waveNumber) {
|
||||||
|
+ int error = errno;
|
||||||
|
+ ALOGE("Failed to open %s (%d): %s", PATH_WAVE_NUMBER, error, strerror(error));
|
||||||
|
+ return -error;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ std::ofstream effectTrigger{CONTROL_PATH_EFFECT};
|
||||||
|
+ if (!effectTrigger) {
|
||||||
|
+ int error = errno;
|
||||||
|
+ ALOGE("Failed to open %s (%d): %s", CONTROL_PATH_EFFECT, error, strerror(error));
|
||||||
|
+ return -error;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ sp<IVibrator> vibrator = new Vibrator(std::move(timeoutAndAmplitude), std::move(waveNumber), std::move(effectTrigger));
|
||||||
|
+ (void) vibrator->registerAsService(); // suppress unused-result warning
|
||||||
|
+ return OK;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int main() {
|
||||||
|
+ configureRpcThreadpool(1, true);
|
||||||
|
+ status_t status = registerVibratorService();
|
||||||
|
+
|
||||||
|
+ if (status != OK) {
|
||||||
|
+ return status;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ joinRpcThreadpool();
|
||||||
|
+}
|
||||||
|
diff --git a/sepolicy/file_contexts b/sepolicy/file_contexts
|
||||||
|
index 7ab5e91..2b59077 100644
|
||||||
|
--- a/sepolicy/file_contexts
|
||||||
|
+++ b/sepolicy/file_contexts
|
||||||
|
@@ -12,6 +12,7 @@
|
||||||
|
/dev/dsm u:object_r:dmd_device:s0
|
||||||
|
|
||||||
|
/system/bin/hw/android.hardware.biometrics.fingerprint@2.1-service.oppo.compat u:object_r:hal_fingerprint_oppo_compat_exec:s0
|
||||||
|
+/system/bin/hw/android.hardware.vibrator@1.3-service.meizu u:object_r:hal_vibrator_default_exec:s0
|
||||||
|
|
||||||
|
/efs u:object_r:efs_file:s0
|
||||||
|
|
||||||
|
diff --git a/sepolicy/hal.te b/sepolicy/hal.te
|
||||||
|
index cb44422..280ae2d 100644
|
||||||
|
--- a/sepolicy/hal.te
|
||||||
|
+++ b/sepolicy/hal.te
|
||||||
|
@@ -8,3 +8,14 @@ init_daemon_domain(hal_fingerprint_oppo_compat)
|
||||||
|
|
||||||
|
type hal_fingerprint_oppo, domain;
|
||||||
|
allow hal_fingerprint_oppo vendor_default_prop:property_service { set };
|
||||||
|
+
|
||||||
|
+type vib_strength_sysfs, fs_type, sysfs_type;
|
||||||
|
+
|
||||||
|
+type hal_vibrator_default, domain;
|
||||||
|
+hal_server_domain(hal_vibrator_default, hal_vibrator)
|
||||||
|
+
|
||||||
|
+type hal_vibrator_default_exec, exec_type, vendor_file_type, file_type;
|
||||||
|
+init_daemon_domain(hal_vibrator_default)
|
||||||
|
+
|
||||||
|
+allow hal_vibrator_default vib_strength_sysfs:dir rw_dir_perms;
|
||||||
|
+allow hal_vibrator_default vib_strength_sysfs:file rw_file_perms;
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,115 @@
|
|||||||
|
From 271f7db60868e2e96fbe5be09b81b943d8fbc91d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
|
||||||
|
Date: Sun, 27 Jun 2021 05:21:38 +0000
|
||||||
|
Subject: [PATCH 3/3] Only use meizu-vibrator on Meizu 18
|
||||||
|
|
||||||
|
- Convert manifest to VINTF fragment
|
||||||
|
- If not the target device, bind to dummy manifest on boot
|
||||||
|
|
||||||
|
Change-Id: I97fc52a98a77aa72bbd5601f36abc0cf18efbaea
|
||||||
|
---
|
||||||
|
framework_manifest.xml | 10 ----------
|
||||||
|
hal/meizu-vibrator/Android.bp | 1 +
|
||||||
|
.../android.hardware.vibrator@1.3-service.meizu.xml | 11 +++++++++++
|
||||||
|
hal/meizu-vibrator/manifest_dummy.xml | 3 +++
|
||||||
|
rw-system.sh | 10 ++++++++--
|
||||||
|
5 files changed, 23 insertions(+), 12 deletions(-)
|
||||||
|
create mode 100644 hal/meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.xml
|
||||||
|
create mode 100644 hal/meizu-vibrator/manifest_dummy.xml
|
||||||
|
|
||||||
|
diff --git a/framework_manifest.xml b/framework_manifest.xml
|
||||||
|
index 1b45b4a..cb37b49 100644
|
||||||
|
--- a/framework_manifest.xml
|
||||||
|
+++ b/framework_manifest.xml
|
||||||
|
@@ -19,15 +19,5 @@
|
||||||
|
<instance>default</instance>
|
||||||
|
</interface>
|
||||||
|
</hal>
|
||||||
|
-
|
||||||
|
- <hal>
|
||||||
|
- <name>android.hardware.vibrator</name>
|
||||||
|
- <transport>hwbinder</transport>
|
||||||
|
- <version>1.3</version>
|
||||||
|
- <interface>
|
||||||
|
- <name>IVibrator</name>
|
||||||
|
- <instance>default</instance>
|
||||||
|
- </interface>
|
||||||
|
- </hal>
|
||||||
|
</manifest>
|
||||||
|
|
||||||
|
diff --git a/hal/meizu-vibrator/Android.bp b/hal/meizu-vibrator/Android.bp
|
||||||
|
index 4e3c1b9..276728c 100644
|
||||||
|
--- a/hal/meizu-vibrator/Android.bp
|
||||||
|
+++ b/hal/meizu-vibrator/Android.bp
|
||||||
|
@@ -15,6 +15,7 @@
|
||||||
|
cc_binary {
|
||||||
|
name: "android.hardware.vibrator@1.3-service.meizu",
|
||||||
|
relative_install_path: "hw",
|
||||||
|
+ vintf_fragments: ["android.hardware.vibrator@1.3-service.meizu.xml", "manifest_dummy.xml"],
|
||||||
|
init_rc: ["android.hardware.vibrator@1.3-service.meizu.rc"],
|
||||||
|
srcs: ["service.cpp", "Vibrator.cpp"],
|
||||||
|
cflags: ["-Wall", "-Werror"],
|
||||||
|
diff --git a/hal/meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.xml b/hal/meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..d1b836e
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/hal/meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.xml
|
||||||
|
@@ -0,0 +1,11 @@
|
||||||
|
+<manifest version="1.0" type="framework">
|
||||||
|
+ <hal format="hidl">
|
||||||
|
+ <name>android.hardware.vibrator</name>
|
||||||
|
+ <transport>hwbinder</transport>
|
||||||
|
+ <version>1.3</version>
|
||||||
|
+ <interface>
|
||||||
|
+ <name>IVibrator</name>
|
||||||
|
+ <instance>default</instance>
|
||||||
|
+ </interface>
|
||||||
|
+ </hal>
|
||||||
|
+</manifest>
|
||||||
|
diff --git a/hal/meizu-vibrator/manifest_dummy.xml b/hal/meizu-vibrator/manifest_dummy.xml
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..b34a10b
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/hal/meizu-vibrator/manifest_dummy.xml
|
||||||
|
@@ -0,0 +1,3 @@
|
||||||
|
+<!-- Dummy manifest XML -->
|
||||||
|
+<manifest version="1.0" type="framework">
|
||||||
|
+</manifest>
|
||||||
|
diff --git a/rw-system.sh b/rw-system.sh
|
||||||
|
index 38271b4..dcb007e 100644
|
||||||
|
--- a/rw-system.sh
|
||||||
|
+++ b/rw-system.sh
|
||||||
|
@@ -314,6 +314,12 @@ if [ "$foundFingerprint" = false ];then
|
||||||
|
mount -o bind system/phh/empty /system/etc/permissions/android.hardware.fingerprint.xml
|
||||||
|
fi
|
||||||
|
|
||||||
|
+if ! getprop ro.vendor.build.fingerprint | grep -qE 'meizu_18'; then
|
||||||
|
+ mount -o bind system/phh/empty /system/bin/hw/android.hardware.vibrator@1.3-service.meizu
|
||||||
|
+ mount -o bind system/phh/empty /system/etc/init/android.hardware.vibrator@1.3-service.meizu.rc
|
||||||
|
+ mount -o bind system/etc/vintf/manifest/manifest_dummy.xml /system/etc/vintf/manifest/android.hardware.vibrator@1.3-service.meizu.xml
|
||||||
|
+fi
|
||||||
|
+
|
||||||
|
if ! grep android.hardware.bluetooth /vendor/manifest.xml && ! grep android.hardware.bluetooth /vendor/etc/vintf/manifest.xml; then
|
||||||
|
mount -o bind system/phh/empty /system/etc/permissions/android.hardware.bluetooth.xml
|
||||||
|
mount -o bind system/phh/empty /system/etc/permissions/android.hardware.bluetooth_le.xml
|
||||||
|
@@ -385,7 +391,7 @@ if getprop ro.build.overlay.deviceid |grep -q -e CPH1859 -e CPH1861 -e RMX1811 -
|
||||||
|
setprop persist.sys.qcom-brightness "$(cat /sys/class/leds/lcd-backlight/max_brightness)"
|
||||||
|
fi
|
||||||
|
|
||||||
|
-if getprop ro.build.overlay.deviceid |grep -iq -e RMX2020 -e RMX2027 -e RMX2040 -e RMX2193 -e RMX2191;then
|
||||||
|
+if getprop ro.build.overlay.deviceid |grep -iq -e RMX2020 -e RMX2027 -e RMX2040 -e RMX2193 -e RMX2191;then
|
||||||
|
setprop persist.sys.qcom-brightness 2047
|
||||||
|
setprop persist.sys.overlay.devinputjack true
|
||||||
|
setprop persist.sys.phh.fingerprint.nocleanup true
|
||||||
|
@@ -873,7 +879,7 @@ if getprop ro.build.overlay.deviceid |grep -qiE -e '^RMX' -e '^CPH';then
|
||||||
|
setprop persist.sys.phh.fod.bbk true
|
||||||
|
fi
|
||||||
|
|
||||||
|
-if getprop ro.build.overlay.deviceid |grep -iq -e RMX1941 -e RMX1945 -e RMX1943 -e RMX1942;then
|
||||||
|
+if getprop ro.build.overlay.deviceid |grep -iq -e RMX1941 -e RMX1945 -e RMX1943 -e RMX1942;then
|
||||||
|
setprop persist.sys.qcom-brightness "$(cat /sys/class/leds/lcd-backlight/max_brightness)"
|
||||||
|
setprop persist.sys.phh.mainkeys 0
|
||||||
|
fi
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,36 @@
|
|||||||
|
From e3c7e720c893a6ecef90b4b950787ed820792581 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Thu, 12 Sep 2019 12:54:23 +0200
|
||||||
|
Subject: [PATCH 1/2] Use vndk_lite ld.config only on same-version vendor
|
||||||
|
|
||||||
|
When running Q over P lite, there is currently absolutely no chance the
|
||||||
|
device boots, because it will be using Q vndk.
|
||||||
|
Thus using ld.config.28.txt when running Q over P lite gives a little more
|
||||||
|
chance for the device to boot, than when using vndk_lite ld.config.
|
||||||
|
Also, once this patch is applied, the required effort to boot
|
||||||
|
Q over P lite is exclusively in vndk, which is manageable.
|
||||||
|
|
||||||
|
Change-Id: I55257cd7c738b1d20582e198e1d5621e1c87a03e
|
||||||
|
---
|
||||||
|
linker/linker.cpp | 5 ++++-
|
||||||
|
1 file changed, 4 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/linker/linker.cpp b/linker/linker.cpp
|
||||||
|
index f24167722..a82d7c430 100644
|
||||||
|
--- a/linker/linker.cpp
|
||||||
|
+++ b/linker/linker.cpp
|
||||||
|
@@ -3372,7 +3372,10 @@ static std::string get_ld_config_file_apex_path(const char* executable_path) {
|
||||||
|
}
|
||||||
|
|
||||||
|
static std::string get_ld_config_file_vndk_path() {
|
||||||
|
- if (android::base::GetBoolProperty("ro.vndk.lite", false)) {
|
||||||
|
+ bool same_version_system_vendor = false;
|
||||||
|
+ if(std::to_string(__ANDROID_API__) == Config::get_vndk_version_string('.'))
|
||||||
|
+ same_version_system_vendor = true;
|
||||||
|
+ if (android::base::GetBoolProperty("ro.vndk.lite", false) && same_version_system_vendor) {
|
||||||
|
return kLdConfigVndkLiteFilePath;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,39 @@
|
|||||||
|
From 709393961b2c65d2e9c50fdb5c2db3370811da5c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Mon, 26 Oct 2020 23:23:24 +0100
|
||||||
|
Subject: [PATCH 3/3] Ignore vndk lite when looking for ld.config
|
||||||
|
|
||||||
|
Change-Id: I6927ba11dcb8435fab1866985c177a1852488414
|
||||||
|
---
|
||||||
|
linker/linker.cpp | 8 --------
|
||||||
|
1 file changed, 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/linker/linker.cpp b/linker/linker.cpp
|
||||||
|
index ae2c00c21..ea504c91e 100644
|
||||||
|
--- a/linker/linker.cpp
|
||||||
|
+++ b/linker/linker.cpp
|
||||||
|
@@ -93,7 +93,6 @@ static uint64_t g_module_unload_counter = 0;
|
||||||
|
static const char* const kLdConfigArchFilePath = "/system/etc/ld.config." ABI_STRING ".txt";
|
||||||
|
|
||||||
|
static const char* const kLdConfigFilePath = "/system/etc/ld.config.txt";
|
||||||
|
-static const char* const kLdConfigVndkLiteFilePath = "/system/etc/ld.config.vndk_lite.txt";
|
||||||
|
|
||||||
|
static const char* const kLdGeneratedConfigFilePath = "/linkerconfig/ld.config.txt";
|
||||||
|
|
||||||
|
@@ -3372,13 +3371,6 @@ static std::string get_ld_config_file_apex_path(const char* executable_path) {
|
||||||
|
}
|
||||||
|
|
||||||
|
static std::string get_ld_config_file_vndk_path() {
|
||||||
|
- bool same_version_system_vendor = false;
|
||||||
|
- if(std::to_string(__ANDROID_API__) == Config::get_vndk_version_string('.'))
|
||||||
|
- same_version_system_vendor = true;
|
||||||
|
- if (android::base::GetBoolProperty("ro.vndk.lite", false) && same_version_system_vendor) {
|
||||||
|
- return kLdConfigVndkLiteFilePath;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
std::string ld_config_file_vndk = kLdConfigFilePath;
|
||||||
|
size_t insert_pos = ld_config_file_vndk.find_last_of('.');
|
||||||
|
if (insert_pos == std::string::npos) {
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,26 @@
|
|||||||
|
From a1336cadfe7ff1afa46e87ba11849ebef622183e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Thu, 12 Sep 2019 20:31:07 +0200
|
||||||
|
Subject: [PATCH] Don't reboot if we couldn't get bootctrl
|
||||||
|
|
||||||
|
Change-Id: Id1793660bd1c97ab369607f58a772ca3512ec1af
|
||||||
|
---
|
||||||
|
update_verifier/update_verifier.cpp | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/update_verifier/update_verifier.cpp b/update_verifier/update_verifier.cpp
|
||||||
|
index a042f900..ea3645af 100644
|
||||||
|
--- a/update_verifier/update_verifier.cpp
|
||||||
|
+++ b/update_verifier/update_verifier.cpp
|
||||||
|
@@ -310,7 +310,7 @@ int update_verifier(int argc, char** argv) {
|
||||||
|
sp<IBootControl> module = IBootControl::getService();
|
||||||
|
if (module == nullptr) {
|
||||||
|
LOG(ERROR) << "Error getting bootctrl module.";
|
||||||
|
- return reboot_device();
|
||||||
|
+ return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint32_t current_slot = module->getCurrentSlot();
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
From ddbe45ddd09f30beab8980d14c506f48ca1f8399 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Fri, 2 Mar 2018 22:49:55 +0100
|
||||||
|
Subject: [PATCH 01/10] Enable multipl_decls by default. This is needed because
|
||||||
|
8.0 init doesn't add -m
|
||||||
|
|
||||||
|
Change-Id: I43dc661d519f7b8576d72a828d8cbd444592bf5e
|
||||||
|
---
|
||||||
|
secilc/secilc.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/secilc/secilc.c b/secilc/secilc.c
|
||||||
|
index 186c5a73..b422175e 100644
|
||||||
|
--- a/secilc/secilc.c
|
||||||
|
+++ b/secilc/secilc.c
|
||||||
|
@@ -91,7 +91,7 @@ int main(int argc, char *argv[])
|
||||||
|
int target = SEPOL_TARGET_SELINUX;
|
||||||
|
int mls = -1;
|
||||||
|
int disable_dontaudit = 0;
|
||||||
|
- int multiple_decls = 0;
|
||||||
|
+ int multiple_decls = 1;
|
||||||
|
int disable_neverallow = 0;
|
||||||
|
int preserve_tunables = 0;
|
||||||
|
int handle_unknown = -1;
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,26 @@
|
|||||||
|
From ff296de7912209e6fa20e1b28db93c395cc0bb75 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Mon, 9 Apr 2018 00:19:49 +0200
|
||||||
|
Subject: [PATCH 02/10] Increase default log_level to get actual selinux error
|
||||||
|
in kmsg
|
||||||
|
|
||||||
|
---
|
||||||
|
secilc/secilc.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/secilc/secilc.c b/secilc/secilc.c
|
||||||
|
index b422175e..1e550ab4 100644
|
||||||
|
--- a/secilc/secilc.c
|
||||||
|
+++ b/secilc/secilc.c
|
||||||
|
@@ -103,7 +103,7 @@ int main(int argc, char *argv[])
|
||||||
|
int opt_index = 0;
|
||||||
|
char *fc_buf = NULL;
|
||||||
|
size_t fc_size;
|
||||||
|
- enum cil_log_level log_level = CIL_ERR;
|
||||||
|
+ enum cil_log_level log_level = CIL_WARN;
|
||||||
|
static struct option long_opts[] = {
|
||||||
|
{"help", no_argument, 0, 'h'},
|
||||||
|
{"verbose", no_argument, 0, 'v'},
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,40 @@
|
|||||||
|
From ecb4746fb8ba4e97cc53e6290dfa7a75495d19a8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Mon, 3 Dec 2018 20:54:54 +0100
|
||||||
|
Subject: [PATCH 03/10] ::Kirin:: Workaround some conflicting Kirin tether
|
||||||
|
SELinux context
|
||||||
|
|
||||||
|
Some Kirin devices declared some android.hardware.tetheroffload HALs,
|
||||||
|
but they didn't use AOSP contexts.
|
||||||
|
This leads to libselinux aborting when loading hwservice_contexts.
|
||||||
|
|
||||||
|
Workaround it the ugly way, by making them match.
|
||||||
|
This most likely kills tetheroffload for those devices.
|
||||||
|
---
|
||||||
|
libselinux/src/label_backends_android.c | 10 ++++++++++
|
||||||
|
1 file changed, 10 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/libselinux/src/label_backends_android.c b/libselinux/src/label_backends_android.c
|
||||||
|
index eaca5947..ab92985b 100644
|
||||||
|
--- a/libselinux/src/label_backends_android.c
|
||||||
|
+++ b/libselinux/src/label_backends_android.c
|
||||||
|
@@ -62,6 +62,16 @@ static int nodups_specs(struct saved_data *data)
|
||||||
|
curr_spec->property_key)) {
|
||||||
|
if (strcmp(spec_arr[jj].lr.ctx_raw,
|
||||||
|
curr_spec->lr.ctx_raw)) {
|
||||||
|
+ if(strcmp(spec_arr[jj].lr.ctx_raw, "u:object_r:hal_ipacm_hwservice:s0") == 0) {
|
||||||
|
+ free(spec_arr[jj].lr.ctx_raw);
|
||||||
|
+ spec_arr[jj].lr.ctx_raw = strdup("u:object_r:hal_tetheroffload_hwservice:s0");
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ if(strcmp(curr_spec->lr.ctx_raw, "u:object_r:hal_ipacm_hwservice:s0") == 0) {
|
||||||
|
+ free(curr_spec->lr.ctx_raw);
|
||||||
|
+ curr_spec->lr.ctx_raw = strdup("u:object_r:hal_tetheroffload_hwservice:s0");
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
rc = -1;
|
||||||
|
errno = EINVAL;
|
||||||
|
selinux_log
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,43 @@
|
|||||||
|
From f014cf6460159f820fc0d72c6d0bece2851f9873 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Fri, 6 Sep 2019 15:07:25 +0200
|
||||||
|
Subject: [PATCH 04/10] Allow /devices/virtual/block/ genfscon conflict (seen
|
||||||
|
on Xiaomi Mi 9)
|
||||||
|
|
||||||
|
Change-Id: I06e4e9d5b82d61a8aeab595b47e2589249675895
|
||||||
|
---
|
||||||
|
libsepol/cil/src/cil_post.c | 18 +++++++++++++++++-
|
||||||
|
1 file changed, 17 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/libsepol/cil/src/cil_post.c b/libsepol/cil/src/cil_post.c
|
||||||
|
index a0cadfde..68c0318e 100644
|
||||||
|
--- a/libsepol/cil/src/cil_post.c
|
||||||
|
+++ b/libsepol/cil/src/cil_post.c
|
||||||
|
@@ -477,7 +477,23 @@ int cil_post_genfscon_context_compare(const void *a, const void *b)
|
||||||
|
{
|
||||||
|
struct cil_genfscon *a_genfscon = *(struct cil_genfscon**)a;
|
||||||
|
struct cil_genfscon *b_genfscon = *(struct cil_genfscon**)b;
|
||||||
|
- return context_compare(a_genfscon->context, b_genfscon->context);
|
||||||
|
+ int rc = context_compare(a_genfscon->context, b_genfscon->context);
|
||||||
|
+ if(rc) {
|
||||||
|
+ fprintf(stderr, "hello %s\n", a_genfscon->fs_str);
|
||||||
|
+ int bypass = 0;
|
||||||
|
+ /*
|
||||||
|
+ * This conflict has been seen on Xiaomi Mi 9:
|
||||||
|
+ * - AOSP Q says (genfscon sysfs /devices/virtual/block/ (u object_r sysfs_devices_block ((s0) (s0))))
|
||||||
|
+ * - stock rom says (genfscon sysfs /devices/virtual/block/ (u object_r sysfs_ufs_target ((s0) (s0))))
|
||||||
|
+ */
|
||||||
|
+ if(strcmp(a_genfscon->path_str, "/devices/virtual/block/") == 0)
|
||||||
|
+ bypass = 1;
|
||||||
|
+ if(bypass == 1) {
|
||||||
|
+ fprintf(stderr, "Received conflicting %s vs %s but ignore\n", a_genfscon->path_str, b_genfscon->path_str);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cil_post_netifcon_context_compare(const void *a, const void *b)
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
From 37d5e860031c84803c2533d940847dc214cb2597 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Thu, 12 Sep 2019 20:34:28 +0200
|
||||||
|
Subject: [PATCH 05/10] Most horrific: Remove ramdisk's zygote init scripts
|
||||||
|
|
||||||
|
This is needed because:
|
||||||
|
- only secilc is run soon enough in /system to
|
||||||
|
remove it
|
||||||
|
- placing an init.zygote in system won't have init replace it, it's the
|
||||||
|
first that appears that wins
|
||||||
|
|
||||||
|
Change-Id: I8be31ceb9ef2124d04994d9fb08fc8012a2f819e
|
||||||
|
---
|
||||||
|
secilc/secilc.c | 7 +++++++
|
||||||
|
1 file changed, 7 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/secilc/secilc.c b/secilc/secilc.c
|
||||||
|
index 1e550ab4..375320e6 100644
|
||||||
|
--- a/secilc/secilc.c
|
||||||
|
+++ b/secilc/secilc.c
|
||||||
|
@@ -34,6 +34,8 @@
|
||||||
|
#include <getopt.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
|
||||||
|
+#include <unistd.h>
|
||||||
|
+
|
||||||
|
#ifdef ANDROID
|
||||||
|
#include <cil/cil.h>
|
||||||
|
#else
|
||||||
|
@@ -124,6 +126,11 @@ int main(int argc, char *argv[])
|
||||||
|
};
|
||||||
|
int i;
|
||||||
|
|
||||||
|
+ unlink("/init.zygote32.rc");
|
||||||
|
+ unlink("/init.zygote64_32.rc");
|
||||||
|
+ unlink("/init.zygote64.rc");
|
||||||
|
+ unlink("/init.zygote32_64.rc");
|
||||||
|
+
|
||||||
|
while (1) {
|
||||||
|
opt_char = getopt_long(argc, argv, "o:f:U:hvt:M:PDmNOc:GX:n", long_opts, &opt_index);
|
||||||
|
if (opt_char == -1) {
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,44 @@
|
|||||||
|
From 04fdf9096557accdea52b8b66665717f6c8a454a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Thu, 12 Sep 2019 20:37:04 +0200
|
||||||
|
Subject: [PATCH 06/10] if service is "rcs", accept conflict. Seen on Moto E5
|
||||||
|
|
||||||
|
Change-Id: I0cc2d0fad83f403f2b5d7458039b1564ce5ed9dd
|
||||||
|
---
|
||||||
|
libselinux/src/label_backends_android.c | 14 ++++++++++++--
|
||||||
|
1 file changed, 12 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libselinux/src/label_backends_android.c b/libselinux/src/label_backends_android.c
|
||||||
|
index ab92985b..ca16327c 100644
|
||||||
|
--- a/libselinux/src/label_backends_android.c
|
||||||
|
+++ b/libselinux/src/label_backends_android.c
|
||||||
|
@@ -72,14 +72,24 @@ static int nodups_specs(struct saved_data *data)
|
||||||
|
curr_spec->lr.ctx_raw = strdup("u:object_r:hal_tetheroffload_hwservice:s0");
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
- rc = -1;
|
||||||
|
- errno = EINVAL;
|
||||||
|
selinux_log
|
||||||
|
(SELINUX_ERROR,
|
||||||
|
"Multiple different specifications for %s (%s and %s).\n",
|
||||||
|
curr_spec->property_key,
|
||||||
|
spec_arr[jj].lr.ctx_raw,
|
||||||
|
curr_spec->lr.ctx_raw);
|
||||||
|
+ int ignore = 0;
|
||||||
|
+ /*
|
||||||
|
+ * This issue has been found on Moto E5
|
||||||
|
+ * E SELinux : Multiple different specifications for rcs (u:object_r:radio_service:s0 and u:object_r:mot_rcs_service:s0).
|
||||||
|
+ */
|
||||||
|
+ if(!strcmp(curr_spec->property_key, "rcs"))
|
||||||
|
+ ignore = 1;
|
||||||
|
+
|
||||||
|
+ if(!ignore) {
|
||||||
|
+ rc = -1;
|
||||||
|
+ errno = EINVAL;
|
||||||
|
+ }
|
||||||
|
} else {
|
||||||
|
selinux_log
|
||||||
|
(SELINUX_WARNING,
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,84 @@
|
|||||||
|
From ef94ddbd76328611893ace7870c0d3137fd26cdd Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Fri, 25 Oct 2019 13:29:20 +0200
|
||||||
|
Subject: [PATCH 07/10] Fix boot on Moto devices using unknown class
|
||||||
|
|
||||||
|
vendor sepolicy never contains new class or classorder, and are not
|
||||||
|
allowed to.
|
||||||
|
Though this is not tested, and it turns out Moto did it anyway.
|
||||||
|
This raises an issue, because class need to be ordered, and thus the cil
|
||||||
|
contains the ordering. This ordering needs to be merged.
|
||||||
|
Android 10 added new classes, so the ordering can no longer be merged,
|
||||||
|
and secilc fails on those devices, preventing boot.
|
||||||
|
|
||||||
|
Considering vendor are not supposed to declare new class (and thus
|
||||||
|
declare classorder), this fix ignores class-es/classorder in vendor
|
||||||
|
SELinux policy.
|
||||||
|
|
||||||
|
Since the vendor selinux policy has allows rules based on this context,
|
||||||
|
those allows will fail since the class doesn't exist.
|
||||||
|
Workaround this by ignoring rules with the problematic class
|
||||||
|
( keystore_moto_key )
|
||||||
|
|
||||||
|
Lucky us, this new class `keystore_moto_key` is used by Moto for
|
||||||
|
framework to framework (more accurately priv app to keymaster), since
|
||||||
|
our own framework doesn't use this class, simply ignoring it fixes the
|
||||||
|
issue.
|
||||||
|
|
||||||
|
Change-Id: I66339857634ebfdba359f12a99dfd0bff709d80b
|
||||||
|
---
|
||||||
|
libsepol/cil/src/cil_build_ast.c | 24 ++++++++++++++++++++++++
|
||||||
|
1 file changed, 24 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/libsepol/cil/src/cil_build_ast.c b/libsepol/cil/src/cil_build_ast.c
|
||||||
|
index 307b1ee3..02cdcc65 100644
|
||||||
|
--- a/libsepol/cil/src/cil_build_ast.c
|
||||||
|
+++ b/libsepol/cil/src/cil_build_ast.c
|
||||||
|
@@ -386,6 +386,14 @@ int cil_gen_class(struct cil_db *db, struct cil_tree_node *parse_current, struct
|
||||||
|
struct cil_tree_node *perms = NULL;
|
||||||
|
int rc = SEPOL_ERR;
|
||||||
|
|
||||||
|
+ {
|
||||||
|
+ const char* path = cil_tree_get_cil_path(parse_current);
|
||||||
|
+ if(strstr(path, "vendor")) {
|
||||||
|
+ cil_clear_node(ast_node);
|
||||||
|
+ return SEPOL_OK;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
rc = __cil_verify_syntax(parse_current, syntax, syntax_len);
|
||||||
|
if (rc != SEPOL_OK) {
|
||||||
|
goto exit;
|
||||||
|
@@ -452,6 +460,14 @@ int cil_gen_classorder(struct cil_db *db, struct cil_tree_node *parse_current, s
|
||||||
|
struct cil_list_item *head = NULL;
|
||||||
|
int rc = SEPOL_ERR;
|
||||||
|
|
||||||
|
+ {
|
||||||
|
+ const char* path = cil_tree_get_cil_path(parse_current);
|
||||||
|
+ if(strstr(path, "vendor")) {
|
||||||
|
+ cil_clear_node(ast_node);
|
||||||
|
+ return SEPOL_OK;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (db == NULL || parse_current == NULL || ast_node == NULL) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
@@ -2050,6 +2066,14 @@ int cil_gen_avrule(struct cil_tree_node *parse_current, struct cil_tree_node *as
|
||||||
|
rule->src_str = parse_current->next->data;
|
||||||
|
rule->tgt_str = parse_current->next->next->data;
|
||||||
|
|
||||||
|
+ {
|
||||||
|
+ const char *classname = parse_current->next->next->next->cl_head->data;
|
||||||
|
+ if(strcmp(classname, "keystore_moto_key") == 0) {
|
||||||
|
+ cil_clear_node(ast_node);
|
||||||
|
+ return SEPOL_OK;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
rc = cil_fill_classperms_list(parse_current->next->next->next, &rule->perms.classperms);
|
||||||
|
if (rc != SEPOL_OK) {
|
||||||
|
goto exit;
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
From 3d356da4654b5ae9eb2207f824555f0219687763 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Sun, 24 May 2020 17:22:22 +0200
|
||||||
|
Subject: [PATCH 08/10] Allow mismatches of exfat genfscon
|
||||||
|
|
||||||
|
---
|
||||||
|
libsepol/cil/src/cil_post.c | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/libsepol/cil/src/cil_post.c b/libsepol/cil/src/cil_post.c
|
||||||
|
index 68c0318e..75e5128c 100644
|
||||||
|
--- a/libsepol/cil/src/cil_post.c
|
||||||
|
+++ b/libsepol/cil/src/cil_post.c
|
||||||
|
@@ -488,6 +488,10 @@ int cil_post_genfscon_context_compare(const void *a, const void *b)
|
||||||
|
*/
|
||||||
|
if(strcmp(a_genfscon->path_str, "/devices/virtual/block/") == 0)
|
||||||
|
bypass = 1;
|
||||||
|
+ if(strcmp(a_genfscon->fs_str, "exfat") == 0 || strcmp(a_genfscon->fs_str, "esdfs") == 0) {
|
||||||
|
+ if(strcmp(a_genfscon->path_str, "/") == 0)
|
||||||
|
+ bypass = 1;
|
||||||
|
+ }
|
||||||
|
if(bypass == 1) {
|
||||||
|
fprintf(stderr, "Received conflicting %s vs %s but ignore\n", a_genfscon->path_str, b_genfscon->path_str);
|
||||||
|
return 0;
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,45 @@
|
|||||||
|
From f3d5e2eb212ebd4189428d6adb915880573962f9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Wed, 9 Sep 2020 22:36:42 +0200
|
||||||
|
Subject: [PATCH 09/10] Revert "libsepol: Make an unknown permission an error
|
||||||
|
in CIL"
|
||||||
|
|
||||||
|
This reverts commit dc4e54126bf25dea4d51820922ccd1959be68fbc.
|
||||||
|
|
||||||
|
This is required because some targets calls undefined permissions:
|
||||||
|
- Realme X2 Pro calls sigcont
|
||||||
|
- Honor 7X calls perf_event
|
||||||
|
---
|
||||||
|
libsepol/cil/src/cil_resolve_ast.c | 12 ++++++++----
|
||||||
|
1 file changed, 8 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libsepol/cil/src/cil_resolve_ast.c b/libsepol/cil/src/cil_resolve_ast.c
|
||||||
|
index 87575860..e72abdeb 100644
|
||||||
|
--- a/libsepol/cil/src/cil_resolve_ast.c
|
||||||
|
+++ b/libsepol/cil/src/cil_resolve_ast.c
|
||||||
|
@@ -131,14 +131,18 @@ static int __cil_resolve_perms(symtab_t *class_symtab, symtab_t *common_symtab,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (rc != SEPOL_OK) {
|
||||||
|
+ struct cil_list *empty_list;
|
||||||
|
if (class_flavor == CIL_MAP_CLASS) {
|
||||||
|
cil_log(CIL_ERR, "Failed to resolve permission %s for map class\n", (char*)curr->data);
|
||||||
|
- } else {
|
||||||
|
- cil_log(CIL_ERR, "Failed to resolve permission %s\n", (char*)curr->data);
|
||||||
|
+ goto exit;
|
||||||
|
}
|
||||||
|
- goto exit;
|
||||||
|
+ cil_log(CIL_WARN, "Failed to resolve permission %s\n", (char*)curr->data);
|
||||||
|
+ /* Use an empty list to represent unknown perm */
|
||||||
|
+ cil_list_init(&empty_list, perm_strs->flavor);
|
||||||
|
+ cil_list_append(*perm_datums, CIL_LIST, empty_list);
|
||||||
|
+ } else {
|
||||||
|
+ cil_list_append(*perm_datums, CIL_DATUM, perm_datum);
|
||||||
|
}
|
||||||
|
- cil_list_append(*perm_datums, CIL_DATUM, perm_datum);
|
||||||
|
} else {
|
||||||
|
cil_list_append(*perm_datums, curr->flavor, curr->data);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,83 @@
|
|||||||
|
From 00f7989d79ad8e219dae29de8e8f20e4dbab008a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Sun, 27 Sep 2020 20:20:35 +0200
|
||||||
|
Subject: [PATCH 10/10] [HACK] For System-as-System devices, init won't call us
|
||||||
|
with /system_ext sepolicy
|
||||||
|
|
||||||
|
So add system_ext sepolicy ourselves
|
||||||
|
---
|
||||||
|
secilc/secilc.c | 44 ++++++++++++++++++++++++++++++++++++++++++++
|
||||||
|
1 file changed, 44 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/secilc/secilc.c b/secilc/secilc.c
|
||||||
|
index 375320e6..162b87fb 100644
|
||||||
|
--- a/secilc/secilc.c
|
||||||
|
+++ b/secilc/secilc.c
|
||||||
|
@@ -233,6 +233,7 @@ int main(int argc, char *argv[])
|
||||||
|
usage(argv[0]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
if (optind >= argc) {
|
||||||
|
fprintf(stderr, "No cil files specified\n");
|
||||||
|
usage(argv[0]);
|
||||||
|
@@ -240,6 +241,11 @@ int main(int argc, char *argv[])
|
||||||
|
|
||||||
|
cil_set_log_level(log_level);
|
||||||
|
|
||||||
|
+ int needSystemExt = 1;
|
||||||
|
+ for (i = optind; i < argc; i++) {
|
||||||
|
+ if(strstr(argv[i], "system_ext")) needSystemExt = 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
cil_db_init(&db);
|
||||||
|
cil_set_disable_dontaudit(db, disable_dontaudit);
|
||||||
|
cil_set_multiple_decls(db, multiple_decls);
|
||||||
|
@@ -261,6 +267,44 @@ int main(int argc, char *argv[])
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = optind; i < argc; i++) {
|
||||||
|
+ fprintf(stderr, "Hello, parsing %s\n", argv[i]);
|
||||||
|
+ if(needSystemExt && strstr(argv[i], "/etc/selinux/")) {
|
||||||
|
+ fprintf(stderr, "Hello, I'm adding system_ext to the mix!\n");
|
||||||
|
+ char *path = "/system/system_ext/etc/selinux/system_ext_sepolicy.cil";
|
||||||
|
+ file = fopen(path, "r");
|
||||||
|
+ if (!file) {
|
||||||
|
+ fprintf(stderr, "Could not open file: %s\n", path);
|
||||||
|
+ rc = SEPOL_ERR;
|
||||||
|
+ goto exit;
|
||||||
|
+ }
|
||||||
|
+ rc = stat(path, &filedata);
|
||||||
|
+ if (rc == -1) {
|
||||||
|
+ fprintf(stderr, "Could not stat file: %s\n", path);
|
||||||
|
+ rc = SEPOL_ERR;
|
||||||
|
+ goto exit;
|
||||||
|
+ }
|
||||||
|
+ file_size = filedata.st_size;
|
||||||
|
+
|
||||||
|
+ buffer = malloc(file_size);
|
||||||
|
+ rc = fread(buffer, file_size, 1, file);
|
||||||
|
+ if (rc != 1) {
|
||||||
|
+ fprintf(stderr, "Failure reading file: %s\n", path);
|
||||||
|
+ rc = SEPOL_ERR;
|
||||||
|
+ goto exit;
|
||||||
|
+ }
|
||||||
|
+ fclose(file);
|
||||||
|
+ file = NULL;
|
||||||
|
+
|
||||||
|
+ rc = cil_add_file(db, path, buffer, file_size);
|
||||||
|
+ if (rc != SEPOL_OK) {
|
||||||
|
+ fprintf(stderr, "Failure adding %s\n", path);
|
||||||
|
+ goto exit;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ free(buffer);
|
||||||
|
+ buffer = NULL;
|
||||||
|
+
|
||||||
|
+ }
|
||||||
|
file = fopen(argv[i], "r");
|
||||||
|
if (!file) {
|
||||||
|
fprintf(stderr, "Could not open file: %s\n", argv[i]);
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,182 @@
|
|||||||
|
From 9f851c801719b45c79cd911d67ceb7e8f4cf63ab Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Wed, 31 Mar 2021 23:32:37 +0200
|
||||||
|
Subject: [PATCH] Workaround device/phh/treble conflict with SELinux policy
|
||||||
|
|
||||||
|
device/phh/treble defines the following three types (hostapd,
|
||||||
|
sysfs_usb_supply, rpmb_device)
|
||||||
|
However, Qualcomm Samsung Android 11 devices export those symbols as
|
||||||
|
typealias.
|
||||||
|
Type and typealias are fundamentally not mergeable.
|
||||||
|
Luckily, Samsung doesn't do anything with those typealias, so we can
|
||||||
|
simply ignore them.
|
||||||
|
|
||||||
|
Change-Id: I98db7e6eb55854887f90d0fd0f313fb0a19a488f
|
||||||
|
---
|
||||||
|
libsepol/cil/src/cil_binary.c | 8 ++++++--
|
||||||
|
libsepol/cil/src/cil_build_ast.c | 31 ++++++++++++++++++------------
|
||||||
|
libsepol/cil/src/cil_resolve_ast.c | 15 +++++++++++++--
|
||||||
|
3 files changed, 38 insertions(+), 16 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/libsepol/cil/src/cil_binary.c b/libsepol/cil/src/cil_binary.c
|
||||||
|
index 03d53e1f..160fd0e0 100644
|
||||||
|
--- a/libsepol/cil/src/cil_binary.c
|
||||||
|
+++ b/libsepol/cil/src/cil_binary.c
|
||||||
|
@@ -515,13 +515,17 @@ int cil_typealias_to_policydb(policydb_t *pdb, struct cil_alias *cil_alias)
|
||||||
|
type_datum_init(sepol_alias);
|
||||||
|
|
||||||
|
rc = __cil_get_sepol_type_datum(pdb, DATUM(cil_alias->actual), &sepol_type);
|
||||||
|
- if (rc != SEPOL_OK) goto exit;
|
||||||
|
+ if (rc != SEPOL_OK) {
|
||||||
|
+ cil_log(CIL_ERR, "Failed at %s:%s:%d\n", __FILE__, __FUNCTION__, __LINE__);
|
||||||
|
+ goto exit;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
sepol_alias->flavor = TYPE_TYPE;
|
||||||
|
|
||||||
|
key = cil_strdup(cil_alias->datum.fqn);
|
||||||
|
rc = symtab_insert(pdb, SYM_TYPES, key, sepol_alias, SCOPE_DECL, 0, NULL);
|
||||||
|
if (rc != SEPOL_OK) {
|
||||||
|
+ cil_log(CIL_ERR, "Failed at %s:%s:%d:%d\n", __FILE__, __FUNCTION__, __LINE__, rc);
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
sepol_alias->s.value = sepol_type->s.value;
|
||||||
|
@@ -3776,7 +3780,7 @@ int __cil_node_to_policydb(struct cil_tree_node *node, void *extra_args)
|
||||||
|
|
||||||
|
exit:
|
||||||
|
if (rc != SEPOL_OK) {
|
||||||
|
- cil_tree_log(node, CIL_ERR, "Binary policy creation failed");
|
||||||
|
+ cil_tree_log(node, CIL_ERR, "Binary policy creation failed, for pass = %d, flavor = %d", pass, node->flavor);
|
||||||
|
}
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
diff --git a/libsepol/cil/src/cil_build_ast.c b/libsepol/cil/src/cil_build_ast.c
|
||||||
|
index 02cdcc65..2ba08bc6 100644
|
||||||
|
--- a/libsepol/cil/src/cil_build_ast.c
|
||||||
|
+++ b/libsepol/cil/src/cil_build_ast.c
|
||||||
|
@@ -1,16 +1,16 @@
|
||||||
|
/*
|
||||||
|
* Copyright 2011 Tresys Technology, LLC. All rights reserved.
|
||||||
|
- *
|
||||||
|
+ *
|
||||||
|
* Redistribution and use in source and binary forms, with or without
|
||||||
|
* modification, are permitted provided that the following conditions are met:
|
||||||
|
- *
|
||||||
|
+ *
|
||||||
|
* 1. Redistributions of source code must retain the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer.
|
||||||
|
- *
|
||||||
|
+ *
|
||||||
|
* 2. Redistributions in binary form must reproduce the above copyright notice,
|
||||||
|
* this list of conditions and the following disclaimer in the documentation
|
||||||
|
* and/or other materials provided with the distribution.
|
||||||
|
- *
|
||||||
|
+ *
|
||||||
|
* THIS SOFTWARE IS PROVIDED BY TRESYS TECHNOLOGY, LLC ``AS IS'' AND ANY EXPRESS
|
||||||
|
* OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
||||||
|
* MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
|
||||||
|
@@ -21,7 +21,7 @@
|
||||||
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE
|
||||||
|
* OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
|
||||||
|
* ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||||
|
- *
|
||||||
|
+ *
|
||||||
|
* The views and conclusions contained in the software and documentation are those
|
||||||
|
* of the authors and should not be interpreted as representing official policies,
|
||||||
|
* either expressed or implied, of Tresys Technology, LLC.
|
||||||
|
@@ -64,7 +64,7 @@ int cil_fill_list(struct cil_tree_node *current, enum cil_flavor flavor, struct
|
||||||
|
CIL_SYN_END
|
||||||
|
};
|
||||||
|
int syntax_len = sizeof(syntax)/sizeof(*syntax);
|
||||||
|
-
|
||||||
|
+
|
||||||
|
rc = __cil_verify_syntax(current, syntax, syntax_len);
|
||||||
|
if (rc != SEPOL_OK) {
|
||||||
|
goto exit;
|
||||||
|
@@ -108,7 +108,7 @@ int cil_gen_node(struct cil_db *db, struct cil_tree_node *ast_node, struct cil_s
|
||||||
|
{
|
||||||
|
int rc = SEPOL_ERR;
|
||||||
|
symtab_t *symtab = NULL;
|
||||||
|
- struct cil_symtab_datum *prev;
|
||||||
|
+ struct cil_symtab_datum *prev = NULL;
|
||||||
|
|
||||||
|
rc = __cil_verify_name((const char*)key);
|
||||||
|
if (rc != SEPOL_OK) {
|
||||||
|
@@ -133,13 +133,20 @@ int cil_gen_node(struct cil_db *db, struct cil_tree_node *ast_node, struct cil_s
|
||||||
|
/* multiple_decls not ok, ret error */
|
||||||
|
cil_log(CIL_ERR, "Re-declaration of %s %s\n",
|
||||||
|
cil_node_to_string(ast_node), key);
|
||||||
|
- if (cil_symtab_get_datum(symtab, key, &datum) == SEPOL_OK) {
|
||||||
|
+ if (cil_symtab_get_datum(symtab, key, &prev) == SEPOL_OK) {
|
||||||
|
if (sflavor == CIL_SYM_BLOCKS) {
|
||||||
|
- struct cil_tree_node *node = datum->nodes->head->data;
|
||||||
|
+ struct cil_tree_node *node = prev->nodes->head->data;
|
||||||
|
cil_tree_log(node, CIL_ERR, "Previous declaration");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- goto exit;
|
||||||
|
+ if(
|
||||||
|
+ strcmp(key, "sysfs_usb_supply") == 0 ||
|
||||||
|
+ strcmp(key, "hostapd") == 0 ||
|
||||||
|
+ strcmp(key, "rpmb_device") == 0) {
|
||||||
|
+ cil_log(CIL_ERR, "Ignoring...");
|
||||||
|
+ } else {
|
||||||
|
+ goto exit;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
/* multiple_decls is enabled and works for this datum type, add node */
|
||||||
|
cil_list_append(prev->nodes, CIL_NODE, ast_node);
|
||||||
|
@@ -572,7 +579,7 @@ int cil_gen_perm_nodes(struct cil_db *db, struct cil_tree_node *current_perm, st
|
||||||
|
|
||||||
|
while(current_perm != NULL) {
|
||||||
|
if (current_perm->cl_head != NULL) {
|
||||||
|
-
|
||||||
|
+
|
||||||
|
rc = SEPOL_ERR;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
@@ -5717,7 +5724,7 @@ int cil_fill_ipaddr(struct cil_tree_node *addr_node, struct cil_ipaddr *addr)
|
||||||
|
return SEPOL_OK;
|
||||||
|
|
||||||
|
exit:
|
||||||
|
- cil_log(CIL_ERR, "Bad ip address or netmask\n");
|
||||||
|
+ cil_log(CIL_ERR, "Bad ip address or netmask\n");
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/libsepol/cil/src/cil_resolve_ast.c b/libsepol/cil/src/cil_resolve_ast.c
|
||||||
|
index e72abdeb..db3f24f4 100644
|
||||||
|
--- a/libsepol/cil/src/cil_resolve_ast.c
|
||||||
|
+++ b/libsepol/cil/src/cil_resolve_ast.c
|
||||||
|
@@ -512,7 +512,13 @@ int cil_resolve_aliasactual(struct cil_tree_node *current, void *extra_args, enu
|
||||||
|
}
|
||||||
|
if (NODE(alias_datum)->flavor != alias_flavor) {
|
||||||
|
cil_log(CIL_ERR, "%s is not an alias\n",alias_datum->name);
|
||||||
|
- rc = SEPOL_ERR;
|
||||||
|
+ if(
|
||||||
|
+ strcmp(alias_datum->name, "hostapd") == 0 ||
|
||||||
|
+ strcmp(alias_datum->name, "sysfs_usb_supply") == 0 ||
|
||||||
|
+ strcmp(alias_datum->name, "rpmb_device") == 0)
|
||||||
|
+ rc = 0;
|
||||||
|
+ else
|
||||||
|
+ rc = SEPOL_ERR;
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -553,7 +559,12 @@ int cil_resolve_alias_to_actual(struct cil_tree_node *current, enum cil_flavor f
|
||||||
|
int limit = 2;
|
||||||
|
|
||||||
|
if (alias->actual == NULL) {
|
||||||
|
- cil_tree_log(current, CIL_ERR, "Alias declared but not used");
|
||||||
|
+ cil_tree_log(current, CIL_ERR, "Alias %s declared but not used", a1->datum.name);
|
||||||
|
+ if(
|
||||||
|
+ strcmp(a1->datum.name, "hostapd") == 0 ||
|
||||||
|
+ strcmp(a1->datum.name, "sysfs_usb_supply") == 0 ||
|
||||||
|
+ strcmp(a1->datum.name, "rpmb_device") == 0)
|
||||||
|
+ return SEPOL_OK;
|
||||||
|
return SEPOL_ERR;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,54 @@
|
|||||||
|
From 163f3f2b4a89df73d3ffede558d26bb0df966bbe Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Cai <peter@typeblog.net>
|
||||||
|
Date: Tue, 22 Sep 2020 10:38:04 +0200
|
||||||
|
Subject: [PATCH] GrGLCaps: allow ignoring vendor-supplied texture swizzle flag
|
||||||
|
|
||||||
|
* This is broken on MTK 8.1 vendor
|
||||||
|
|
||||||
|
Change-Id: I1ccae06f643f01e4ea6539e1d4e3c7df8d6e30ae
|
||||||
|
---
|
||||||
|
Android.bp | 1 +
|
||||||
|
src/gpu/gl/GrGLCaps.cpp | 8 ++++++++
|
||||||
|
2 files changed, 9 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/Android.bp b/Android.bp
|
||||||
|
index 122324c6ef..5ec949966a 100644
|
||||||
|
--- a/Android.bp
|
||||||
|
+++ b/Android.bp
|
||||||
|
@@ -3,6 +3,7 @@
|
||||||
|
cc_library_static {
|
||||||
|
name: "libskia",
|
||||||
|
host_supported: true,
|
||||||
|
+ shared_libs: [ "libbase" ],
|
||||||
|
cflags: [
|
||||||
|
"-U_FORTIFY_SOURCE",
|
||||||
|
"-DATRACE_TAG=ATRACE_TAG_VIEW",
|
||||||
|
diff --git a/src/gpu/gl/GrGLCaps.cpp b/src/gpu/gl/GrGLCaps.cpp
|
||||||
|
index 6a1bf56474..df007ba70c 100644
|
||||||
|
--- a/src/gpu/gl/GrGLCaps.cpp
|
||||||
|
+++ b/src/gpu/gl/GrGLCaps.cpp
|
||||||
|
@@ -22,6 +22,11 @@
|
||||||
|
#include "src/gpu/gl/GrGLTexture.h"
|
||||||
|
#include "src/utils/SkJSONWriter.h"
|
||||||
|
|
||||||
|
+#if defined(SK_BUILD_FOR_ANDROID)
|
||||||
|
+#include "android-base/properties.h"
|
||||||
|
+using android::base::GetBoolProperty;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
GrGLCaps::GrGLCaps(const GrContextOptions& contextOptions,
|
||||||
|
const GrGLContextInfo& ctxInfo,
|
||||||
|
const GrGLInterface* glInterface) : INHERITED(contextOptions) {
|
||||||
|
@@ -273,6 +278,9 @@ void GrGLCaps::init(const GrContextOptions& contextOptions,
|
||||||
|
this->fShaderCaps->fTextureSwizzleAppliedInShader = false;
|
||||||
|
}
|
||||||
|
} // no WebGL support
|
||||||
|
+ if(GetBoolProperty("ro.skia.ignore_swizzle", false)) {
|
||||||
|
+ this->fShaderCaps->fTextureSwizzleAppliedInShader = true;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
if (GR_IS_GR_GL(standard)) {
|
||||||
|
fMipMapLevelAndLodControlSupport = true;
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
From f85268cf7b0e928d741d316b59b3b31773fae7c8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Alexander Pohl <pohl199885@gmail.com>
|
||||||
|
Date: Fri, 15 Jun 2018 19:58:07 +0200
|
||||||
|
Subject: [PATCH 01/14] Fix WiFi-Display on Huawei devices (EMUI 8.0)
|
||||||
|
|
||||||
|
Huaweis media stack doesn't handle intra-refresh-mode, so skip the error instead.
|
||||||
|
|
||||||
|
Thanks to Chris Vandomelen for pointing that out.
|
||||||
|
---
|
||||||
|
media/libstagefright/ACodec.cpp | 5 ++---
|
||||||
|
1 file changed, 2 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
|
||||||
|
index 63ab6548b4..e25f8f6558 100644
|
||||||
|
--- a/media/libstagefright/ACodec.cpp
|
||||||
|
+++ b/media/libstagefright/ACodec.cpp
|
||||||
|
@@ -4432,9 +4432,8 @@ status_t ACodec::setupAVCEncoderParameters(const sp<AMessage> &msg) {
|
||||||
|
if (msg->findInt32("intra-refresh-mode", &intraRefreshMode)) {
|
||||||
|
err = setCyclicIntraMacroblockRefresh(msg, intraRefreshMode);
|
||||||
|
if (err != OK) {
|
||||||
|
- ALOGE("Setting intra macroblock refresh mode (%d) failed: 0x%x",
|
||||||
|
- err, intraRefreshMode);
|
||||||
|
- return err;
|
||||||
|
+ ALOGE("setupAVCEncoderParameters(): set intra-refresh-mode failed, ignoring..");
|
||||||
|
+ //return err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,36 @@
|
|||||||
|
From 4ab15a33857452d990581a3d0073e35215e1c542 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Sun, 19 Aug 2018 22:59:06 +0200
|
||||||
|
Subject: [PATCH 02/14] ::Kirin:: Remove lock to prevent self-lock
|
||||||
|
|
||||||
|
With Huawei Camera HAL, we get the following call order:
|
||||||
|
cameraserver CameraService::enumerateProviders (*)
|
||||||
|
=> HAL ICameraProvider::getVendorTags
|
||||||
|
=> HAL ICameraProviderCallback::cameraDeviceStatusChange
|
||||||
|
=> cameraserver CameraService::addState
|
||||||
|
=> cameraserver CameraService::updateCameraNumAndIds (*)
|
||||||
|
|
||||||
|
The two functions marked with (*) take mServiceLock
|
||||||
|
Hence the safe-lock
|
||||||
|
|
||||||
|
Change-Id: I464255b5a3af8d75d72b1772ab55aa655f395a60
|
||||||
|
---
|
||||||
|
services/camera/libcameraservice/CameraService.cpp | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
index af1e01d8e1..05252d6308 100644
|
||||||
|
--- a/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
+++ b/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
@@ -301,7 +301,7 @@ status_t CameraService::getSystemCameraKind(const String8& cameraId, SystemCamer
|
||||||
|
}
|
||||||
|
|
||||||
|
void CameraService::updateCameraNumAndIds() {
|
||||||
|
- Mutex::Autolock l(mServiceLock);
|
||||||
|
+ //Mutex::Autolock l(mServiceLock);
|
||||||
|
std::pair<int, int> systemAndNonSystemCameras = mCameraProviderManager->getCameraCount();
|
||||||
|
// Excludes hidden secure cameras
|
||||||
|
mNumberOfCameras =
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,26 @@
|
|||||||
|
From 1083cc0b59ed11aa69af22103ebaf74ae11f272c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Sun, 19 Aug 2018 23:05:26 +0200
|
||||||
|
Subject: [PATCH 03/14] We might not have a mFlashlight at this state, but
|
||||||
|
that's ok
|
||||||
|
|
||||||
|
---
|
||||||
|
services/camera/libcameraservice/CameraService.cpp | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
index 05252d6308..e1d23073f4 100644
|
||||||
|
--- a/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
+++ b/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
@@ -337,7 +337,7 @@ void CameraService::addStates(const String8 id) {
|
||||||
|
conflicting, deviceKind));
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (mFlashlight->hasFlashUnit(id)) {
|
||||||
|
+ if (mFlashlight != nullptr && mFlashlight->hasFlashUnit(id)) {
|
||||||
|
Mutex::Autolock al(mTorchStatusMutex);
|
||||||
|
mTorchStatusMap.add(id, TorchModeStatus::AVAILABLE_OFF);
|
||||||
|
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,62 @@
|
|||||||
|
From 1c0e912c7bdef868de97dc07dd5227d298cd66a9 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Artem Borisov <dedsa2002@gmail.com>
|
||||||
|
Date: Tue, 25 Sep 2018 12:39:22 +0300
|
||||||
|
Subject: [PATCH 04/14] CameraService: Support calling addStates in
|
||||||
|
enumerateProviders
|
||||||
|
|
||||||
|
Some pre-P camera HALs trigger onDeviceStatusChange callback during HAL init.
|
||||||
|
This is horribly wrong and causes a race condition between enumerateProviders
|
||||||
|
and onDeviceStatusChange. While it wasn't really harmful in O, in P call sequence
|
||||||
|
was changed and now this race condition leads to two problems: null pointer dereference
|
||||||
|
in addStates because mFlashlight is not initialized at a proper timing; mServiceLock
|
||||||
|
deadlock because updateCameraNumAndIds and enumerateProviders are called at the same time.
|
||||||
|
Moving addStates back to enumerateProviders makes the sequence more similar to O, and doesn't
|
||||||
|
let these two issues to happen.
|
||||||
|
Enable TARGET_CAMERA_NEEDS_ADD_STATES_IN_ENUMERATE when it is necessary.
|
||||||
|
|
||||||
|
@Dil3mm4 edit: Instead of TARGET_CAMERA_NEEDS_ADD_STATES_IN_ENUMERATE let's use a system property to make it more generic and suitable for GSI use.
|
||||||
|
|
||||||
|
Change-Id: Ife25b9753fdb679ab0c77f385e1b8527551a4711
|
||||||
|
---
|
||||||
|
.../camera/libcameraservice/CameraService.cpp | 16 ++++++++++++++++
|
||||||
|
1 file changed, 16 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
index e1d23073f4..83dea10f3a 100644
|
||||||
|
--- a/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
+++ b/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
@@ -221,6 +221,20 @@ status_t CameraService::enumerateProviders() {
|
||||||
|
|
||||||
|
for (auto& cameraId : deviceIds) {
|
||||||
|
String8 id8 = String8(cameraId.c_str());
|
||||||
|
+ if (property_get_bool("persist.sys.camera.huawei", false)) {
|
||||||
|
+ bool cameraFound = false;
|
||||||
|
+ {
|
||||||
|
+ Mutex::Autolock lock(mCameraStatesLock);
|
||||||
|
+ auto iter = mCameraStates.find(id8);
|
||||||
|
+ if (iter != mCameraStates.end()) {
|
||||||
|
+ cameraFound = true;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if (!cameraFound) {
|
||||||
|
+ addStates(id8);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (getCameraState(id8) == nullptr) {
|
||||||
|
onDeviceStatusChanged(id8, CameraDeviceStatus::PRESENT);
|
||||||
|
}
|
||||||
|
@@ -375,8 +389,10 @@ void CameraService::onDeviceStatusChanged(const String8& id,
|
||||||
|
ALOGI("%s: Unknown camera ID %s, a new camera is added",
|
||||||
|
__FUNCTION__, id.string());
|
||||||
|
|
||||||
|
+ if (!property_get_bool("persist.sys.camera.huawei", false)) {
|
||||||
|
// First add as absent to make sure clients are notified below
|
||||||
|
addStates(id);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
updateStatus(newStatus, id);
|
||||||
|
} else {
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,131 @@
|
|||||||
|
From 3afbad626827104662f61ab04ba3fbe6af32f73f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Mon, 5 Aug 2019 18:09:50 +0200
|
||||||
|
Subject: [PATCH 05/14] Fix BT in-call on CAF devices
|
||||||
|
|
||||||
|
See https://github.com/phhusson/treble_experimentations/issues/374
|
||||||
|
|
||||||
|
In Qualcomm's BSP audio_policy_configuration.xml, one route is missing,
|
||||||
|
from primary output and telephony to BT SCO.
|
||||||
|
|
||||||
|
Add it if we detect telephony and bt sco, but no such route.
|
||||||
|
|
||||||
|
Change-Id: Ifea0f88276ec9a0811f3cb1973c4b06f2c82077b
|
||||||
|
---
|
||||||
|
.../managerdefinitions/src/Serializer.cpp | 93 +++++++++++++++++++
|
||||||
|
1 file changed, 93 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
index 883e713326..d85dbdf113 100644
|
||||||
|
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
@@ -596,6 +596,98 @@ Return<RouteTraits::Element> RouteTraits::deserialize(const xmlNode *cur, PtrSer
|
||||||
|
return route;
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void fixupQualcommBtScoRoute(RouteTraits::Collection& routes, DevicePortTraits::Collection& devicePorts, HwModule* ctx) {
|
||||||
|
+ // On many Qualcomm devices, there is a BT SCO Headset Mic => primary input mix
|
||||||
|
+ // But Telephony Rx => BT SCO Headset route is missing
|
||||||
|
+ // When we detect such case, add the missing route
|
||||||
|
+
|
||||||
|
+ // If we have:
|
||||||
|
+ // <route type="mix" sink="Telephony Tx" sources="voice_tx"/>
|
||||||
|
+ // <route type="mix" sink="primary input" sources="Built-In Mic,Built-In Back Mic,Wired Headset Mic,BT SCO Headset Mic"/>
|
||||||
|
+ // <devicePort tagName="BT SCO Headset" type="AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET" role="sink" />
|
||||||
|
+ // And no <route type="mix" sink="BT SCO Headset" />
|
||||||
|
+
|
||||||
|
+ // Add:
|
||||||
|
+ // <route type="mix" sink="BT SCO Headset" sources="primary output,deep_buffer,compressed_offload,Telephony Rx"/>
|
||||||
|
+ bool foundBtScoHeadsetDevice = false;
|
||||||
|
+ for(const auto& device: devicePorts) {
|
||||||
|
+ if(device->getTagName() == "BT SCO Headset") {
|
||||||
|
+ foundBtScoHeadsetDevice = true;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if(!foundBtScoHeadsetDevice) {
|
||||||
|
+ ALOGE("No BT SCO Headset device found, don't patch policy");
|
||||||
|
+ return;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ bool foundTelephony = false;
|
||||||
|
+ bool foundBtScoInput = false;
|
||||||
|
+ bool foundScoHeadsetRoute = false;
|
||||||
|
+ for(const auto& route: routes) {
|
||||||
|
+ ALOGE("Looking at route %d\n", route->getType());
|
||||||
|
+ if(route->getType() != AUDIO_ROUTE_MIX)
|
||||||
|
+ continue;
|
||||||
|
+ auto sink = route->getSink();
|
||||||
|
+ ALOGE("... With sink %s\n", sink->getTagName().c_str());
|
||||||
|
+ if(sink->getTagName() == "Telephony Tx") {
|
||||||
|
+ foundTelephony = true;
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ if(sink->getTagName() == "BT SCO Headset") {
|
||||||
|
+ foundScoHeadsetRoute = true;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ for(const auto& source: route->getSources()) {
|
||||||
|
+ ALOGE("... With source %s\n", source->getTagName().c_str());
|
||||||
|
+ if(source->getTagName() == "BT SCO Headset Mic") {
|
||||||
|
+ foundBtScoInput = true;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ //The route we want to add is already there
|
||||||
|
+ ALOGE("Done looking for existing routes");
|
||||||
|
+ if(foundScoHeadsetRoute)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
+ ALOGE("No existing route found... %d %d", foundTelephony ? 1 : 0, foundBtScoInput ? 1 : 0);
|
||||||
|
+ //We couldn't find the routes we assume are required for the function we want to add
|
||||||
|
+ if(!foundTelephony || !foundBtScoInput)
|
||||||
|
+ return;
|
||||||
|
+ ALOGE("Adding our own.");
|
||||||
|
+
|
||||||
|
+ // Add:
|
||||||
|
+ // <route type="mix" sink="BT SCO Headset" sources="primary output,deep_buffer,compressed_offload,Telephony Rx"/>
|
||||||
|
+ AudioRoute *newRoute = new AudioRoute(AUDIO_ROUTE_MIX);
|
||||||
|
+
|
||||||
|
+ auto sink = ctx->findPortByTagName("BT SCO Headset");
|
||||||
|
+ ALOGE("Got sink %p\n", sink.get());
|
||||||
|
+ newRoute->setSink(sink);
|
||||||
|
+
|
||||||
|
+ Vector<sp<PolicyAudioPort>> sources;
|
||||||
|
+ for(const auto& sourceName: {
|
||||||
|
+ "primary output",
|
||||||
|
+ "deep_buffer",
|
||||||
|
+ "compressed_offload",
|
||||||
|
+ "Telephony Rx"
|
||||||
|
+ }) {
|
||||||
|
+ auto source = ctx->findPortByTagName(sourceName);
|
||||||
|
+ ALOGE("Got source %p\n", source.get());
|
||||||
|
+ if (source.get() != nullptr) {
|
||||||
|
+ sources.add(source);
|
||||||
|
+ source->addRoute(newRoute);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ newRoute->setSources(sources);
|
||||||
|
+
|
||||||
|
+ sink->addRoute(newRoute);
|
||||||
|
+
|
||||||
|
+ auto ret = routes.add(newRoute);
|
||||||
|
+ ALOGE("route add returned %zd", ret);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
Return<ModuleTraits::Element> ModuleTraits::deserialize(const xmlNode *cur, PtrSerializingCtx ctx)
|
||||||
|
{
|
||||||
|
std::string name = getXmlAttribute(cur, Attributes::name);
|
||||||
|
@@ -635,6 +727,7 @@ Return<ModuleTraits::Element> ModuleTraits::deserialize(const xmlNode *cur, PtrS
|
||||||
|
if (status != NO_ERROR) {
|
||||||
|
return Status::fromStatusT(status);
|
||||||
|
}
|
||||||
|
+ fixupQualcommBtScoRoute(routes, devicePorts, module.get());
|
||||||
|
module->setRoutes(routes);
|
||||||
|
|
||||||
|
for (const xmlNode *children = cur->xmlChildrenNode; children != NULL;
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,94 @@
|
|||||||
|
From 4f7930e14f979ec5be530bd630ca9bb664050420 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Tue, 1 Oct 2019 13:35:49 +0200
|
||||||
|
Subject: [PATCH 06/14] Add (partial, cam id is hardcoded) support for Asus ZF6
|
||||||
|
motor camera
|
||||||
|
|
||||||
|
Change-Id: Iea6e1370780a1d16f728748d1d948d092532d8fe
|
||||||
|
---
|
||||||
|
.../camera/libcameraservice/CameraService.cpp | 26 +++++++++++++++++++
|
||||||
|
.../camera/libcameraservice/CameraService.h | 3 +++
|
||||||
|
2 files changed, 29 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
index 83dea10f3a..37ea512bdd 100644
|
||||||
|
--- a/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
+++ b/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
@@ -25,6 +25,7 @@
|
||||||
|
#include <ctime>
|
||||||
|
#include <string>
|
||||||
|
#include <sys/types.h>
|
||||||
|
+#include <sys/wait.h>
|
||||||
|
#include <inttypes.h>
|
||||||
|
#include <pthread.h>
|
||||||
|
|
||||||
|
@@ -139,6 +140,7 @@ Mutex CameraService::sProxyMutex;
|
||||||
|
sp<hardware::ICameraServiceProxy> CameraService::sCameraServiceProxy;
|
||||||
|
|
||||||
|
CameraService::CameraService() :
|
||||||
|
+ mPhysicalFrontCamStatus(false),
|
||||||
|
mEventLog(DEFAULT_EVENT_LOG_LENGTH),
|
||||||
|
mNumberOfCameras(0),
|
||||||
|
mNumberOfCamerasWithoutSystemCamera(0),
|
||||||
|
@@ -1785,6 +1787,7 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&
|
||||||
|
mServiceLock.lock();
|
||||||
|
} else {
|
||||||
|
// Otherwise, add client to active clients list
|
||||||
|
+ physicalFrontCam(cameraId == "1");
|
||||||
|
finishConnectLocked(client, partial);
|
||||||
|
}
|
||||||
|
} // lock is destroyed, allow further connect calls
|
||||||
|
@@ -1866,6 +1869,27 @@ status_t CameraService::addOfflineClient(String8 cameraId, sp<BasicClient> offli
|
||||||
|
return OK;
|
||||||
|
}
|
||||||
|
|
||||||
|
+void CameraService::physicalFrontCam(bool on) {
|
||||||
|
+ if(on == mPhysicalFrontCamStatus) return;
|
||||||
|
+ mPhysicalFrontCamStatus = on;
|
||||||
|
+
|
||||||
|
+ if(access("/dev/asusMotoDrv", F_OK) == 0) {
|
||||||
|
+ int pid = fork();
|
||||||
|
+ if(pid == 0) {
|
||||||
|
+ const char* cmd[] = {
|
||||||
|
+ "/system/bin/asus-motor",
|
||||||
|
+ "0",
|
||||||
|
+ NULL
|
||||||
|
+ };
|
||||||
|
+ cmd[1] = on ? "0" : "1";
|
||||||
|
+ execve("/system/bin/asus-motor", (char**)cmd, environ);
|
||||||
|
+ _exit(1);
|
||||||
|
+ } else {
|
||||||
|
+ waitpid(pid, NULL, 0);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
Status CameraService::setTorchMode(const String16& cameraId, bool enabled,
|
||||||
|
const sp<IBinder>& clientBinder) {
|
||||||
|
Mutex::Autolock lock(mServiceLock);
|
||||||
|
@@ -2840,6 +2864,8 @@ binder::Status CameraService::BasicClient::disconnect() {
|
||||||
|
}
|
||||||
|
mDisconnected = true;
|
||||||
|
|
||||||
|
+ sCameraService->physicalFrontCam(false);
|
||||||
|
+
|
||||||
|
sCameraService->removeByClient(this);
|
||||||
|
sCameraService->logDisconnected(mCameraIdStr, mClientPid, String8(mClientPackageName));
|
||||||
|
sCameraService->mCameraProviderManager->removeRef(CameraProviderManager::DeviceMode::CAMERA,
|
||||||
|
diff --git a/services/camera/libcameraservice/CameraService.h b/services/camera/libcameraservice/CameraService.h
|
||||||
|
index 4321201100..85b1706996 100644
|
||||||
|
--- a/services/camera/libcameraservice/CameraService.h
|
||||||
|
+++ b/services/camera/libcameraservice/CameraService.h
|
||||||
|
@@ -202,6 +202,9 @@ public:
|
||||||
|
// Register an offline client for a given active camera id
|
||||||
|
status_t addOfflineClient(String8 cameraId, sp<BasicClient> offlineClient);
|
||||||
|
|
||||||
|
+ bool mPhysicalFrontCamStatus;
|
||||||
|
+ void physicalFrontCam(bool on);
|
||||||
|
+
|
||||||
|
/////////////////////////////////////////////////////////////////////
|
||||||
|
// Client functionality
|
||||||
|
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,59 @@
|
|||||||
|
From 93d21e226a4cac72ebc73f8fcec3001160d8570f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Cai <peter@typeblog.net>
|
||||||
|
Date: Thu, 23 Jan 2020 11:13:43 +0800
|
||||||
|
Subject: [PATCH 07/14] audiopolicy: try again with trimmed audio port name if
|
||||||
|
not found
|
||||||
|
|
||||||
|
* In Spreadtrum BSP, some audio routes may contain ports with extra
|
||||||
|
spaces at the beginning and the end, causing audiopolicy to refuse to
|
||||||
|
load and leading to broken audio.
|
||||||
|
|
||||||
|
* Fix this by retrying with trimmed port name when not found. Do not
|
||||||
|
use trimmed name all the time because a white space is a valid
|
||||||
|
character in port name, and we cannot be sure nobody is using it for
|
||||||
|
legitimite purposes.
|
||||||
|
|
||||||
|
Change-Id: I993708b28e8404bc8c483d71a850ac69382231bd
|
||||||
|
---
|
||||||
|
.../managerdefinitions/src/Serializer.cpp | 18 ++++++++++++++++--
|
||||||
|
1 file changed, 16 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
index d85dbdf113..e25dda07c7 100644
|
||||||
|
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
@@ -539,6 +539,17 @@ Return<DevicePortTraits::Element> DevicePortTraits::deserialize(const xmlNode *c
|
||||||
|
return deviceDesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
+char* trim(char * s) {
|
||||||
|
+ int l = strlen(s);
|
||||||
|
+
|
||||||
|
+ if (l > 0) {
|
||||||
|
+ while (isspace(s[l - 1])) --l;
|
||||||
|
+ while (*s && isspace(*s)) ++s, --l;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return strndup(s, l);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
Return<RouteTraits::Element> RouteTraits::deserialize(const xmlNode *cur, PtrSerializingCtx ctx)
|
||||||
|
{
|
||||||
|
std::string type = getXmlAttribute(cur, Attributes::type);
|
||||||
|
@@ -579,8 +590,11 @@ Return<RouteTraits::Element> RouteTraits::deserialize(const xmlNode *cur, PtrSer
|
||||||
|
if (strlen(devTag) != 0) {
|
||||||
|
sp<PolicyAudioPort> source = ctx->findPortByTagName(devTag);
|
||||||
|
if (source == NULL) {
|
||||||
|
- ALOGE("%s: no source found with name=%s", __func__, devTag);
|
||||||
|
- return Status::fromStatusT(BAD_VALUE);
|
||||||
|
+ source = ctx->findPortByTagName(trim(devTag));
|
||||||
|
+ if (source == NULL) {
|
||||||
|
+ ALOGE("%s: no source found with name=%s", __func__, devTag);
|
||||||
|
+ return Status::fromStatusT(BAD_VALUE);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
sources.add(source);
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,46 @@
|
|||||||
|
From 2c80a9c1453230a62f538fc128f286005d91b802 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Mon, 13 Apr 2020 21:01:16 +0200
|
||||||
|
Subject: [PATCH 08/14] There are three SCO devices. Fallback from one to the
|
||||||
|
others if needed
|
||||||
|
|
||||||
|
Change-Id: I414dcb6b154855c00cb8520b23dc1069827864b2
|
||||||
|
---
|
||||||
|
.../managerdefinitions/src/HwModule.cpp | 21 +++++++++++++++++++
|
||||||
|
1 file changed, 21 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp b/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
|
||||||
|
index d31e4437e1..b2ca5e85de 100644
|
||||||
|
--- a/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
|
||||||
|
+++ b/services/audiopolicy/common/managerdefinitions/src/HwModule.cpp
|
||||||
|
@@ -292,6 +292,27 @@ sp <HwModule> HwModuleCollection::getModuleForDeviceType(audio_devices_t type,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ //We didn't find one? Ok but all SCOs are equivalent surely?
|
||||||
|
+ if(type == AUDIO_DEVICE_OUT_BLUETOOTH_SCO ||
|
||||||
|
+ type == AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET ||
|
||||||
|
+ type == AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT) {
|
||||||
|
+ ALOGE("Fallback SCO");
|
||||||
|
+ if(type != AUDIO_DEVICE_OUT_BLUETOOTH_SCO) {
|
||||||
|
+ auto ret = getModuleForDeviceType(AUDIO_DEVICE_OUT_BLUETOOTH_SCO, encodedFormat);
|
||||||
|
+ ALOGE("Fallback SCO simple? %s", (ret != nullptr) ? "yes" : "no");
|
||||||
|
+ if(ret != nullptr) return ret;
|
||||||
|
+ }
|
||||||
|
+ if(type != AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET) {
|
||||||
|
+ auto ret = getModuleForDeviceType(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_HEADSET, encodedFormat);
|
||||||
|
+ ALOGE("Fallback SCO headset? %s", (ret != nullptr) ? "yes" : "no");
|
||||||
|
+ if(ret != nullptr) return ret;
|
||||||
|
+ }
|
||||||
|
+ if(type != AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT) {
|
||||||
|
+ auto ret = getModuleForDeviceType(AUDIO_DEVICE_OUT_BLUETOOTH_SCO_CARKIT, encodedFormat);
|
||||||
|
+ ALOGE("Fallback SCO carkit? %s", (ret != nullptr) ? "yes" : "no");
|
||||||
|
+ if(ret != nullptr) return ret;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,82 @@
|
|||||||
|
From ab92e063952b11ee1090cbf9c0ba0935325a54af Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Thu, 14 May 2020 19:54:55 +0200
|
||||||
|
Subject: [PATCH] Add persist.sys.phh.samsung.camera_ids property to access
|
||||||
|
hidden Samsung cameras
|
||||||
|
|
||||||
|
Change-Id: I2c7bf535272acc28ed2277e96c78ddd28a0b4593
|
||||||
|
---
|
||||||
|
services/camera/libcameraservice/Android.bp | 3 ++-
|
||||||
|
.../common/CameraProviderManager.cpp | 14 ++++++++++++--
|
||||||
|
2 files changed, 14 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/camera/libcameraservice/Android.bp b/services/camera/libcameraservice/Android.bp
|
||||||
|
index 53fc1be7eb..99ca362bf3 100644
|
||||||
|
--- a/services/camera/libcameraservice/Android.bp
|
||||||
|
+++ b/services/camera/libcameraservice/Android.bp
|
||||||
|
@@ -131,7 +131,8 @@ cc_library_shared {
|
||||||
|
"android.hardware.camera.device@3.3",
|
||||||
|
"android.hardware.camera.device@3.4",
|
||||||
|
"android.hardware.camera.device@3.5",
|
||||||
|
- "android.hardware.camera.device@3.6"
|
||||||
|
+ "android.hardware.camera.device@3.6",
|
||||||
|
+ "vendor.samsung.hardware.camera.provider@3.0",
|
||||||
|
],
|
||||||
|
|
||||||
|
static_libs: [
|
||||||
|
diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp
|
||||||
|
index 876d70d7cf..0bff3606df 100644
|
||||||
|
--- a/services/camera/libcameraservice/common/CameraProviderManager.cpp
|
||||||
|
+++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp
|
||||||
|
@@ -21,6 +21,7 @@
|
||||||
|
#include "CameraProviderManager.h"
|
||||||
|
|
||||||
|
#include <android/hardware/camera/device/3.5/ICameraDevice.h>
|
||||||
|
+#include <vendor/samsung/hardware/camera/provider/3.0/ISehCameraProvider.h>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <chrono>
|
||||||
|
@@ -1330,6 +1331,7 @@ status_t CameraProviderManager::ProviderInfo::initialize(
|
||||||
|
mMinorVersion = 6;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
// We need to check again since cast2_6.isOk() succeeds even if the provider
|
||||||
|
// version isn't actually 2.6.
|
||||||
|
if (interface2_6 == nullptr){
|
||||||
|
@@ -1358,6 +1360,9 @@ status_t CameraProviderManager::ProviderInfo::initialize(
|
||||||
|
return mapToStatusT(status);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ auto samsungCast = vendor::samsung::hardware::camera::provider::V3_0::ISehCameraProvider::castFrom(interface);
|
||||||
|
+ auto samsungProvider = samsungCast.isOk() ? static_cast<sp<vendor::samsung::hardware::camera::provider::V3_0::ISehCameraProvider>>(samsungCast) : nullptr;
|
||||||
|
+
|
||||||
|
hardware::Return<bool> linked = interface->linkToDeath(this, /*cookie*/ mId);
|
||||||
|
if (!linked.isOk()) {
|
||||||
|
ALOGE("%s: Transaction error in linking to camera provider '%s' death: %s",
|
||||||
|
@@ -1388,7 +1393,7 @@ status_t CameraProviderManager::ProviderInfo::initialize(
|
||||||
|
|
||||||
|
// Get initial list of camera devices, if any
|
||||||
|
std::vector<std::string> devices;
|
||||||
|
- hardware::Return<void> ret = interface->getCameraIdList([&status, this, &devices](
|
||||||
|
+ auto cb = [&status, this, &devices](
|
||||||
|
Status idStatus,
|
||||||
|
const hardware::hidl_vec<hardware::hidl_string>& cameraDeviceNames) {
|
||||||
|
status = idStatus;
|
||||||
|
@@ -1405,7 +1410,12 @@ status_t CameraProviderManager::ProviderInfo::initialize(
|
||||||
|
mProviderPublicCameraIds.push_back(id);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- } });
|
||||||
|
+ } };
|
||||||
|
+ hardware::Return<void> ret;
|
||||||
|
+ if(samsungProvider != nullptr && property_get_bool("persist.sys.phh.samsung.camera_ids", false))
|
||||||
|
+ ret = samsungProvider->sehGetCameraIdList(cb);
|
||||||
|
+ else
|
||||||
|
+ ret = interface->getCameraIdList(cb);
|
||||||
|
if (!ret.isOk()) {
|
||||||
|
ALOGE("%s: Transaction error in getting camera ID list from provider '%s': %s",
|
||||||
|
__FUNCTION__, mProviderName.c_str(), linked.description().c_str());
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,45 @@
|
|||||||
|
From 6dff7fa42818b525faa0a80d161ad54055ebc38e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Tue, 19 May 2020 14:01:14 +0200
|
||||||
|
Subject: [PATCH 11/14] Add a property to force camera timestamp source
|
||||||
|
|
||||||
|
Some devices wrongly report their timesource
|
||||||
|
Camera's timesource can either be CLOCK_MONOTONIC, or CLOCK_BOOTTIME
|
||||||
|
The former doesn't increment in sleep, while the later does.
|
||||||
|
There is a camera HAL property for that, though some devices don't
|
||||||
|
report it properly.
|
||||||
|
|
||||||
|
This issue happens on Xiaomi Redmi 7A, it needs to force the value to 1
|
||||||
|
|
||||||
|
Add a property persist.sys.phh.camera.force_timestampsource to force
|
||||||
|
timestamp source.
|
||||||
|
---
|
||||||
|
.../libcameraservice/device3/Camera3Device.cpp | 12 ++++++++++--
|
||||||
|
1 file changed, 10 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/camera/libcameraservice/device3/Camera3Device.cpp b/services/camera/libcameraservice/device3/Camera3Device.cpp
|
||||||
|
index 4a509aa745..cdf9fc783e 100644
|
||||||
|
--- a/services/camera/libcameraservice/device3/Camera3Device.cpp
|
||||||
|
+++ b/services/camera/libcameraservice/device3/Camera3Device.cpp
|
||||||
|
@@ -316,8 +316,16 @@ status_t Camera3Device::initializeCommonLocked() {
|
||||||
|
// Measure the clock domain offset between camera and video/hw_composer
|
||||||
|
camera_metadata_entry timestampSource =
|
||||||
|
mDeviceInfo.find(ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE);
|
||||||
|
- if (timestampSource.count > 0 && timestampSource.data.u8[0] ==
|
||||||
|
- ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME) {
|
||||||
|
+ int timestampSourceValue = 0;
|
||||||
|
+ if ((timestampSource.count > 0 && timestampSource.data.u8[0] ==
|
||||||
|
+ ANDROID_SENSOR_INFO_TIMESTAMP_SOURCE_REALTIME)) {
|
||||||
|
+ timestampSourceValue = 1;
|
||||||
|
+ }
|
||||||
|
+ int forceTimestampSource = property_get_int32("persist.sys.phh.camera.force_timestampsource", -1);
|
||||||
|
+ //Don't override if it's -1, default value
|
||||||
|
+ if(forceTimestampSource == 0) timestampSourceValue = 0;
|
||||||
|
+ if(forceTimestampSource == 1) timestampSourceValue = 1;
|
||||||
|
+ if (timestampSourceValue == 1) {
|
||||||
|
mTimestampOffset = getMonoToBoottimeOffset();
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,79 @@
|
|||||||
|
From 7f14fcbf4bcf6d8f8c4b89f6ac4b91bc4961ed6f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Tue, 24 Apr 2018 00:14:28 +0200
|
||||||
|
Subject: [PATCH 12/14] FIH devices: Fix "Earpiece" audio output
|
||||||
|
|
||||||
|
On some FIH devices (confirmed on Razer, and probably on Aquos SS2),
|
||||||
|
Earpiece is not listed in attachedDevices, and devicePort's profile
|
||||||
|
mentions it is AUDIO_CHANNEL_IN_MONO, instead of AUDIO_CHANNEL_OUT_MONO.
|
||||||
|
|
||||||
|
Detect such cases (output device, but got only AUDIO_CHANNEL_IN_MONO),
|
||||||
|
and fix both channelMasks and attachedDevices
|
||||||
|
|
||||||
|
Change-Id: I4a88ba6d34d0fcd346eeea2ca903772f0271040a
|
||||||
|
---
|
||||||
|
.../managerdefinitions/src/Serializer.cpp | 27 ++++++++++++++++---
|
||||||
|
1 file changed, 24 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
index e25dda07c7..a8eb142c81 100644
|
||||||
|
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
@@ -396,15 +396,24 @@ Return<AudioGainTraits::Element> AudioGainTraits::deserialize(const xmlNode *cur
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
+static bool fixedEarpieceChannels = false;
|
||||||
|
Return<AudioProfileTraits::Element> AudioProfileTraits::deserialize(const xmlNode *cur,
|
||||||
|
- PtrSerializingCtx /*serializingContext*/)
|
||||||
|
+ PtrSerializingCtx serializingContext)
|
||||||
|
{
|
||||||
|
+ bool isOutput = serializingContext != nullptr;
|
||||||
|
std::string samplingRates = getXmlAttribute(cur, Attributes::samplingRates);
|
||||||
|
std::string format = getXmlAttribute(cur, Attributes::format);
|
||||||
|
std::string channels = getXmlAttribute(cur, Attributes::channelMasks);
|
||||||
|
+ ChannelTraits::Collection channelsMask = channelMasksFromString(channels, ",");
|
||||||
|
+
|
||||||
|
+ //Some Foxconn devices have wrong earpiece channel mask, leading to no channel mask
|
||||||
|
+ if(channelsMask.size() == 1 && *channelsMask.begin() == AUDIO_CHANNEL_IN_MONO && isOutput) {
|
||||||
|
+ fixedEarpieceChannels = true;
|
||||||
|
+ channelsMask = channelMasksFromString("AUDIO_CHANNEL_OUT_MONO", ",");
|
||||||
|
+ }
|
||||||
|
|
||||||
|
Element profile = new AudioProfile(formatFromString(format, gDynamicFormat),
|
||||||
|
- channelMasksFromString(channels, ","),
|
||||||
|
+ channelsMask,
|
||||||
|
samplingRatesFromString(samplingRates, ","));
|
||||||
|
|
||||||
|
profile->setDynamicFormat(profile->getFormat() == gDynamicFormat);
|
||||||
|
@@ -517,7 +526,11 @@ Return<DevicePortTraits::Element> DevicePortTraits::deserialize(const xmlNode *c
|
||||||
|
Element deviceDesc = new DeviceDescriptor(type, name, address, encodedFormats);
|
||||||
|
|
||||||
|
AudioProfileTraits::Collection profiles;
|
||||||
|
- status_t status = deserializeCollection<AudioProfileTraits>(cur, &profiles, NULL);
|
||||||
|
+ status_t status;
|
||||||
|
+ if(audio_is_output_devices(type))
|
||||||
|
+ status = deserializeCollection<AudioProfileTraits>(cur, &profiles, (PtrSerializingCtx)1);
|
||||||
|
+ else
|
||||||
|
+ status = deserializeCollection<AudioProfileTraits>(cur, &profiles, NULL);
|
||||||
|
if (status != NO_ERROR) {
|
||||||
|
return Status::fromStatusT(status);
|
||||||
|
}
|
||||||
|
@@ -782,6 +795,14 @@ Return<ModuleTraits::Element> ModuleTraits::deserialize(const xmlNode *cur, PtrS
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ if(fixedEarpieceChannels) {
|
||||||
|
+ sp<DeviceDescriptor> device =
|
||||||
|
+ module->getDeclaredDevices().getDeviceFromTagName("Earpiece");
|
||||||
|
+ if(device != 0)
|
||||||
|
+ ctx->addDevice(device);
|
||||||
|
+ fixedEarpieceChannels = false;
|
||||||
|
+ }
|
||||||
|
return module;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,32 @@
|
|||||||
|
From 4b6dc11462996df5987ac339bf2fb750f500a067 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Sat, 12 Sep 2020 12:32:50 +0200
|
||||||
|
Subject: [PATCH 13/14] [audiopolicy] No longer make re-assigning legacy audio
|
||||||
|
groups fatal. Mi9 declares AUDIO_STREAM_PATCH and AUDIO_STREAM_REROUTING
|
||||||
|
which is defined by framework too
|
||||||
|
|
||||||
|
Change-Id: I794fe22d63a8af705be4f5f09b9879ecaab3eae5
|
||||||
|
---
|
||||||
|
services/audiopolicy/engine/common/src/EngineBase.cpp | 6 +++---
|
||||||
|
1 file changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/audiopolicy/engine/common/src/EngineBase.cpp b/services/audiopolicy/engine/common/src/EngineBase.cpp
|
||||||
|
index 1bc7fe3dcc..fe18d0d794 100644
|
||||||
|
--- a/services/audiopolicy/engine/common/src/EngineBase.cpp
|
||||||
|
+++ b/services/audiopolicy/engine/common/src/EngineBase.cpp
|
||||||
|
@@ -206,9 +206,9 @@ engineConfig::ParsingResult EngineBase::loadAudioPolicyEngineConfig()
|
||||||
|
}
|
||||||
|
if (group.stream != AUDIO_STREAM_DEFAULT) {
|
||||||
|
// A legacy stream can be assigned once to a volume group
|
||||||
|
- LOG_ALWAYS_FATAL_IF(checkStreamForGroups(group.stream, mVolumeGroups),
|
||||||
|
- "stream %s already assigned to a volume group, "
|
||||||
|
- "review the configuration", toString(group.stream).c_str());
|
||||||
|
+ if(checkStreamForGroups(group.stream, mVolumeGroups)) {
|
||||||
|
+ ALOGE("stream %s already assigned to a volume group, review the configuration", toString(group.stream).c_str());
|
||||||
|
+ }
|
||||||
|
volumeGroup->addSupportedStream(group.stream);
|
||||||
|
}
|
||||||
|
addSupportedAttributesToGroup(group, volumeGroup, strategy);
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,341 @@
|
|||||||
|
From d24b9bfa7113578d6a9e7a98a01e0ef6dfb970ea Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Mon, 25 May 2020 21:26:54 +0200
|
||||||
|
Subject: [PATCH 14/14] Add persist.sys.phh.disable_a2dp_offload property to
|
||||||
|
force a2dp offload
|
||||||
|
|
||||||
|
Change-Id: Id474540c33c594cc4010a1a398d82bff8aadaeea
|
||||||
|
---
|
||||||
|
media/libstagefright/ACodec.cpp | 20 +-
|
||||||
|
.../managerdefinitions/src/Serializer.cpp | 181 +++++++++++++++++-
|
||||||
|
.../audiopolicy/enginedefault/src/Engine.cpp | 2 +-
|
||||||
|
.../managerdefault/AudioPolicyManager.cpp | 3 +
|
||||||
|
4 files changed, 199 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp
|
||||||
|
index e25f8f6558..7ff3c8f61b 100644
|
||||||
|
--- a/media/libstagefright/ACodec.cpp
|
||||||
|
+++ b/media/libstagefright/ACodec.cpp
|
||||||
|
@@ -1166,6 +1166,9 @@ status_t ACodec::configureOutputBuffersFromNativeWindow(
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
|
||||||
|
+ ALOGE("Window undequeued buffers is %d\n", *minUndequeuedBuffers);
|
||||||
|
+ ALOGE("Consumerrequested %d\n", def.nBufferCountMin);
|
||||||
|
+
|
||||||
|
// FIXME: assume that surface is controlled by app (native window
|
||||||
|
// returns the number for the case when surface is not controlled by app)
|
||||||
|
// FIXME2: This means that minUndeqeueudBufs can be 1 larger than reported
|
||||||
|
@@ -1178,22 +1181,29 @@ status_t ACodec::configureOutputBuffersFromNativeWindow(
|
||||||
|
// 2. try to allocate two (2) additional buffers to reduce starvation from
|
||||||
|
// the consumer
|
||||||
|
// plus an extra buffer to account for incorrect minUndequeuedBufs
|
||||||
|
- for (OMX_U32 extraBuffers = 2 + 1; /* condition inside loop */; extraBuffers--) {
|
||||||
|
- OMX_U32 newBufferCount =
|
||||||
|
- def.nBufferCountMin + *minUndequeuedBuffers + extraBuffers;
|
||||||
|
+ for (int extraBuffers = 2 + 1; /* condition inside loop */; extraBuffers--) {
|
||||||
|
+ int a = def.nBufferCountMin;
|
||||||
|
+ int b = *minUndequeuedBuffers;
|
||||||
|
+ int c = extraBuffers;
|
||||||
|
+ int newBufferCount = a+b+c;
|
||||||
|
def.nBufferCountActual = newBufferCount;
|
||||||
|
err = mOMXNode->setParameter(
|
||||||
|
OMX_IndexParamPortDefinition, &def, sizeof(def));
|
||||||
|
|
||||||
|
if (err == OK) {
|
||||||
|
- *minUndequeuedBuffers += extraBuffers;
|
||||||
|
+ ALOGE("Managed to allocate %d buffers (%d extra)\n", newBufferCount, extraBuffers);
|
||||||
|
+ if(extraBuffers > 0) {
|
||||||
|
+ *minUndequeuedBuffers += extraBuffers;
|
||||||
|
+ } else {
|
||||||
|
+ *minUndequeuedBuffers -= -extraBuffers;
|
||||||
|
+ }
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
ALOGW("[%s] setting nBufferCountActual to %u failed: %d",
|
||||||
|
mComponentName.c_str(), newBufferCount, err);
|
||||||
|
/* exit condition */
|
||||||
|
- if (extraBuffers == 0) {
|
||||||
|
+ if (extraBuffers == -2 || newBufferCount == 1) {
|
||||||
|
return err;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
index a8eb142c81..73e4a3e096 100644
|
||||||
|
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
@@ -29,6 +29,7 @@
|
||||||
|
#include <utils/StrongPointer.h>
|
||||||
|
#include <utils/Errors.h>
|
||||||
|
#include <utils/RefBase.h>
|
||||||
|
+#include <cutils/properties.h>
|
||||||
|
#include "Serializer.h"
|
||||||
|
#include "TypeConverter.h"
|
||||||
|
|
||||||
|
@@ -36,6 +37,8 @@ namespace android {
|
||||||
|
|
||||||
|
namespace {
|
||||||
|
|
||||||
|
+static bool forceDisableA2dpOffload = false;
|
||||||
|
+
|
||||||
|
// TODO(mnaganov): Consider finding an alternative for using HIDL code.
|
||||||
|
using hardware::Return;
|
||||||
|
using hardware::Status;
|
||||||
|
@@ -318,7 +321,7 @@ status_t deserializeCollection(const xmlNode *cur,
|
||||||
|
return status;
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
- return BAD_VALUE;
|
||||||
|
+ ALOGE("Ignoring...");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -734,12 +737,34 @@ Return<ModuleTraits::Element> ModuleTraits::deserialize(const xmlNode *cur, PtrS
|
||||||
|
|
||||||
|
Element module = new HwModule(name.c_str(), versionMajor, versionMinor);
|
||||||
|
|
||||||
|
+ bool isA2dpModule = strcmp(name.c_str(), "a2dp") == 0;
|
||||||
|
+ bool isPrimaryModule = strcmp(name.c_str(), "primary") == 0;
|
||||||
|
+
|
||||||
|
// Deserialize childrens: Audio Mix Port, Audio Device Ports (Source/Sink), Audio Routes
|
||||||
|
MixPortTraits::Collection mixPorts;
|
||||||
|
status_t status = deserializeCollection<MixPortTraits>(cur, &mixPorts, NULL);
|
||||||
|
if (status != NO_ERROR) {
|
||||||
|
return Status::fromStatusT(status);
|
||||||
|
}
|
||||||
|
+ if(forceDisableA2dpOffload && isA2dpModule) {
|
||||||
|
+ for(const auto& mixPort: mixPorts) {
|
||||||
|
+ ALOGE("Disable a2dp offload...? %s", mixPort->getTagName().c_str());
|
||||||
|
+ //"a2dp" sw module already has a2dp out
|
||||||
|
+ if(mixPort->getTagName() == "a2dp output") {
|
||||||
|
+ forceDisableA2dpOffload = false;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ if(forceDisableA2dpOffload && isA2dpModule) {
|
||||||
|
+ //Add
|
||||||
|
+ //<mixPort name="a2dp output" role="source"/>
|
||||||
|
+ auto mixPort = new IOProfile("a2dp output", AUDIO_PORT_ROLE_SOURCE);
|
||||||
|
+ AudioProfileTraits::Collection profiles;
|
||||||
|
+ profiles.add(AudioProfile::createFullDynamic());
|
||||||
|
+ mixPort->setAudioProfiles(profiles);
|
||||||
|
+ mixPorts.push_back(mixPort);
|
||||||
|
+ }
|
||||||
|
module->setProfiles(mixPorts);
|
||||||
|
|
||||||
|
DevicePortTraits::Collection devicePorts;
|
||||||
|
@@ -747,6 +772,90 @@ Return<ModuleTraits::Element> ModuleTraits::deserialize(const xmlNode *cur, PtrS
|
||||||
|
if (status != NO_ERROR) {
|
||||||
|
return Status::fromStatusT(status);
|
||||||
|
}
|
||||||
|
+ Vector<std::string> a2dpOuts;
|
||||||
|
+ a2dpOuts.push_back("BT A2DP Out");
|
||||||
|
+ a2dpOuts.push_back("BT A2DP Headphones");
|
||||||
|
+ a2dpOuts.push_back("BT A2DP Speaker");
|
||||||
|
+ if(forceDisableA2dpOffload) {
|
||||||
|
+ if(isA2dpModule) {
|
||||||
|
+ //<devicePort tagName="BT A2DP Out" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP" role="sink" address="lhdc_a2dp">
|
||||||
|
+ // <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
+ // samplingRates="44100,48000,96000"
|
||||||
|
+ // channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
+ //</devicePort>
|
||||||
|
+ if(true) {
|
||||||
|
+ FormatVector formats;
|
||||||
|
+ //auto devicePortOut = new DeviceDescriptor(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP, formats, "BT A2DP Out");
|
||||||
|
+ auto devicePortOut = new DeviceDescriptor(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP, "BT A2DP Out");
|
||||||
|
+ AudioProfileTraits::Collection profiles;
|
||||||
|
+ ChannelTraits::Collection channels;
|
||||||
|
+ channels.insert(AUDIO_CHANNEL_OUT_STEREO);
|
||||||
|
+ SampleRateSet sampleRates;
|
||||||
|
+ sampleRates.insert(44100);
|
||||||
|
+ sampleRates.insert(48000);
|
||||||
|
+ sampleRates.insert(96000);
|
||||||
|
+ auto profile = new AudioProfile(AUDIO_FORMAT_PCM_16_BIT, channels, sampleRates);
|
||||||
|
+ profiles.add(profile);
|
||||||
|
+ devicePortOut->setAudioProfiles(profiles);
|
||||||
|
+ devicePortOut->setAddress("lhdc_a2dp");
|
||||||
|
+ devicePorts.add(devicePortOut);
|
||||||
|
+ }
|
||||||
|
+ //<devicePort tagName="BT A2DP Headphones" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES" role="sink" address="lhdc_a2dp">
|
||||||
|
+ // <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
+ // samplingRates="44100,48000,96000"
|
||||||
|
+ // channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
+ //</devicePort>
|
||||||
|
+ if(true) {
|
||||||
|
+ FormatVector formats;
|
||||||
|
+ auto devicePortOut = new DeviceDescriptor(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_HEADPHONES, "BT A2DP Headphones");
|
||||||
|
+ AudioProfileTraits::Collection profiles;
|
||||||
|
+ ChannelTraits::Collection channels;
|
||||||
|
+ channels.insert(AUDIO_CHANNEL_OUT_STEREO);
|
||||||
|
+ SampleRateSet sampleRates;
|
||||||
|
+ sampleRates.insert(44100);
|
||||||
|
+ sampleRates.insert(48000);
|
||||||
|
+ sampleRates.insert(96000);
|
||||||
|
+ auto profile = new AudioProfile(AUDIO_FORMAT_PCM_16_BIT, channels, sampleRates);
|
||||||
|
+ profiles.add(profile);
|
||||||
|
+ devicePortOut->setAudioProfiles(profiles);
|
||||||
|
+ devicePortOut->setAddress("lhdc_a2dp");
|
||||||
|
+ devicePorts.add(devicePortOut);
|
||||||
|
+ }
|
||||||
|
+ //<devicePort tagName="BT A2DP Speaker" type="AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER" role="sink" address="lhdc_a2dp">
|
||||||
|
+ // <profile name="" format="AUDIO_FORMAT_PCM_16_BIT"
|
||||||
|
+ // samplingRates="44100,48000,96000"
|
||||||
|
+ // channelMasks="AUDIO_CHANNEL_OUT_STEREO"/>
|
||||||
|
+ //</devicePort>
|
||||||
|
+ if(true) {
|
||||||
|
+ FormatVector formats;
|
||||||
|
+ auto devicePortOut = new DeviceDescriptor(AUDIO_DEVICE_OUT_BLUETOOTH_A2DP_SPEAKER, "BT A2DP Speaker");
|
||||||
|
+ AudioProfileTraits::Collection profiles;
|
||||||
|
+ ChannelTraits::Collection channels;
|
||||||
|
+ channels.insert(AUDIO_CHANNEL_OUT_STEREO);
|
||||||
|
+ SampleRateSet sampleRates;
|
||||||
|
+ sampleRates.insert(44100);
|
||||||
|
+ sampleRates.insert(48000);
|
||||||
|
+ sampleRates.insert(96000);
|
||||||
|
+ auto profile = new AudioProfile(AUDIO_FORMAT_PCM_16_BIT, channels, sampleRates);
|
||||||
|
+ profiles.add(profile);
|
||||||
|
+ devicePortOut->setAudioProfiles(profiles);
|
||||||
|
+ devicePortOut->setAddress("lhdc_a2dp");
|
||||||
|
+ devicePorts.add(devicePortOut);
|
||||||
|
+
|
||||||
|
+ }
|
||||||
|
+ } else if(isPrimaryModule) {
|
||||||
|
+ for(const auto& out: a2dpOuts) {
|
||||||
|
+ auto iterA = std::find_if(devicePorts.begin(), devicePorts.end(), [out](const auto port) {
|
||||||
|
+ if(port->getTagName() == out) return true;
|
||||||
|
+ return false;
|
||||||
|
+ });
|
||||||
|
+ if(iterA != devicePorts.end()) {
|
||||||
|
+ ALOGE("Erasing device port %s", (*iterA)->getTagName().c_str());
|
||||||
|
+ devicePorts.erase(iterA);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
module->setDeclaredDevices(devicePorts);
|
||||||
|
|
||||||
|
RouteTraits::Collection routes;
|
||||||
|
@@ -754,7 +863,76 @@ Return<ModuleTraits::Element> ModuleTraits::deserialize(const xmlNode *cur, PtrS
|
||||||
|
if (status != NO_ERROR) {
|
||||||
|
return Status::fromStatusT(status);
|
||||||
|
}
|
||||||
|
+ if(forceDisableA2dpOffload) {
|
||||||
|
+ if(strcmp(name.c_str(), "primary") == 0) {
|
||||||
|
+ for(const auto& out: a2dpOuts) {
|
||||||
|
+ auto iterA = std::find_if(routes.begin(), routes.end(), [out](const auto route) {
|
||||||
|
+ if(route->getType() != AUDIO_ROUTE_MIX)
|
||||||
|
+ return false;
|
||||||
|
+ auto sink = route->getSink();
|
||||||
|
+ if(sink->getTagName() == out) {
|
||||||
|
+ return true;
|
||||||
|
+ }
|
||||||
|
+ return false;
|
||||||
|
+ });
|
||||||
|
+ if(iterA != routes.end()) {
|
||||||
|
+ auto sink = (*iterA)->getSink()->getTagName();
|
||||||
|
+ ALOGE("Erasing route %s", sink.c_str());
|
||||||
|
+ routes.erase(iterA);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ } else if(isA2dpModule) {
|
||||||
|
+ //<route type="mix" sink="BT A2DP Out"
|
||||||
|
+ // sources="a2dp output"/>
|
||||||
|
+ if(true) {
|
||||||
|
+ auto newRoute = new AudioRoute(AUDIO_ROUTE_MIX);
|
||||||
|
+ auto sink = module->findPortByTagName("BT A2DP Out");
|
||||||
|
+ auto source = module->findPortByTagName("a2dp output");
|
||||||
|
+ newRoute->setSink(sink);
|
||||||
|
+ Vector<sp<PolicyAudioPort>> sources;
|
||||||
|
+ sources.add(source);
|
||||||
|
+
|
||||||
|
+ sink->addRoute(newRoute);
|
||||||
|
+ source->addRoute(newRoute);
|
||||||
|
+ newRoute->setSources(sources);
|
||||||
|
+
|
||||||
|
+ routes.add(newRoute);
|
||||||
|
+ }
|
||||||
|
+ //<route type="mix" sink="BT A2DP Headphones"
|
||||||
|
+ // sources="a2dp output"/>
|
||||||
|
+ if(true) {
|
||||||
|
+ auto newRoute = new AudioRoute(AUDIO_ROUTE_MIX);
|
||||||
|
+ auto sink = module->findPortByTagName("BT A2DP Headphones");
|
||||||
|
+ auto source = module->findPortByTagName("a2dp output");
|
||||||
|
+ newRoute->setSink(sink);
|
||||||
|
+ Vector<sp<PolicyAudioPort>> sources;
|
||||||
|
+ sources.add(source);
|
||||||
|
+
|
||||||
|
+ sink->addRoute(newRoute);
|
||||||
|
+ source->addRoute(newRoute);
|
||||||
|
+ newRoute->setSources(sources);
|
||||||
|
+ routes.add(newRoute);
|
||||||
|
+ }
|
||||||
|
+ //<route type="mix" sink="BT A2DP Speaker"
|
||||||
|
+ // sources="a2dp output"/>
|
||||||
|
+ if(true) {
|
||||||
|
+ auto newRoute = new AudioRoute(AUDIO_ROUTE_MIX);
|
||||||
|
+ auto sink = module->findPortByTagName("BT A2DP Speaker");
|
||||||
|
+ auto source = module->findPortByTagName("a2dp output");
|
||||||
|
+ newRoute->setSink(sink);
|
||||||
|
+ Vector<sp<PolicyAudioPort>> sources;
|
||||||
|
+ sources.add(source);
|
||||||
|
+
|
||||||
|
+ sink->addRoute(newRoute);
|
||||||
|
+ source->addRoute(newRoute);
|
||||||
|
+ newRoute->setSources(sources);
|
||||||
|
+ routes.add(newRoute);
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ }
|
||||||
|
+ ALOGE("Good morning");
|
||||||
|
fixupQualcommBtScoRoute(routes, devicePorts, module.get());
|
||||||
|
+ ALOGE("Good morning2");
|
||||||
|
module->setRoutes(routes);
|
||||||
|
|
||||||
|
for (const xmlNode *children = cur->xmlChildrenNode; children != NULL;
|
||||||
|
@@ -932,6 +1110,7 @@ status_t PolicySerializer::deserialize(const char *configFile, AudioPolicyConfig
|
||||||
|
status_t deserializeAudioPolicyFile(const char *fileName, AudioPolicyConfig *config)
|
||||||
|
{
|
||||||
|
PolicySerializer serializer;
|
||||||
|
+ forceDisableA2dpOffload = property_get_bool("persist.sys.phh.disable_a2dp_offload", false);
|
||||||
|
return serializer.deserialize(fileName, config);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/services/audiopolicy/enginedefault/src/Engine.cpp b/services/audiopolicy/enginedefault/src/Engine.cpp
|
||||||
|
index b14d2bbb0b..16a7a4bbac 100755
|
||||||
|
--- a/services/audiopolicy/enginedefault/src/Engine.cpp
|
||||||
|
+++ b/services/audiopolicy/enginedefault/src/Engine.cpp
|
||||||
|
@@ -52,7 +52,7 @@ static const std::vector<legacy_strategy_map>& getLegacyStrategy() {
|
||||||
|
{ "STRATEGY_ENFORCED_AUDIBLE", STRATEGY_ENFORCED_AUDIBLE },
|
||||||
|
{ "STRATEGY_TRANSMITTED_THROUGH_SPEAKER", STRATEGY_TRANSMITTED_THROUGH_SPEAKER },
|
||||||
|
{ "STRATEGY_ACCESSIBILITY", STRATEGY_ACCESSIBILITY },
|
||||||
|
- { "STRATEGY_REROUTING", STRATEGY_REROUTING },
|
||||||
|
+ //{ "STRATEGY_REROUTING", STRATEGY_REROUTING },
|
||||||
|
{ "STRATEGY_PATCH", STRATEGY_REROUTING }, // boiler to manage stream patch volume
|
||||||
|
{ "STRATEGY_CALL_ASSISTANT", STRATEGY_CALL_ASSISTANT },
|
||||||
|
};
|
||||||
|
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
|
||||||
|
index c5c13e9a5a..1c5ed86b86 100644
|
||||||
|
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
|
||||||
|
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
|
||||||
|
@@ -93,6 +93,8 @@ bool operator!= (const SortedVector<T> &left, const SortedVector<T> &right)
|
||||||
|
return !(left == right);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static bool forceDisableA2dpOffload = false;
|
||||||
|
+
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
// AudioPolicyInterface implementation
|
||||||
|
// ----------------------------------------------------------------------------
|
||||||
|
@@ -4458,6 +4460,7 @@ static status_t deserializeAudioPolicyXmlConfig(AudioPolicyConfig &config) {
|
||||||
|
} else if (property_get_bool("persist.bluetooth.bluetooth_audio_hal.disabled", false)) {
|
||||||
|
fileNames.push_back(AUDIO_POLICY_BLUETOOTH_LEGACY_HAL_XML_CONFIG_FILE_NAME);
|
||||||
|
}
|
||||||
|
+ forceDisableA2dpOffload = property_get_bool("persist.sys.phh.disable_a2dp_offload", false);
|
||||||
|
fileNames.push_back(AUDIO_POLICY_XML_CONFIG_FILE_NAME);
|
||||||
|
|
||||||
|
for (const char* fileName : fileNames) {
|
||||||
|
--
|
||||||
|
2.17.1
|
||||||
|
|
@ -0,0 +1,40 @@
|
|||||||
|
From 3c374cb65bd0e28c73fbd452e8201487dd1acb94 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Tue, 3 Dec 2019 14:04:17 +0100
|
||||||
|
Subject: [PATCH 15/15] Fix for some Huawei camera
|
||||||
|
|
||||||
|
---
|
||||||
|
services/camera/libcameraservice/CameraService.cpp | 9 +++++----
|
||||||
|
1 file changed, 5 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/camera/libcameraservice/CameraService.cpp b/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
index 5d062a5fb3..97e9825c51 100644
|
||||||
|
--- a/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
+++ b/services/camera/libcameraservice/CameraService.cpp
|
||||||
|
@@ -16,7 +16,7 @@
|
||||||
|
|
||||||
|
#define LOG_TAG "CameraService"
|
||||||
|
#define ATRACE_TAG ATRACE_TAG_CAMERA
|
||||||
|
-//#define LOG_NDEBUG 0
|
||||||
|
+#define LOG_NDEBUG 0
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <climits>
|
||||||
|
@@ -235,10 +235,11 @@ status_t CameraService::enumerateProviders() {
|
||||||
|
if (!cameraFound) {
|
||||||
|
addStates(id8);
|
||||||
|
}
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (getCameraState(id8) == nullptr) {
|
||||||
|
onDeviceStatusChanged(id8, CameraDeviceStatus::PRESENT);
|
||||||
|
+ } else {
|
||||||
|
+ if (getCameraState(id8) == nullptr) {
|
||||||
|
+ onDeviceStatusChanged(id8, CameraDeviceStatus::PRESENT);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
From 6a6c54584fae07783b493a56afd047984f589ed0 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Mon, 21 Dec 2020 20:19:11 +0100
|
||||||
|
Subject: [PATCH 16/16] Make camera IDs filter-out optional
|
||||||
|
|
||||||
|
Nowadays most people have Camera 2 apps, and would like to have all
|
||||||
|
cameras, rather than limit which cameras are available.
|
||||||
|
Add a property for that.
|
||||||
|
---
|
||||||
|
.../camera/libcameraservice/common/CameraProviderManager.cpp | 4 +++-
|
||||||
|
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp
|
||||||
|
index 0bff3606df..3e6ad1ef52 100644
|
||||||
|
--- a/services/camera/libcameraservice/common/CameraProviderManager.cpp
|
||||||
|
+++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp
|
||||||
|
@@ -183,7 +183,9 @@ std::vector<std::string> CameraProviderManager::getAPI1CompatibleCameraDeviceIds
|
||||||
|
// API1 app doesn't handle logical and physical camera devices well. So
|
||||||
|
// for each camera facing, only take the first id advertised by HAL in
|
||||||
|
// all [logical, physical1, physical2, ...] id combos, and filter out the rest.
|
||||||
|
- filterLogicalCameraIdsLocked(providerDeviceIds);
|
||||||
|
+ if(!property_get_bool("persist.sys.phh.include_all_cameras", false)) {
|
||||||
|
+ filterLogicalCameraIdsLocked(providerDeviceIds);
|
||||||
|
+ }
|
||||||
|
collectDeviceIdsLocked(providerDeviceIds, publicDeviceIds, systemDeviceIds);
|
||||||
|
}
|
||||||
|
auto sortFunc =
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,174 @@
|
|||||||
|
From a141c7102252377bc882b982b36980edb60f931e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Wonsik Kim <wonsik@google.com>
|
||||||
|
Date: Tue, 5 Jan 2021 18:58:15 -0800
|
||||||
|
Subject: [PATCH 19/30] CCodec: store flushed config as work items
|
||||||
|
|
||||||
|
Store flushed config as work items and queue them to the component
|
||||||
|
directly, instead of going through MediaCodecBuffer.
|
||||||
|
|
||||||
|
Bug: 176501678
|
||||||
|
Test: atest CtsMediaTestCases -- --module-arg CtsMediaTestCases:size:small
|
||||||
|
Test: atest CtsMediaTestCases:AdaptivePlaybackTest
|
||||||
|
Merged-In: I19991101c388eca49226ad2abc37df9cea22dbb8
|
||||||
|
Change-Id: I19991101c388eca49226ad2abc37df9cea22dbb8
|
||||||
|
(cherry picked from commit 5ebfcb24855e526ec040b9f41d216f7604b8981a)
|
||||||
|
---
|
||||||
|
media/codec2/sfplugin/CCodecBufferChannel.cpp | 119 ++++++++----------
|
||||||
|
media/codec2/sfplugin/CCodecBufferChannel.h | 2 +-
|
||||||
|
2 files changed, 53 insertions(+), 68 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/media/codec2/sfplugin/CCodecBufferChannel.cpp b/media/codec2/sfplugin/CCodecBufferChannel.cpp
|
||||||
|
index 1654b11c31..b8ca41b9a8 100644
|
||||||
|
--- a/media/codec2/sfplugin/CCodecBufferChannel.cpp
|
||||||
|
+++ b/media/codec2/sfplugin/CCodecBufferChannel.cpp
|
||||||
|
@@ -1300,54 +1300,30 @@ status_t CCodecBufferChannel::requestInitialInputBuffers() {
|
||||||
|
return a.capacity < b.capacity;
|
||||||
|
});
|
||||||
|
|
||||||
|
- {
|
||||||
|
- Mutexed<std::list<sp<ABuffer>>>::Locked configs(mFlushedConfigs);
|
||||||
|
- if (!configs->empty()) {
|
||||||
|
- while (!configs->empty()) {
|
||||||
|
- sp<ABuffer> config = configs->front();
|
||||||
|
- configs->pop_front();
|
||||||
|
- // Find the smallest input buffer that can fit the config.
|
||||||
|
- auto i = std::find_if(
|
||||||
|
- clientInputBuffers.begin(),
|
||||||
|
- clientInputBuffers.end(),
|
||||||
|
- [cfgSize = config->size()](const ClientInputBuffer& b) {
|
||||||
|
- return b.capacity >= cfgSize;
|
||||||
|
- });
|
||||||
|
- if (i == clientInputBuffers.end()) {
|
||||||
|
- ALOGW("[%s] no input buffer large enough for the config "
|
||||||
|
- "(%zu bytes)",
|
||||||
|
- mName, config->size());
|
||||||
|
- return NO_MEMORY;
|
||||||
|
- }
|
||||||
|
- sp<MediaCodecBuffer> buffer = i->buffer;
|
||||||
|
- memcpy(buffer->base(), config->data(), config->size());
|
||||||
|
- buffer->setRange(0, config->size());
|
||||||
|
- buffer->meta()->clear();
|
||||||
|
- buffer->meta()->setInt64("timeUs", 0);
|
||||||
|
- buffer->meta()->setInt32("csd", 1);
|
||||||
|
- if (queueInputBufferInternal(buffer) != OK) {
|
||||||
|
- ALOGW("[%s] Error while queueing a flushed config",
|
||||||
|
- mName);
|
||||||
|
- return UNKNOWN_ERROR;
|
||||||
|
- }
|
||||||
|
- clientInputBuffers.erase(i);
|
||||||
|
- }
|
||||||
|
- } else if (oStreamFormat.value == C2BufferData::LINEAR &&
|
||||||
|
- (!prepend || prepend.value == PREPEND_HEADER_TO_NONE)) {
|
||||||
|
- sp<MediaCodecBuffer> buffer = clientInputBuffers.front().buffer;
|
||||||
|
- // WORKAROUND: Some apps expect CSD available without queueing
|
||||||
|
- // any input. Queue an empty buffer to get the CSD.
|
||||||
|
- buffer->setRange(0, 0);
|
||||||
|
- buffer->meta()->clear();
|
||||||
|
- buffer->meta()->setInt64("timeUs", 0);
|
||||||
|
- if (queueInputBufferInternal(buffer) != OK) {
|
||||||
|
- ALOGW("[%s] Error while queueing an empty buffer to get CSD",
|
||||||
|
- mName);
|
||||||
|
- return UNKNOWN_ERROR;
|
||||||
|
- }
|
||||||
|
- clientInputBuffers.pop_front();
|
||||||
|
+ std::list<std::unique_ptr<C2Work>> flushedConfigs;
|
||||||
|
+ mFlushedConfigs.lock()->swap(flushedConfigs);
|
||||||
|
+ if (!flushedConfigs.empty()) {
|
||||||
|
+ err = mComponent->queue(&flushedConfigs);
|
||||||
|
+ if (err != C2_OK) {
|
||||||
|
+ ALOGW("[%s] Error while queueing a flushed config", mName);
|
||||||
|
+ return UNKNOWN_ERROR;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ if (oStreamFormat.value == C2BufferData::LINEAR &&
|
||||||
|
+ (!prepend || prepend.value == PREPEND_HEADER_TO_NONE)) {
|
||||||
|
+ sp<MediaCodecBuffer> buffer = clientInputBuffers.front().buffer;
|
||||||
|
+ // WORKAROUND: Some apps expect CSD available without queueing
|
||||||
|
+ // any input. Queue an empty buffer to get the CSD.
|
||||||
|
+ buffer->setRange(0, 0);
|
||||||
|
+ buffer->meta()->clear();
|
||||||
|
+ buffer->meta()->setInt64("timeUs", 0);
|
||||||
|
+ if (queueInputBufferInternal(buffer) != OK) {
|
||||||
|
+ ALOGW("[%s] Error while queueing an empty buffer to get CSD",
|
||||||
|
+ mName);
|
||||||
|
+ return UNKNOWN_ERROR;
|
||||||
|
+ }
|
||||||
|
+ clientInputBuffers.pop_front();
|
||||||
|
+ }
|
||||||
|
|
||||||
|
for (const ClientInputBuffer& clientInputBuffer: clientInputBuffers) {
|
||||||
|
mCallback->onInputBufferAvailable(
|
||||||
|
@@ -1396,27 +1372,36 @@ void CCodecBufferChannel::release() {
|
||||||
|
|
||||||
|
void CCodecBufferChannel::flush(const std::list<std::unique_ptr<C2Work>> &flushedWork) {
|
||||||
|
ALOGV("[%s] flush", mName);
|
||||||
|
- {
|
||||||
|
- Mutexed<std::list<sp<ABuffer>>>::Locked configs(mFlushedConfigs);
|
||||||
|
- for (const std::unique_ptr<C2Work> &work : flushedWork) {
|
||||||
|
- if (!(work->input.flags & C2FrameData::FLAG_CODEC_CONFIG)) {
|
||||||
|
- continue;
|
||||||
|
- }
|
||||||
|
- if (work->input.buffers.empty()
|
||||||
|
- || work->input.buffers.front()->data().linearBlocks().empty()) {
|
||||||
|
- ALOGD("[%s] no linear codec config data found", mName);
|
||||||
|
- continue;
|
||||||
|
- }
|
||||||
|
- C2ReadView view =
|
||||||
|
- work->input.buffers.front()->data().linearBlocks().front().map().get();
|
||||||
|
- if (view.error() != C2_OK) {
|
||||||
|
- ALOGD("[%s] failed to map flushed codec config data: %d", mName, view.error());
|
||||||
|
- continue;
|
||||||
|
- }
|
||||||
|
- configs->push_back(ABuffer::CreateAsCopy(view.data(), view.capacity()));
|
||||||
|
- ALOGV("[%s] stashed flushed codec config data (size=%u)", mName, view.capacity());
|
||||||
|
- }
|
||||||
|
- }
|
||||||
|
+ std::list<std::unique_ptr<C2Work>> configs;
|
||||||
|
+ for (const std::unique_ptr<C2Work> &work : flushedWork) {
|
||||||
|
+ if (!(work->input.flags & C2FrameData::FLAG_CODEC_CONFIG)) {
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ if (work->input.buffers.empty()
|
||||||
|
+ || work->input.buffers.front() == nullptr
|
||||||
|
+ || work->input.buffers.front()->data().linearBlocks().empty()) {
|
||||||
|
+ ALOGD("[%s] no linear codec config data found", mName);
|
||||||
|
+ continue;
|
||||||
|
+ }
|
||||||
|
+ std::unique_ptr<C2Work> copy(new C2Work);
|
||||||
|
+ copy->input.flags = C2FrameData::flags_t(work->input.flags | C2FrameData::FLAG_DROP_FRAME);
|
||||||
|
+ copy->input.ordinal = work->input.ordinal;
|
||||||
|
+ copy->input.buffers.insert(
|
||||||
|
+ copy->input.buffers.begin(),
|
||||||
|
+ work->input.buffers.begin(),
|
||||||
|
+ work->input.buffers.end());
|
||||||
|
+ for (const std::unique_ptr<C2Param> ¶m : work->input.configUpdate) {
|
||||||
|
+ copy->input.configUpdate.push_back(C2Param::Copy(*param));
|
||||||
|
+ }
|
||||||
|
+ copy->input.infoBuffers.insert(
|
||||||
|
+ copy->input.infoBuffers.begin(),
|
||||||
|
+ work->input.infoBuffers.begin(),
|
||||||
|
+ work->input.infoBuffers.end());
|
||||||
|
+ copy->worklets.emplace_back(new C2Worklet);
|
||||||
|
+ configs.push_back(std::move(copy));
|
||||||
|
+ ALOGV("[%s] stashed flushed codec config data", mName);
|
||||||
|
+ }
|
||||||
|
+ mFlushedConfigs.lock()->swap(configs);
|
||||||
|
{
|
||||||
|
Mutexed<Input>::Locked input(mInput);
|
||||||
|
input->buffers->flush();
|
||||||
|
diff --git a/media/codec2/sfplugin/CCodecBufferChannel.h b/media/codec2/sfplugin/CCodecBufferChannel.h
|
||||||
|
index 046c5c3c49..e2c9aaa287 100644
|
||||||
|
--- a/media/codec2/sfplugin/CCodecBufferChannel.h
|
||||||
|
+++ b/media/codec2/sfplugin/CCodecBufferChannel.h
|
||||||
|
@@ -277,7 +277,7 @@ private:
|
||||||
|
uint32_t outputDelay;
|
||||||
|
};
|
||||||
|
Mutexed<Output> mOutput;
|
||||||
|
- Mutexed<std::list<sp<ABuffer>>> mFlushedConfigs;
|
||||||
|
+ Mutexed<std::list<std::unique_ptr<C2Work>>> mFlushedConfigs;
|
||||||
|
|
||||||
|
std::atomic_uint64_t mFrameIndex;
|
||||||
|
std::atomic_uint64_t mFirstValidFrameIndex;
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,121 @@
|
|||||||
|
From bfa866666f0fb3e95755e5fb5d22a89c1fdd6767 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Stevens <stevensd@google.com>
|
||||||
|
Date: Tue, 20 Oct 2020 15:00:41 +0900
|
||||||
|
Subject: [PATCH 20/30] BufferPool: limit number of idle buffers in caches
|
||||||
|
|
||||||
|
Some systems have limits on the total number of graphics buffers that
|
||||||
|
can be allocated, not just the total size. When dealing with
|
||||||
|
particularly small buffers, the caches could end up retaining 1000s of
|
||||||
|
buffers. This change adds an additional eviction trigger based on the
|
||||||
|
number of idle cached buffers.
|
||||||
|
|
||||||
|
Bug: 170702290
|
||||||
|
Bug: 171553040
|
||||||
|
Test: android.video.cts.VideoEncoderDecoderTest on ARCVM
|
||||||
|
Change-Id: If3f4433ba1794ccb624b864a56619c8613a315f2
|
||||||
|
(cherry picked from commit 0f50e523ef1404f9afbaa7b919e2801e5d94012a)
|
||||||
|
Merged-In: If3f4433ba1794ccb624b864a56619c8613a315f2
|
||||||
|
---
|
||||||
|
media/bufferpool/2.0/AccessorImpl.cpp | 13 +++++++++----
|
||||||
|
media/bufferpool/2.0/AccessorImpl.h | 6 ++++++
|
||||||
|
media/bufferpool/2.0/BufferPoolClient.cpp | 12 ++++++++++--
|
||||||
|
3 files changed, 25 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/media/bufferpool/2.0/AccessorImpl.cpp b/media/bufferpool/2.0/AccessorImpl.cpp
|
||||||
|
index 6111feafb9..1d2562e41d 100644
|
||||||
|
--- a/media/bufferpool/2.0/AccessorImpl.cpp
|
||||||
|
+++ b/media/bufferpool/2.0/AccessorImpl.cpp
|
||||||
|
@@ -39,6 +39,8 @@ namespace {
|
||||||
|
|
||||||
|
static constexpr size_t kMinAllocBytesForEviction = 1024*1024*15;
|
||||||
|
static constexpr size_t kMinBufferCountForEviction = 25;
|
||||||
|
+ static constexpr size_t kMaxUnusedBufferCount = 64;
|
||||||
|
+ static constexpr size_t kUnusedBufferCountTarget = kMaxUnusedBufferCount - 16;
|
||||||
|
|
||||||
|
static constexpr nsecs_t kEvictGranularityNs = 1000000000; // 1 sec
|
||||||
|
static constexpr nsecs_t kEvictDurationNs = 5000000000; // 5 secs
|
||||||
|
@@ -724,9 +726,11 @@ ResultStatus Accessor::Impl::BufferPool::addNewBuffer(
|
||||||
|
}
|
||||||
|
|
||||||
|
void Accessor::Impl::BufferPool::cleanUp(bool clearCache) {
|
||||||
|
- if (clearCache || mTimestampUs > mLastCleanUpUs + kCleanUpDurationUs) {
|
||||||
|
+ if (clearCache || mTimestampUs > mLastCleanUpUs + kCleanUpDurationUs ||
|
||||||
|
+ mStats.buffersNotInUse() > kMaxUnusedBufferCount) {
|
||||||
|
mLastCleanUpUs = mTimestampUs;
|
||||||
|
- if (mTimestampUs > mLastLogUs + kLogDurationUs) {
|
||||||
|
+ if (mTimestampUs > mLastLogUs + kLogDurationUs ||
|
||||||
|
+ mStats.buffersNotInUse() > kMaxUnusedBufferCount) {
|
||||||
|
mLastLogUs = mTimestampUs;
|
||||||
|
ALOGD("bufferpool2 %p : %zu(%zu size) total buffers - "
|
||||||
|
"%zu(%zu size) used buffers - %zu/%zu (recycle/alloc) - "
|
||||||
|
@@ -737,8 +741,9 @@ void Accessor::Impl::BufferPool::cleanUp(bool clearCache) {
|
||||||
|
mStats.mTotalFetches, mStats.mTotalTransfers);
|
||||||
|
}
|
||||||
|
for (auto freeIt = mFreeBuffers.begin(); freeIt != mFreeBuffers.end();) {
|
||||||
|
- if (!clearCache && (mStats.mSizeCached < kMinAllocBytesForEviction
|
||||||
|
- || mBuffers.size() < kMinBufferCountForEviction)) {
|
||||||
|
+ if (!clearCache && mStats.buffersNotInUse() <= kUnusedBufferCountTarget &&
|
||||||
|
+ (mStats.mSizeCached < kMinAllocBytesForEviction ||
|
||||||
|
+ mBuffers.size() < kMinBufferCountForEviction)) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
auto it = mBuffers.find(*freeIt);
|
||||||
|
diff --git a/media/bufferpool/2.0/AccessorImpl.h b/media/bufferpool/2.0/AccessorImpl.h
|
||||||
|
index cd1b4d08c1..3d39941337 100644
|
||||||
|
--- a/media/bufferpool/2.0/AccessorImpl.h
|
||||||
|
+++ b/media/bufferpool/2.0/AccessorImpl.h
|
||||||
|
@@ -193,6 +193,12 @@ private:
|
||||||
|
: mSizeCached(0), mBuffersCached(0), mSizeInUse(0), mBuffersInUse(0),
|
||||||
|
mTotalAllocations(0), mTotalRecycles(0), mTotalTransfers(0), mTotalFetches(0) {}
|
||||||
|
|
||||||
|
+ /// # of currently unused buffers
|
||||||
|
+ size_t buffersNotInUse() const {
|
||||||
|
+ ALOG_ASSERT(mBuffersCached >= mBuffersInUse);
|
||||||
|
+ return mBuffersCached - mBuffersInUse;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
/// A new buffer is allocated on an allocation request.
|
||||||
|
void onBufferAllocated(size_t allocSize) {
|
||||||
|
mSizeCached += allocSize;
|
||||||
|
diff --git a/media/bufferpool/2.0/BufferPoolClient.cpp b/media/bufferpool/2.0/BufferPoolClient.cpp
|
||||||
|
index 342fef6b9d..9308b8159b 100644
|
||||||
|
--- a/media/bufferpool/2.0/BufferPoolClient.cpp
|
||||||
|
+++ b/media/bufferpool/2.0/BufferPoolClient.cpp
|
||||||
|
@@ -32,6 +32,8 @@ namespace implementation {
|
||||||
|
static constexpr int64_t kReceiveTimeoutUs = 1000000; // 100ms
|
||||||
|
static constexpr int kPostMaxRetry = 3;
|
||||||
|
static constexpr int kCacheTtlUs = 1000000; // TODO: tune
|
||||||
|
+static constexpr size_t kMaxCachedBufferCount = 64;
|
||||||
|
+static constexpr size_t kCachedBufferCountTarget = kMaxCachedBufferCount - 16;
|
||||||
|
|
||||||
|
class BufferPoolClient::Impl
|
||||||
|
: public std::enable_shared_from_this<BufferPoolClient::Impl> {
|
||||||
|
@@ -136,6 +138,10 @@ private:
|
||||||
|
--mActive;
|
||||||
|
mLastChangeUs = getTimestampNow();
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+ int cachedBufferCount() const {
|
||||||
|
+ return mBuffers.size() - mActive;
|
||||||
|
+ }
|
||||||
|
} mCache;
|
||||||
|
|
||||||
|
// FMQ - release notifier
|
||||||
|
@@ -668,10 +674,12 @@ bool BufferPoolClient::Impl::syncReleased(uint32_t messageId) {
|
||||||
|
// should have mCache.mLock
|
||||||
|
void BufferPoolClient::Impl::evictCaches(bool clearCache) {
|
||||||
|
int64_t now = getTimestampNow();
|
||||||
|
- if (now >= mLastEvictCacheUs + kCacheTtlUs || clearCache) {
|
||||||
|
+ if (now >= mLastEvictCacheUs + kCacheTtlUs ||
|
||||||
|
+ clearCache || mCache.cachedBufferCount() > kMaxCachedBufferCount) {
|
||||||
|
size_t evicted = 0;
|
||||||
|
for (auto it = mCache.mBuffers.begin(); it != mCache.mBuffers.end();) {
|
||||||
|
- if (!it->second->hasCache() && (it->second->expire() || clearCache)) {
|
||||||
|
+ if (!it->second->hasCache() && (it->second->expire() ||
|
||||||
|
+ clearCache || mCache.cachedBufferCount() > kCachedBufferCountTarget)) {
|
||||||
|
it = mCache.mBuffers.erase(it);
|
||||||
|
++evicted;
|
||||||
|
} else {
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,66 @@
|
|||||||
|
From ecab6fe48819adeafaceec1a33e7e1d380caec75 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Sat, 13 Mar 2021 14:20:03 -0500
|
||||||
|
Subject: [PATCH 33/38] Support Samsung R multi-cams
|
||||||
|
|
||||||
|
---
|
||||||
|
services/camera/libcameraservice/Android.bp | 1 +
|
||||||
|
.../libcameraservice/common/CameraProviderManager.cpp | 8 +++++++-
|
||||||
|
2 files changed, 8 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/services/camera/libcameraservice/Android.bp b/services/camera/libcameraservice/Android.bp
|
||||||
|
index be275e9346..bede98bfdc 100644
|
||||||
|
--- a/services/camera/libcameraservice/Android.bp
|
||||||
|
+++ b/services/camera/libcameraservice/Android.bp
|
||||||
|
@@ -129,6 +129,7 @@ cc_library_shared {
|
||||||
|
"android.hardware.camera.device@3.5",
|
||||||
|
"android.hardware.camera.device@3.6",
|
||||||
|
"vendor.samsung.hardware.camera.provider@3.0",
|
||||||
|
+ "vendor.samsung.hardware.camera.provider@4.0",
|
||||||
|
],
|
||||||
|
|
||||||
|
static_libs: [
|
||||||
|
diff --git a/services/camera/libcameraservice/common/CameraProviderManager.cpp b/services/camera/libcameraservice/common/CameraProviderManager.cpp
|
||||||
|
index 3e6ad1ef52..b7d1a57567 100644
|
||||||
|
--- a/services/camera/libcameraservice/common/CameraProviderManager.cpp
|
||||||
|
+++ b/services/camera/libcameraservice/common/CameraProviderManager.cpp
|
||||||
|
@@ -22,6 +22,7 @@
|
||||||
|
|
||||||
|
#include <android/hardware/camera/device/3.5/ICameraDevice.h>
|
||||||
|
#include <vendor/samsung/hardware/camera/provider/3.0/ISehCameraProvider.h>
|
||||||
|
+#include <vendor/samsung/hardware/camera/provider/4.0/ISehCameraProvider.h>
|
||||||
|
|
||||||
|
#include <algorithm>
|
||||||
|
#include <chrono>
|
||||||
|
@@ -1363,7 +1364,9 @@ status_t CameraProviderManager::ProviderInfo::initialize(
|
||||||
|
}
|
||||||
|
|
||||||
|
auto samsungCast = vendor::samsung::hardware::camera::provider::V3_0::ISehCameraProvider::castFrom(interface);
|
||||||
|
+ auto samsung40Cast = vendor::samsung::hardware::camera::provider::V4_0::ISehCameraProvider::castFrom(interface);
|
||||||
|
auto samsungProvider = samsungCast.isOk() ? static_cast<sp<vendor::samsung::hardware::camera::provider::V3_0::ISehCameraProvider>>(samsungCast) : nullptr;
|
||||||
|
+ auto samsung40Provider = samsung40Cast.isOk() ? static_cast<sp<vendor::samsung::hardware::camera::provider::V4_0::ISehCameraProvider>>(samsung40Cast) : nullptr;
|
||||||
|
|
||||||
|
hardware::Return<bool> linked = interface->linkToDeath(this, /*cookie*/ mId);
|
||||||
|
if (!linked.isOk()) {
|
||||||
|
@@ -1401,6 +1404,7 @@ status_t CameraProviderManager::ProviderInfo::initialize(
|
||||||
|
status = idStatus;
|
||||||
|
if (status == Status::OK) {
|
||||||
|
for (auto& name : cameraDeviceNames) {
|
||||||
|
+ ALOGE("Listing camera ID %s", name.c_str());
|
||||||
|
uint16_t major, minor;
|
||||||
|
std::string type, id;
|
||||||
|
status_t res = parseDeviceName(name, &major, &minor, &type, &id);
|
||||||
|
@@ -1414,7 +1418,9 @@ status_t CameraProviderManager::ProviderInfo::initialize(
|
||||||
|
}
|
||||||
|
} };
|
||||||
|
hardware::Return<void> ret;
|
||||||
|
- if(samsungProvider != nullptr && property_get_bool("persist.sys.phh.samsung.camera_ids", false))
|
||||||
|
+ if(samsung40Provider != nullptr && property_get_bool("persist.sys.phh.samsung.camera_ids", false))
|
||||||
|
+ ret = samsung40Provider->sehGetCameraIdList(cb);
|
||||||
|
+ else if(samsungProvider != nullptr && property_get_bool("persist.sys.phh.samsung.camera_ids", false))
|
||||||
|
ret = samsungProvider->sehGetCameraIdList(cb);
|
||||||
|
else
|
||||||
|
ret = interface->getCameraIdList(cb);
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
From 347755b3b0d26b557ac0775433ccdbabe23ac6ed Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Tue, 23 Mar 2021 00:16:42 +0100
|
||||||
|
Subject: [PATCH 34/38] [audiopolicy] Don't crash on unknown audio devices
|
||||||
|
|
||||||
|
---
|
||||||
|
.../common/managerdefinitions/src/Serializer.cpp | 7 ++++++-
|
||||||
|
1 file changed, 6 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
index 73e4a3e096..1f200ad850 100644
|
||||||
|
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
@@ -951,7 +951,12 @@ Return<ModuleTraits::Element> ModuleTraits::deserialize(const xmlNode *cur, PtrS
|
||||||
|
sp<DeviceDescriptor> device = module->getDeclaredDevices().
|
||||||
|
getDeviceFromTagName(std::string(reinterpret_cast<const char*>(
|
||||||
|
attachedDevice.get())));
|
||||||
|
- ctx->addDevice(device);
|
||||||
|
+ if(device != nullptr) {
|
||||||
|
+ ctx->addDevice(device);
|
||||||
|
+ } else {
|
||||||
|
+ ALOGE("NULL DEVICE %s: %s %s=%s", __func__, tag, childAttachedDeviceTag,
|
||||||
|
+ reinterpret_cast<const char*>(attachedDevice.get()));
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,99 @@
|
|||||||
|
From 0b8723c62a0d5b63f8afd46fddc3c38123b49d04 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Peter Cai <peter@typeblog.net>
|
||||||
|
Date: Sun, 28 Mar 2021 16:17:36 +0800
|
||||||
|
Subject: [PATCH 35/38] AudioPolicyManager: retry with SW bridge if hardware
|
||||||
|
audio patch fails
|
||||||
|
|
||||||
|
* On two of my MT6771 Q vendor devices, in-call audio is broken due to
|
||||||
|
the audio HAL claiming to support HW audio patch between the Rx / Tx
|
||||||
|
devices but failing when called with `createAudioPatch`.
|
||||||
|
|
||||||
|
> 03-28 11:56:42.300 1345 1345 W AudioALSAHardware: sinks[0].type ==
|
||||||
|
AUDIO_PORT_TYPE_DEVICE
|
||||||
|
> 03-28 11:56:42.300 1345 1345 W AudioALSAHardware: [createAudioPatch]
|
||||||
|
[5082]
|
||||||
|
> 03-28 11:56:42.300 1345 1345 E AudioALSAHardware: Fail status -38
|
||||||
|
> 03-28 11:56:42.300 1345 1345 W DeviceHAL: Error from HAL Device in
|
||||||
|
function create_audio_patch: Function not implemented
|
||||||
|
> 03-28 11:56:42.301 1358 1374 W APM_AudioPolicyManager:
|
||||||
|
createAudioPatchInternal patch panel could not connect device patch,
|
||||||
|
error -38
|
||||||
|
> 03-28 11:56:42.301 1358 1374 W APM_AudioPolicyManager:
|
||||||
|
createTelephonyPatch() error -38 creating RX audio patch
|
||||||
|
|
||||||
|
* This was not broken on Q because
|
||||||
|
`AudioPolicyManager::updateCallRouting` bypasses `createAudioPatch` by
|
||||||
|
directly calling the legacy `setOutputDevice` when `supportsPatch` is
|
||||||
|
true, i.e. `createAudioPatch` was *only* used for SW bridge for
|
||||||
|
in-call audio before R.
|
||||||
|
|
||||||
|
* As a workaround, re-try by forcing the creation of a SW bridge after
|
||||||
|
`createAudioPatch` fails. We could also restore the old behavior of
|
||||||
|
`updateCallRouting`, but that would probably break in-call audio on
|
||||||
|
newer HALs that may or may not work properly with `setOutputDevice`.
|
||||||
|
---
|
||||||
|
.../managerdefault/AudioPolicyManager.cpp | 13 ++++++++++---
|
||||||
|
.../audiopolicy/managerdefault/AudioPolicyManager.h | 4 +++-
|
||||||
|
2 files changed, 13 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
|
||||||
|
index 63dcd538b1..6d2c38811e 100644
|
||||||
|
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
|
||||||
|
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.cpp
|
||||||
|
@@ -3490,7 +3490,8 @@ status_t AudioPolicyManager::getAudioPort(struct audio_port *port)
|
||||||
|
status_t AudioPolicyManager::createAudioPatchInternal(const struct audio_patch *patch,
|
||||||
|
audio_patch_handle_t *handle,
|
||||||
|
uid_t uid, uint32_t delayMs,
|
||||||
|
- const sp<SourceClientDescriptor>& sourceDesc)
|
||||||
|
+ const sp<SourceClientDescriptor>& sourceDesc,
|
||||||
|
+ bool forceSwBridge)
|
||||||
|
{
|
||||||
|
ALOGV("%s", __func__);
|
||||||
|
if (handle == NULL || patch == NULL) {
|
||||||
|
@@ -3694,7 +3695,8 @@ status_t AudioPolicyManager::createAudioPatchInternal(const struct audio_patch *
|
||||||
|
// - audio HAL version is >= 3.0 but no route has been declared between devices
|
||||||
|
// - called from startAudioSource (aka sourceDesc != nullptr) and source device does
|
||||||
|
// not have a gain controller
|
||||||
|
- if (!srcDevice->hasSameHwModuleAs(sinkDevice) ||
|
||||||
|
+ // - a previous attempt at using HW bridge failed (forceSwBridge)
|
||||||
|
+ if (forceSwBridge || !srcDevice->hasSameHwModuleAs(sinkDevice) ||
|
||||||
|
(srcDevice->getModuleVersionMajor() < 3) ||
|
||||||
|
!srcDevice->getModule()->supportsPatch(srcDevice, sinkDevice) ||
|
||||||
|
(sourceDesc != nullptr &&
|
||||||
|
@@ -3759,7 +3761,12 @@ status_t AudioPolicyManager::createAudioPatchInternal(const struct audio_patch *
|
||||||
|
__func__, index, handle, patchBuilder.patch(), delayMs, uid, &patchDesc);
|
||||||
|
if (status != NO_ERROR) {
|
||||||
|
ALOGW("%s patch panel could not connect device patch, error %d", __func__, status);
|
||||||
|
- return INVALID_OPERATION;
|
||||||
|
+ if (forceSwBridge || patch->sinks[0].type != AUDIO_PORT_TYPE_DEVICE) {
|
||||||
|
+ return INVALID_OPERATION;
|
||||||
|
+ } else {
|
||||||
|
+ ALOGW("Retrying with software bridging.");
|
||||||
|
+ return createAudioPatchInternal(patch, handle, uid, delayMs, sourceDesc, true);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
return BAD_VALUE;
|
||||||
|
diff --git a/services/audiopolicy/managerdefault/AudioPolicyManager.h b/services/audiopolicy/managerdefault/AudioPolicyManager.h
|
||||||
|
index b588f898d4..60cbd7175e 100644
|
||||||
|
--- a/services/audiopolicy/managerdefault/AudioPolicyManager.h
|
||||||
|
+++ b/services/audiopolicy/managerdefault/AudioPolicyManager.h
|
||||||
|
@@ -910,12 +910,14 @@ private:
|
||||||
|
* @param[in] delayMs if required
|
||||||
|
* @param[in] sourceDesc [optional] in case of external source, source client to be
|
||||||
|
* configured by the patch, i.e. assigning an Output (HW or SW)
|
||||||
|
+ * @param[in] forceSwBridge [optional] force the creation of a SW bridge (internal use only)
|
||||||
|
* @return NO_ERROR if patch installed correctly, error code otherwise.
|
||||||
|
*/
|
||||||
|
status_t createAudioPatchInternal(const struct audio_patch *patch,
|
||||||
|
audio_patch_handle_t *handle,
|
||||||
|
uid_t uid, uint32_t delayMs = 0,
|
||||||
|
- const sp<SourceClientDescriptor>& sourceDesc = nullptr);
|
||||||
|
+ const sp<SourceClientDescriptor>& sourceDesc = nullptr,
|
||||||
|
+ bool forceSwBridge = false);
|
||||||
|
/**
|
||||||
|
* @brief releaseAudioPatchInternal internal function to remove an audio patch
|
||||||
|
* @param[in] handle of the patch to be removed
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,26 @@
|
|||||||
|
From c8a6af6fd0f3134b96fc291910cfc0380bc0dc31 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Sun, 28 Mar 2021 14:47:52 +0200
|
||||||
|
Subject: [PATCH 36/38] Reenable STRATEGY_ROUTING. This is a leftover of tries
|
||||||
|
of 587b198, wrongly commited in 20f869
|
||||||
|
|
||||||
|
---
|
||||||
|
services/audiopolicy/enginedefault/src/Engine.cpp | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/services/audiopolicy/enginedefault/src/Engine.cpp b/services/audiopolicy/enginedefault/src/Engine.cpp
|
||||||
|
index 16a7a4bbac..b14d2bbb0b 100755
|
||||||
|
--- a/services/audiopolicy/enginedefault/src/Engine.cpp
|
||||||
|
+++ b/services/audiopolicy/enginedefault/src/Engine.cpp
|
||||||
|
@@ -52,7 +52,7 @@ static const std::vector<legacy_strategy_map>& getLegacyStrategy() {
|
||||||
|
{ "STRATEGY_ENFORCED_AUDIBLE", STRATEGY_ENFORCED_AUDIBLE },
|
||||||
|
{ "STRATEGY_TRANSMITTED_THROUGH_SPEAKER", STRATEGY_TRANSMITTED_THROUGH_SPEAKER },
|
||||||
|
{ "STRATEGY_ACCESSIBILITY", STRATEGY_ACCESSIBILITY },
|
||||||
|
- //{ "STRATEGY_REROUTING", STRATEGY_REROUTING },
|
||||||
|
+ { "STRATEGY_REROUTING", STRATEGY_REROUTING },
|
||||||
|
{ "STRATEGY_PATCH", STRATEGY_REROUTING }, // boiler to manage stream patch volume
|
||||||
|
{ "STRATEGY_CALL_ASSISTANT", STRATEGY_CALL_ASSISTANT },
|
||||||
|
};
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,40 @@
|
|||||||
|
From c3bd3dc63c34de7c688b24999769f7eb504784a3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Sun, 28 Mar 2021 14:48:49 +0200
|
||||||
|
Subject: [PATCH 37/38] Use a fake volume policy when none has been found
|
||||||
|
|
||||||
|
This is useful, because on Samsung devices, the "real"
|
||||||
|
(=non-gsi-cheating) audio policy doesn't have any volume policy.
|
||||||
|
|
||||||
|
This requires actually adding the fake audio policy xml file (done in
|
||||||
|
device/phh/treble)
|
||||||
|
---
|
||||||
|
services/audiopolicy/engine/config/src/EngineConfig.cpp | 8 +++++++-
|
||||||
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/services/audiopolicy/engine/config/src/EngineConfig.cpp b/services/audiopolicy/engine/config/src/EngineConfig.cpp
|
||||||
|
index 4842cb282f..e8d6917754 100644
|
||||||
|
--- a/services/audiopolicy/engine/config/src/EngineConfig.cpp
|
||||||
|
+++ b/services/audiopolicy/engine/config/src/EngineConfig.cpp
|
||||||
|
@@ -717,11 +717,17 @@ android::status_t parseLegacyVolumes(VolumeGroups &volumeGroups) {
|
||||||
|
snprintf(audioPolicyXmlConfigFile, sizeof(audioPolicyXmlConfigFile),
|
||||||
|
"%s/%s", path.c_str(), fileName);
|
||||||
|
ret = parseLegacyVolumeFile(audioPolicyXmlConfigFile, volumeGroups);
|
||||||
|
- if (ret == NO_ERROR) {
|
||||||
|
+ ALOGE("Parsing volume for %s gave %zu", audioPolicyXmlConfigFile, volumeGroups.size());
|
||||||
|
+ if (ret == NO_ERROR && volumeGroups.size() > 0) {
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
+ ret = parseLegacyVolumeFile("/system/etc/fake_audio_policy_volume.xml", volumeGroups);
|
||||||
|
+ ALOGE("Parsing volume for /system/etc/fake_audio_policy_volume.xml gave %zu", volumeGroups.size());
|
||||||
|
+ if (ret == NO_ERROR && volumeGroups.size() == 0) {
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
return BAD_VALUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
@ -0,0 +1,31 @@
|
|||||||
|
From 23f277e7a6afee9d256582204099c4c645606b98 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Pierre-Hugues Husson <phh@phh.me>
|
||||||
|
Date: Sun, 28 Mar 2021 18:54:47 +0200
|
||||||
|
Subject: [PATCH 38/38] Not all sources in a route are valid. Dont ignore the
|
||||||
|
whole route because of one broken source
|
||||||
|
|
||||||
|
---
|
||||||
|
.../audiopolicy/common/managerdefinitions/src/Serializer.cpp | 5 +++--
|
||||||
|
1 file changed, 3 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
index 1f200ad850..e57bd24724 100644
|
||||||
|
--- a/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
+++ b/services/audiopolicy/common/managerdefinitions/src/Serializer.cpp
|
||||||
|
@@ -609,10 +609,11 @@ Return<RouteTraits::Element> RouteTraits::deserialize(const xmlNode *cur, PtrSer
|
||||||
|
source = ctx->findPortByTagName(trim(devTag));
|
||||||
|
if (source == NULL) {
|
||||||
|
ALOGE("%s: no source found with name=%s", __func__, devTag);
|
||||||
|
- return Status::fromStatusT(BAD_VALUE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
- sources.add(source);
|
||||||
|
+ if(source != nullptr) {
|
||||||
|
+ sources.add(source);
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
devTag = strtok(NULL, ",");
|
||||||
|
}
|
||||||
|
--
|
||||||
|
2.25.1
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user