readded the original files, builds break without it

This commit is contained in:
Talmid of Levi 2023-12-17 09:51:56 -05:00
parent a7e2b88e56
commit 3ea3407add
85 changed files with 48612 additions and 2 deletions

View File

@ -0,0 +1,28 @@
From 09662a87b7db9b520aa5f996c5b837717fadfdec 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 05/22] 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 f015b485dfa6..77045ea11775 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -5206,7 +5206,7 @@
<item name="config_wallpaperMinScale" format="float" type="dimen">1</item>
<!-- 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>
<!-- If true, the wallpaper will scale regardless of the value of shouldZoomOutWallpaper() -->
<bool name="config_alwaysScaleWallpaper">false</bool>
--
2.34.1

View File

@ -0,0 +1,35 @@
From 2249465d16cea6251df69dd13d331ed2fae270f0 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 07/22] UI: Increase default status bar height
Change-Id: Ibbcf63159e19bb2bb2b1094ea07ab85917630b07
---
core/res/res/values/dimens.xml | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml
index 2542268a153a..099a6badc034 100644
--- a/core/res/res/values/dimens.xml
+++ b/core/res/res/values/dimens.xml
@@ -41,7 +41,7 @@
<!-- The default height of the status bar used in {@link SystemBarUtils#getStatusBarHeight} to
calculate the status bar height. -->
- <dimen name="status_bar_height_default">24dp</dimen>
+ <dimen name="status_bar_height_default">28dp</dimen>
<!-- Height of the status bar.
Do not read this dimen directly. Use {@link SystemBarUtils#getStatusBarHeight} instead.
-->
@@ -49,7 +49,7 @@
<!-- Height of the status bar in portrait.
Do not read this dimen directly. Use {@link SystemBarUtils#getStatusBarHeight} instead.
-->
- <dimen name="status_bar_height_portrait">24dp</dimen>
+ <dimen name="status_bar_height_portrait">28dp</dimen>
<!-- Height of the status bar in landscape.
Do not read this dimen directly. Use {@link SystemBarUtils#getStatusBarHeight} instead.
-->
--
2.34.1

View File

@ -0,0 +1,25 @@
From 380d8dff252dcde3b490cc3080bd56d2e3d21ec4 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sun, 25 Sep 2022 02:20:20 +0000
Subject: [PATCH 08/22] UI: Remove QS footer background
Change-Id: I68e82e0c5e3eddb2d3f767fe792b1436eae506ef
---
packages/SystemUI/res-keyguard/layout/footer_actions.xml | 1 -
1 file changed, 1 deletion(-)
diff --git a/packages/SystemUI/res-keyguard/layout/footer_actions.xml b/packages/SystemUI/res-keyguard/layout/footer_actions.xml
index 544d0299060d..d45744961f59 100644
--- a/packages/SystemUI/res-keyguard/layout/footer_actions.xml
+++ b/packages/SystemUI/res-keyguard/layout/footer_actions.xml
@@ -23,7 +23,6 @@
android:elevation="@dimen/qs_panel_elevation"
android:paddingTop="@dimen/qs_footer_actions_top_padding"
android:paddingBottom="@dimen/qs_footer_actions_bottom_padding"
- android:background="@drawable/qs_footer_actions_background"
android:gravity="center_vertical|end"
android:layout_gravity="bottom"
/>
--
2.34.1

View File

@ -0,0 +1,41 @@
From 8b17b1dc3b1f373a0ae8a44d16a8adec599915b3 Mon Sep 17 00:00:00 2001
From: Danny Lin <danny@kdrag0n.dev>
Date: Tue, 5 Oct 2021 21:01:50 -0700
Subject: [PATCH 13/22] Paint: Enable subpixel text positioning by default
On desktop Linux, subpixel text positioning is necessary to avoid
kerning issues, and Android is no different. Even though most phone
displays have relatively high DPIs, the lack of subpixel text
positioning is only unnoticeable on high-end devices such as the Pixel 4
XL (1440x3040 @ 6.3 in => 537 dpi).
For example, on the Pixel 5 (1080 x 2340 @ 6.0 in => 432 dpi),
horizontally-scrolling labels in QS tiles can be seen "jittering"
slightly upon close observation. This was tested with the Google Sans
font on Google's stock OS. At this lower DPI, there is still a need for
subpixel text positioning (at least in some cases).
Enable subpixel text positioning by default to fix occasional kerning
issues and jittering when text is in motion.
Change-Id: I8d71e5848a745c5a2d457a28c68458920928ee09
---
graphics/java/android/graphics/Paint.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/graphics/java/android/graphics/Paint.java b/graphics/java/android/graphics/Paint.java
index f438a03b1434..6621d1f23166 100644
--- a/graphics/java/android/graphics/Paint.java
+++ b/graphics/java/android/graphics/Paint.java
@@ -260,7 +260,7 @@ public class Paint {
// These flags are always set on a new/reset paint, even if flags 0 is passed.
static final int HIDDEN_DEFAULT_PAINT_FLAGS = DEV_KERN_TEXT_FLAG | EMBEDDED_BITMAP_TEXT_FLAG
- | FILTER_BITMAP_FLAG;
+ | FILTER_BITMAP_FLAG | SUBPIXEL_TEXT_FLAG;
/**
* Font hinter option that disables font hinting.
--
2.34.1

View File

@ -0,0 +1,163 @@
From 482d15491c36aeb11a0e8b5c9a5205d389507034 Mon Sep 17 00:00:00 2001
From: Danny Lin <danny@kdrag0n.dev>
Date: Sat, 16 Oct 2021 05:27:57 -0700
Subject: [PATCH 14/22] Add support for app signature spoofing
This is needed by microG GmsCore to pretend to be the official Google
Play Services package, because client apps check the package signature
to make sure it matches Google's official certificate.
This was forward-ported from the Android 10 patch by gudenau:
https://github.com/microg/android_packages_apps_GmsCore/pull/957
Changes made for Android 11:
- Updated PackageInfo calls
- Added new permission to public API surface, needed for
PermissionController which is now an updatable APEX on 11
- Added a dummy permission group to allow users to manage the
permission through the PermissionController UI
(by Vachounet <vachounet@live.fr>)
- Updated location provider comment for conciseness
Changes made for Android 12:
- Moved mayFakeSignature into lock-free Computer subclass
- Always get permissions for packages that request signature spoofing
(otherwise permissions are usually ommitted and thus the permission
check doesn't work properly)
- Optimize mayFakeSignature check order to improve performance
Changes made for Android 13:
- Computer subclass is now an independent class.
Change-Id: Ied7d6ce0b83a2d2345c3abba0429998d86494a88
---
core/api/current.txt | 2 ++
core/res/AndroidManifest.xml | 15 ++++++++++
core/res/res/values/strings.xml | 12 ++++++++
.../com/android/server/pm/ComputerEngine.java | 30 +++++++++++++++++--
4 files changed, 56 insertions(+), 3 deletions(-)
diff --git a/core/api/current.txt b/core/api/current.txt
index 487e57d114c9..04e69741b9fd 100644
--- a/core/api/current.txt
+++ b/core/api/current.txt
@@ -87,6 +87,7 @@ package android {
field public static final String DUMP = "android.permission.DUMP";
field public static final String EXPAND_STATUS_BAR = "android.permission.EXPAND_STATUS_BAR";
field public static final String FACTORY_TEST = "android.permission.FACTORY_TEST";
+ field public static final String FAKE_PACKAGE_SIGNATURE = "android.permission.FAKE_PACKAGE_SIGNATURE";
field public static final String FOREGROUND_SERVICE = "android.permission.FOREGROUND_SERVICE";
field public static final String GET_ACCOUNTS = "android.permission.GET_ACCOUNTS";
field public static final String GET_ACCOUNTS_PRIVILEGED = "android.permission.GET_ACCOUNTS_PRIVILEGED";
@@ -222,6 +223,7 @@ package android {
field public static final String CALL_LOG = "android.permission-group.CALL_LOG";
field public static final String CAMERA = "android.permission-group.CAMERA";
field public static final String CONTACTS = "android.permission-group.CONTACTS";
+ field public static final String FAKE_PACKAGE = "android.permission-group.FAKE_PACKAGE";
field public static final String LOCATION = "android.permission-group.LOCATION";
field public static final String MICROPHONE = "android.permission-group.MICROPHONE";
field public static final String NEARBY_DEVICES = "android.permission-group.NEARBY_DEVICES";
diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml
index bbc3a7369423..af04d9d18fbd 100644
--- a/core/res/AndroidManifest.xml
+++ b/core/res/AndroidManifest.xml
@@ -3577,6 +3577,21 @@
android:description="@string/permdesc_getPackageSize"
android:protectionLevel="normal" />
+ <!-- Dummy user-facing group for faking package signature -->
+ <permission-group android:name="android.permission-group.FAKE_PACKAGE"
+ android:label="@string/permgrouplab_fake_package_signature"
+ android:description="@string/permgroupdesc_fake_package_signature"
+ android:request="@string/permgrouprequest_fake_package_signature"
+ android:priority="100" />
+
+ <!-- Allows an application to change the package signature as
+ seen by applications -->
+ <permission android:name="android.permission.FAKE_PACKAGE_SIGNATURE"
+ android:permissionGroup="android.permission-group.UNDEFINED"
+ android:protectionLevel="signature|privileged"
+ android:label="@string/permlab_fakePackageSignature"
+ android:description="@string/permdesc_fakePackageSignature" />
+
<!-- @deprecated No longer useful, see
{@link android.content.pm.PackageManager#addPackageToPreferred}
for details. -->
diff --git a/core/res/res/values/strings.xml b/core/res/res/values/strings.xml
index 2091c0502b6f..6888edcf7d3c 100644
--- a/core/res/res/values/strings.xml
+++ b/core/res/res/values/strings.xml
@@ -982,6 +982,18 @@
<!-- Permissions -->
+ <!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permlab_fakePackageSignature">Spoof package signature</string>
+ <!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permdesc_fakePackageSignature">Allows the app to pretend to be a different app. Malicious applications might be able to use this to access private application data. Legitimate uses include an emulator pretending to be what it emulates. Grant this permission with caution only!</string>
+ <!-- Title of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgrouplab_fake_package_signature">Spoof package signature</string>
+ <!-- Description of a category of application permissions, listed so the user can choose whether they want to allow the application to do this. -->
+ <string name="permgroupdesc_fake_package_signature">allow to spoof package signature</string>
+ <!-- Message shown to the user when the apps requests permission from this group. If ever possible this should stay below 80 characters (assuming the parameters takes 20 characters). Don't abbreviate until the message reaches 120 characters though. [CHAR LIMIT=120] -->
+ <string name="permgrouprequest_fake_package_signature">Allow
+ &lt;b><xliff:g id="app_name" example="Gmail">%1$s</xliff:g>&lt;/b> to spoof package signature?</string>
+
<!-- Title of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
<string name="permlab_statusBar">disable or modify status bar</string>
<!-- Description of an application permission, listed so the user can choose whether they want to allow the application to do this. -->
diff --git a/services/core/java/com/android/server/pm/ComputerEngine.java b/services/core/java/com/android/server/pm/ComputerEngine.java
index 46b7460dff1b..40549962436f 100644
--- a/services/core/java/com/android/server/pm/ComputerEngine.java
+++ b/services/core/java/com/android/server/pm/ComputerEngine.java
@@ -1603,6 +1603,29 @@ public class ComputerEngine implements Computer {
return result;
}
+ private boolean requestsFakeSignature(AndroidPackage p) {
+ return p.getMetaData() != null &&
+ p.getMetaData().getString("fake-signature") != null;
+ }
+
+ private PackageInfo mayFakeSignature(AndroidPackage p, PackageInfo pi,
+ Set<String> permissions) {
+ try {
+ if (p.getMetaData() != null &&
+ p.getTargetSdkVersion() > Build.VERSION_CODES.LOLLIPOP_MR1) {
+ String sig = p.getMetaData().getString("fake-signature");
+ if (sig != null &&
+ permissions.contains("android.permission.FAKE_PACKAGE_SIGNATURE")) {
+ pi.signatures = new Signature[] {new Signature(sig)};
+ }
+ }
+ } catch (Throwable t) {
+ // We should never die because of any failures, this is system code!
+ Log.w("PackageManagerService.FAKE_PACKAGE_SIGNATURE", t);
+ }
+ return pi;
+ }
+
public final PackageInfo generatePackageInfo(PackageStateInternal ps,
@PackageManager.PackageInfoFlagsBits long flags, int userId) {
if (!mUserManager.exists(userId)) return null;
@@ -1632,13 +1655,14 @@ public class ComputerEngine implements Computer {
final int[] gids = (flags & PackageManager.GET_GIDS) == 0 ? EMPTY_INT_ARRAY
: mPermissionManager.getGidsForUid(UserHandle.getUid(userId, ps.getAppId()));
// Compute granted permissions only if package has requested permissions
- final Set<String> permissions = ((flags & PackageManager.GET_PERMISSIONS) == 0
+ final Set<String> permissions = (((flags & PackageManager.GET_PERMISSIONS) == 0
+ && !requestsFakeSignature(p))
|| ArrayUtils.isEmpty(p.getRequestedPermissions())) ? Collections.emptySet()
: mPermissionManager.getGrantedPermissions(ps.getPackageName(), userId);
- PackageInfo packageInfo = PackageInfoUtils.generate(p, gids, flags,
+ PackageInfo packageInfo = mayFakeSignature(p, PackageInfoUtils.generate(p, gids, flags,
state.getFirstInstallTime(), ps.getLastUpdateTime(), permissions, state, userId,
- ps);
+ ps), permissions);
if (packageInfo == null) {
return null;
--
2.34.1

View File

@ -0,0 +1,113 @@
From db27d27f48658841c6a74e55f543f417ddb16e76 Mon Sep 17 00:00:00 2001
From: Danny Lin <danny@kdrag0n.dev>
Date: Mon, 11 Oct 2021 19:59:51 -0700
Subject: [PATCH 15/22] Spoof product name for Google Play Services
NB: This code is under the gmscompat package, but it does not depend on
any code from gmscompat.
Change-Id: Ic018c0d7abe4573143c3b92301a2625b91e6673a
---
core/java/android/app/Instrumentation.java | 4 ++
.../internal/gmscompat/AttestationHooks.java | 60 +++++++++++++++++++
2 files changed, 64 insertions(+)
create mode 100644 core/java/com/android/internal/gmscompat/AttestationHooks.java
diff --git a/core/java/android/app/Instrumentation.java b/core/java/android/app/Instrumentation.java
index 556058b567f9..44449588bbab 100644
--- a/core/java/android/app/Instrumentation.java
+++ b/core/java/android/app/Instrumentation.java
@@ -57,6 +57,8 @@ import android.view.WindowManagerGlobal;
import com.android.internal.content.ReferrerIntent;
+import com.android.internal.gmscompat.AttestationHooks;
+
import java.io.File;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
@@ -1242,6 +1244,7 @@ public class Instrumentation {
Application app = getFactory(context.getPackageName())
.instantiateApplication(cl, className);
app.attach(context);
+ AttestationHooks.initApplicationBeforeOnCreate(app);
return app;
}
@@ -1259,6 +1262,7 @@ public class Instrumentation {
ClassNotFoundException {
Application app = (Application)clazz.newInstance();
app.attach(context);
+ AttestationHooks.initApplicationBeforeOnCreate(app);
return app;
}
diff --git a/core/java/com/android/internal/gmscompat/AttestationHooks.java b/core/java/com/android/internal/gmscompat/AttestationHooks.java
new file mode 100644
index 000000000000..55db97dc28a1
--- /dev/null
+++ b/core/java/com/android/internal/gmscompat/AttestationHooks.java
@@ -0,0 +1,60 @@
+/*
+ * Copyright (C) 2021 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.internal.gmscompat;
+
+import android.app.Application;
+import android.os.Build;
+import android.os.SystemProperties;
+import android.util.Log;
+
+import java.lang.reflect.Field;
+
+/** @hide */
+public final class AttestationHooks {
+ private static final String TAG = "GmsCompat/Attestation";
+
+ private static final String PACKAGE_GMS = "com.google.android.gms";
+
+ private AttestationHooks() { }
+
+ private static void setBuildField(String key, String value) {
+ try {
+ // Unlock
+ Field field = Build.class.getDeclaredField(key);
+ field.setAccessible(true);
+
+ // Edit
+ field.set(null, value);
+
+ // Lock
+ field.setAccessible(false);
+ } catch (NoSuchFieldException | IllegalAccessException e) {
+ Log.e(TAG, "Failed to spoof Build." + key, e);
+ }
+ }
+
+ private static void spoofBuildGms() {
+ // Alter model name to avoid hardware attestation enforcement
+ setBuildField("MODEL", "Pixel 5a");
+ }
+
+ public static void initApplicationBeforeOnCreate(Application app) {
+ if (PACKAGE_GMS.equals(app.getPackageName())) {
+ spoofBuildGms();
+ }
+ }
+}
--
2.34.1

View File

@ -0,0 +1,93 @@
From dc4bd0f140c6946e01e0a3c31bfc71c884138981 Mon Sep 17 00:00:00 2001
From: Danny Lin <danny@kdrag0n.dev>
Date: Mon, 11 Oct 2021 20:00:44 -0700
Subject: [PATCH 16/22] keystore: Block key attestation for SafetyNet
SafetyNet (part of Google Play Services) opportunistically uses
hardware-backed key attestation via KeyStore as a strong integrity
check. This causes SafetyNet to fail on custom ROMs because the verified
boot key and bootloader unlock state can be detected from attestation
certificates.
As a workaround, we can take advantage of the fact that SafetyNet's
usage of key attestation is opportunistic (i.e. falls back to basic
integrity checks if it fails) and prevent it from getting the
attestation certificate chain from KeyStore. This is done by checking
the stack for DroidGuard, which is the codename for SafetyNet, and
pretending that the device doesn't support key attestation.
Key attestation has only been blocked for SafetyNet specifically, as
Google Play Services and other apps have many valid reasons to use it.
For example, it appears to be involved in Google's mobile security key
ferature.
Change-Id: I5146439d47f42dc6231cb45c4dab9f61540056f6
---
.../internal/gmscompat/AttestationHooks.java | 15 +++++++++++++++
.../security/keystore2/AndroidKeyStoreSpi.java | 3 +++
2 files changed, 18 insertions(+)
diff --git a/core/java/com/android/internal/gmscompat/AttestationHooks.java b/core/java/com/android/internal/gmscompat/AttestationHooks.java
index 55db97dc28a1..f2c85c82821f 100644
--- a/core/java/com/android/internal/gmscompat/AttestationHooks.java
+++ b/core/java/com/android/internal/gmscompat/AttestationHooks.java
@@ -22,12 +22,14 @@ import android.os.SystemProperties;
import android.util.Log;
import java.lang.reflect.Field;
+import java.util.Arrays;
/** @hide */
public final class AttestationHooks {
private static final String TAG = "GmsCompat/Attestation";
private static final String PACKAGE_GMS = "com.google.android.gms";
+ private static volatile boolean sIsGms = false;
private AttestationHooks() { }
@@ -54,7 +56,20 @@ public final class AttestationHooks {
public static void initApplicationBeforeOnCreate(Application app) {
if (PACKAGE_GMS.equals(app.getPackageName())) {
+ sIsGms = true;
spoofBuildGms();
}
}
+
+ private static boolean isCallerSafetyNet() {
+ return Arrays.stream(Thread.currentThread().getStackTrace())
+ .anyMatch(elem -> elem.getClassName().contains("DroidGuard"));
+ }
+
+ public static void onEngineGetCertificateChain() {
+ // Check stack for SafetyNet
+ if (sIsGms && isCallerSafetyNet()) {
+ throw new UnsupportedOperationException();
+ }
+ }
}
diff --git a/keystore/java/android/security/keystore2/AndroidKeyStoreSpi.java b/keystore/java/android/security/keystore2/AndroidKeyStoreSpi.java
index 33411e1ec5b9..133a4094d434 100644
--- a/keystore/java/android/security/keystore2/AndroidKeyStoreSpi.java
+++ b/keystore/java/android/security/keystore2/AndroidKeyStoreSpi.java
@@ -42,6 +42,7 @@ import android.system.keystore2.ResponseCode;
import android.util.Log;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.internal.gmscompat.AttestationHooks;
import java.io.ByteArrayInputStream;
import java.io.IOException;
@@ -164,6 +165,8 @@ public class AndroidKeyStoreSpi extends KeyStoreSpi {
@Override
public Certificate[] engineGetCertificateChain(String alias) {
+ AttestationHooks.onEngineGetCertificateChain();
+
KeyEntryResponse response = getKeyMetadata(alias);
if (response == null || response.metadata.certificate == null) {
--
2.34.1

View File

@ -0,0 +1,42 @@
From 05bc5fa10b4e2ebc539c32db04abbc995906ff05 Mon Sep 17 00:00:00 2001
From: Danny Lin <danny@kdrag0n.dev>
Date: Mon, 1 Nov 2021 20:06:48 -0700
Subject: [PATCH 17/22] Limit SafetyNet workarounds to unstable GMS process
The unstable process is where SafetyNet attestation actually runs, so
we only need to spoof the model in that process. Leaving other processes
fixes various issues caused by model detection and flag provisioning,
including screen-off Voice Match in Google Assistant, broken At a Glance
weather and settings on Android 12, and more.
Change-Id: Idcf663907a6c3d0408dbd45b1ac53c9eb4200df8
---
.../com/android/internal/gmscompat/AttestationHooks.java | 5 ++++-
1 file changed, 4 insertions(+), 1 deletion(-)
diff --git a/core/java/com/android/internal/gmscompat/AttestationHooks.java b/core/java/com/android/internal/gmscompat/AttestationHooks.java
index f2c85c82821f..37ce8c946de6 100644
--- a/core/java/com/android/internal/gmscompat/AttestationHooks.java
+++ b/core/java/com/android/internal/gmscompat/AttestationHooks.java
@@ -29,6 +29,8 @@ public final class AttestationHooks {
private static final String TAG = "GmsCompat/Attestation";
private static final String PACKAGE_GMS = "com.google.android.gms";
+ private static final String PROCESS_UNSTABLE = "com.google.android.gms.unstable";
+
private static volatile boolean sIsGms = false;
private AttestationHooks() { }
@@ -55,7 +57,8 @@ public final class AttestationHooks {
}
public static void initApplicationBeforeOnCreate(Application app) {
- if (PACKAGE_GMS.equals(app.getPackageName())) {
+ if (PACKAGE_GMS.equals(app.getPackageName()) &&
+ PROCESS_UNSTABLE.equals(Application.getProcessName())) {
sIsGms = true;
spoofBuildGms();
}
--
2.34.1

View File

@ -0,0 +1,59 @@
From ace6036332743c6f1a5614b2fd573464ddbffef7 Mon Sep 17 00:00:00 2001
From: Dyneteve <dyneteve@hentaios.com>
Date: Tue, 23 Aug 2022 18:57:05 +0200
Subject: [PATCH 18/22] gmscompat: Apply the SafetyNet workaround to Play Store
aswell
Play Store is used for the new Play Integrity API, extend the hack
to it aswell
Test: Device Integrity and Basic Integrity passes.
Signed-off-by: Dyneteve <dyneteve@hentaios.com>
Change-Id: Id607cdff0b902f285a6c1b769c0a4ee4202842b1
---
.../android/internal/gmscompat/AttestationHooks.java | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/core/java/com/android/internal/gmscompat/AttestationHooks.java b/core/java/com/android/internal/gmscompat/AttestationHooks.java
index 37ce8c946de6..65469239a0c6 100644
--- a/core/java/com/android/internal/gmscompat/AttestationHooks.java
+++ b/core/java/com/android/internal/gmscompat/AttestationHooks.java
@@ -29,9 +29,11 @@ public final class AttestationHooks {
private static final String TAG = "GmsCompat/Attestation";
private static final String PACKAGE_GMS = "com.google.android.gms";
+ private static final String PACKAGE_FINSKY = "com.android.vending";
private static final String PROCESS_UNSTABLE = "com.google.android.gms.unstable";
private static volatile boolean sIsGms = false;
+ private static volatile boolean sIsFinsky = false;
private AttestationHooks() { }
@@ -62,6 +64,11 @@ public final class AttestationHooks {
sIsGms = true;
spoofBuildGms();
}
+
+ if (PACKAGE_FINSKY.equals(app.getPackageName())) {
+ sIsFinsky = true;
+ spoofBuildGms();
+ }
}
private static boolean isCallerSafetyNet() {
@@ -74,5 +81,10 @@ public final class AttestationHooks {
if (sIsGms && isCallerSafetyNet()) {
throw new UnsupportedOperationException();
}
+
+ // Check stack for PlayIntegrity
+ if (sIsFinsky) {
+ throw new UnsupportedOperationException();
+ }
}
}
--
2.34.1

View File

@ -0,0 +1,46 @@
From d67897a23c6e182294d6a6d137d7ccc430a1abe0 Mon Sep 17 00:00:00 2001
From: Dyneteve <dyneteve@hentaios.com>
Date: Thu, 8 Sep 2022 14:39:52 +0200
Subject: [PATCH 19/22] gmscompat: Use Nexus 6P fingerprint for CTS/Integrity
Google seems to have patched the KM block to Play Store in record time,
but is still not enforced for anything under android N.
Since we moved to angler FP we don't need to spoof model to Play Store
anymore, however the KM block is still needed.
Test: Run Play Intregrity Attestation
Signed-off-by: Dyneteve <dyneteve@hentaios.com>
Change-Id: Ic2401a6e40ddfc4318a1d0faa87e42eb118ac3d1
---
.../com/android/internal/gmscompat/AttestationHooks.java | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/core/java/com/android/internal/gmscompat/AttestationHooks.java b/core/java/com/android/internal/gmscompat/AttestationHooks.java
index 65469239a0c6..328d9777b2a2 100644
--- a/core/java/com/android/internal/gmscompat/AttestationHooks.java
+++ b/core/java/com/android/internal/gmscompat/AttestationHooks.java
@@ -54,8 +54,9 @@ public final class AttestationHooks {
}
private static void spoofBuildGms() {
- // Alter model name to avoid hardware attestation enforcement
- setBuildField("MODEL", "Pixel 5a");
+ // Alter model name and fingerprint to avoid hardware attestation enforcement
+ setBuildField("FINGERPRINT", "google/angler/angler:6.0/MDB08L/2343525:user/release-keys");
+ setBuildField("MODEL", "Nexus 6P");
}
public static void initApplicationBeforeOnCreate(Application app) {
@@ -67,7 +68,6 @@ public final class AttestationHooks {
if (PACKAGE_FINSKY.equals(app.getPackageName())) {
sIsFinsky = true;
- spoofBuildGms();
}
}
--
2.34.1

View File

@ -0,0 +1,27 @@
From 7893f246007a1989420583ab8728a5ced89e944d Mon Sep 17 00:00:00 2001
From: Dyneteve <dyneteve@hentaios.com>
Date: Tue, 6 Dec 2022 15:59:08 +0100
Subject: [PATCH 20/22] gmscompat: Use actual device model name
Signed-off-by: Dyneteve <dyneteve@hentaios.com>
Change-Id: I454654d87b3ea6286e12e9a9f5ed120f06cb2aa6
---
core/java/com/android/internal/gmscompat/AttestationHooks.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/java/com/android/internal/gmscompat/AttestationHooks.java b/core/java/com/android/internal/gmscompat/AttestationHooks.java
index 328d9777b2a2..7649bb6533da 100644
--- a/core/java/com/android/internal/gmscompat/AttestationHooks.java
+++ b/core/java/com/android/internal/gmscompat/AttestationHooks.java
@@ -56,7 +56,7 @@ public final class AttestationHooks {
private static void spoofBuildGms() {
// Alter model name and fingerprint to avoid hardware attestation enforcement
setBuildField("FINGERPRINT", "google/angler/angler:6.0/MDB08L/2343525:user/release-keys");
- setBuildField("MODEL", "Nexus 6P");
+ setBuildField("MODEL", Build.MODEL + "\u200b");
}
public static void initApplicationBeforeOnCreate(Application app) {
--
2.34.1

View File

@ -0,0 +1,57 @@
From dd5e4484df6868958941773ac310396b281e5ceb Mon Sep 17 00:00:00 2001
From: Anirudh Gupta <anirudhgupta109@aosip.dev>
Date: Wed, 4 Jan 2023 18:20:56 +0000
Subject: [PATCH 21/22] gmscompat: Set shipping level to 32 for devices >=33
If ro.product.first_api_level is 33, its forced to use HW attestation even though the safteynet checker app shows BASIC
setting it to 32 allows for software attestation and passing CTS
Change-Id: Ie7326eaac48424cdea3d9633ebe13c65053ef6c1
Signed-off-by: Dyneteve <dyneteve@hentaios.com>
---
.../internal/gmscompat/AttestationHooks.java | 18 ++++++++++++++++++
1 file changed, 18 insertions(+)
diff --git a/core/java/com/android/internal/gmscompat/AttestationHooks.java b/core/java/com/android/internal/gmscompat/AttestationHooks.java
index 7649bb6533da..d2b1d2879c9c 100644
--- a/core/java/com/android/internal/gmscompat/AttestationHooks.java
+++ b/core/java/com/android/internal/gmscompat/AttestationHooks.java
@@ -18,6 +18,7 @@ package com.android.internal.gmscompat;
import android.app.Application;
import android.os.Build;
+import android.os.Build.VERSION;
import android.os.SystemProperties;
import android.util.Log;
@@ -53,10 +54,27 @@ public final class AttestationHooks {
}
}
+ private static void setVersionField(String key, Integer value) {
+ try {
+ // Unlock
+ Field field = Build.VERSION.class.getDeclaredField(key);
+ field.setAccessible(true);
+
+ // Edit
+ field.set(null, value);
+
+ // Lock
+ field.setAccessible(false);
+ } catch (NoSuchFieldException | IllegalAccessException e) {
+ Log.e(TAG, "Failed to spoof Build." + key, e);
+ }
+ }
+
private static void spoofBuildGms() {
// Alter model name and fingerprint to avoid hardware attestation enforcement
setBuildField("FINGERPRINT", "google/angler/angler:6.0/MDB08L/2343525:user/release-keys");
setBuildField("MODEL", Build.MODEL + "\u200b");
+ setVersionField("DEVICE_INITIAL_SDK_INT", Build.VERSION_CODES.S);
}
public static void initApplicationBeforeOnCreate(Application app) {
--
2.34.1

View File

@ -0,0 +1,65 @@
From 4ffed064b21d9662631ee70d20dfd8441fcec574 Mon Sep 17 00:00:00 2001
From: Dyneteve <dyneteve@hentaios.com>
Date: Wed, 8 Feb 2023 15:21:01 +0000
Subject: [PATCH 22/22] gmscompat: Make CTS/Play Integrity pass again
The logic behind CTS and Play Integrity has been updated today it now
checks the product and model names against the fingerprint and if
they do not match the CTS profile will fail.
Also while we are at it use a newer FP from Pixel XL and add logging
for key attestation blocking for debugging.
Test: Boot, check for CTS and Play Integrity
Change-Id: I089d5ef935bba40338e10c795ea7d181103ffd15
Signed-off-by: Dyneteve <dyneteve@hentaios.com>
---
.../internal/gmscompat/AttestationHooks.java | 20 +++++++++----------
1 file changed, 9 insertions(+), 11 deletions(-)
diff --git a/core/java/com/android/internal/gmscompat/AttestationHooks.java b/core/java/com/android/internal/gmscompat/AttestationHooks.java
index d2b1d2879c9c..ef7a308a25bc 100644
--- a/core/java/com/android/internal/gmscompat/AttestationHooks.java
+++ b/core/java/com/android/internal/gmscompat/AttestationHooks.java
@@ -72,9 +72,11 @@ public final class AttestationHooks {
private static void spoofBuildGms() {
// Alter model name and fingerprint to avoid hardware attestation enforcement
- setBuildField("FINGERPRINT", "google/angler/angler:6.0/MDB08L/2343525:user/release-keys");
- setBuildField("MODEL", Build.MODEL + "\u200b");
- setVersionField("DEVICE_INITIAL_SDK_INT", Build.VERSION_CODES.S);
+ setBuildField("FINGERPRINT", "google/marlin/marlin:7.1.2/NJH47F/4146041:user/release-keys");
+ setBuildField("PRODUCT", "marlin");
+ setBuildField("DEVICE", "marlin");
+ setBuildField("MODEL", "Pixel XL");
+ setVersionField("DEVICE_INITIAL_SDK_INT", Build.VERSION_CODES.N_MR1);
}
public static void initApplicationBeforeOnCreate(Application app) {
@@ -90,18 +92,14 @@ public final class AttestationHooks {
}
private static boolean isCallerSafetyNet() {
- return Arrays.stream(Thread.currentThread().getStackTrace())
+ return sIsGms && Arrays.stream(Thread.currentThread().getStackTrace())
.anyMatch(elem -> elem.getClassName().contains("DroidGuard"));
}
public static void onEngineGetCertificateChain() {
- // Check stack for SafetyNet
- if (sIsGms && isCallerSafetyNet()) {
- throw new UnsupportedOperationException();
- }
-
- // Check stack for PlayIntegrity
- if (sIsFinsky) {
+ // Check stack for SafetyNet or Play Integrity
+ if (isCallerSafetyNet() || sIsFinsky) {
+ Log.i(TAG, "Blocked key attestation sIsGms=" + sIsGms + " sIsFinsky=" + sIsFinsky);
throw new UnsupportedOperationException();
}
}
--
2.34.1

View File

@ -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

View File

@ -1,7 +1,7 @@
From 80d66b7f255176e7cf761ce9c62c436cb729df71 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 1/3] vendor_lineage: Log privapp-permissions whitelist
Subject: [PATCH 1/2] vendor_lineage: Log privapp-permissions whitelist
violations instead
Change-Id: I49dba61f332253e291a65e79ca70d9a07d45bb07

View File

@ -1,7 +1,7 @@
From 9218670153d5aa40fd05f51d89240fc7859293a2 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Mon, 14 Mar 2022 03:44:59 +0000
Subject: [PATCH 2/3] Revert "overlay: Default to night mode"
Subject: [PATCH 2/2] Revert "overlay: Default to night mode"
This reverts commit 4d4e39a845d54e37b20728f1448ae6e3fde4b97d.

View File

@ -0,0 +1,46 @@
From 45ce666776f48f82151a4fc3c8a3219f3e4c210f 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 1/2] 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 c00e1e98b..490d15215 100755
--- a/tools/buildinfo.sh
+++ b/tools/buildinfo.sh
@@ -9,7 +9,7 @@ if [ "$BOARD_USE_VBMETA_DIGTEST_IN_FINGERPRINT" = "true" ] ; then
else
echo "ro.build.id=$BUILD_ID"
fi
-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"
@@ -23,7 +23,7 @@ echo "ro.build.version.release_or_preview_display=$PLATFORM_DISPLAY_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"
@@ -58,5 +58,10 @@ if [ -n "$BUILD_THUMBPRINT" ] ; then
fi
echo "ro.lineage.device=$LINEAGE_DEVICE"
+echo "ro.lineage.version=LineageOS 20 Self-built CGMod"
+echo "ro.lineage.display.version=LineageOS 20 Self-built CGMod"
+echo "ro.modversion=LineageOS 20 Self-built CGMod"
+
+echo "lockscreen.rot_override=true"
echo "# end build properties"
--
2.25.1

View File

@ -0,0 +1,25 @@
From 1c0c37fd29fb20537eca319cd5c3874127414d8a Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sat, 16 Oct 2021 00:39:15 +0000
Subject: [PATCH 2/2] build: Remove Stk (1/2)
Change-Id: I24ef17c74c3137a11b463cde96c74d0edc853edd
---
target/product/generic_system.mk | 1 -
1 file changed, 1 deletion(-)
diff --git a/target/product/generic_system.mk b/target/product/generic_system.mk
index 1a639ef71..49a080076 100644
--- a/target/product/generic_system.mk
+++ b/target/product/generic_system.mk
@@ -32,7 +32,6 @@ PRODUCT_PACKAGES += \
PRODUCT_PACKAGES += \
LiveWallpapersPicker \
PartnerBookmarksProvider \
- Stk \
Tag \
# OTA support
--
2.25.1

View File

@ -0,0 +1,52 @@
From 64c0e12dc7a4eb6add7631a84dda17e2012f687c Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sun, 18 Jun 2023 19:33:27 +0800
Subject: [PATCH 01/21] Add keylayout for Backbone One for Android, with AB/XY
keys swapped
Change-Id: Ia057c084099015b544c926cd57c37b4ac314867a
---
data/keyboards/Vendor_358a_Product_0201.kl | 31 ++++++++++++++++++++++
1 file changed, 31 insertions(+)
create mode 100644 data/keyboards/Vendor_358a_Product_0201.kl
diff --git a/data/keyboards/Vendor_358a_Product_0201.kl b/data/keyboards/Vendor_358a_Product_0201.kl
new file mode 100644
index 000000000000..e15907f9c6f2
--- /dev/null
+++ b/data/keyboards/Vendor_358a_Product_0201.kl
@@ -0,0 +1,31 @@
+#
+# Backbone One for Android
+#
+
+# AB/XY swapped
+key 305 BUTTON_A
+key 304 BUTTON_B
+key 308 BUTTON_X
+key 307 BUTTON_Y
+
+key 310 BUTTON_L1
+key 311 BUTTON_R1
+key 312 BUTTON_L2
+key 313 BUTTON_R2
+
+key 317 BUTTON_THUMBL
+key 318 BUTTON_THUMBR
+
+axis 0x00 X flat 4096
+axis 0x01 Y flat 4096
+axis 0x02 Z flat 4096
+axis 0x05 RZ flat 4096
+
+axis 0x0a LTRIGGER
+axis 0x09 RTRIGGER
+
+axis 0x10 HAT_X
+axis 0x11 HAT_Y
+
+key 315 BUTTON_START
+key 314 BUTTON_SELECT
--
2.34.1

View File

@ -0,0 +1,389 @@
From 2e9df83d63b2c316a6cec6fcbc253ef0919cf5d3 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 02/21] Add MiuiNavbarOverlay
Change-Id: I0e6791abc3c9521d7dc612df2fec2b041affe7e9
---
packages/overlays/Android.mk | 1 +
.../overlays/MiuiNavbarOverlay/Android.bp | 28 ++++++++++++++++++
.../MiuiNavbarOverlay/AndroidManifest.xml | 22 ++++++++++++++
.../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, 51 insertions(+)
create mode 100644 packages/overlays/MiuiNavbarOverlay/Android.bp
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 69641e69a9f2..1efc296d9689 100644
--- a/packages/overlays/Android.mk
+++ b/packages/overlays/Android.mk
@@ -26,6 +26,7 @@ LOCAL_REQUIRED_MODULES := \
DisplayCutoutEmulationTallOverlay \
DisplayCutoutEmulationWaterfallOverlay \
FontNotoSerifSourceOverlay \
+ MiuiNavbarOverlay \
NavigationBarMode3ButtonOverlay \
NavigationBarModeGesturalOverlay \
NavigationBarModeGesturalOverlayNarrowBack \
diff --git a/packages/overlays/MiuiNavbarOverlay/Android.bp b/packages/overlays/MiuiNavbarOverlay/Android.bp
new file mode 100644
index 000000000000..fc724fb7a686
--- /dev/null
+++ b/packages/overlays/MiuiNavbarOverlay/Android.bp
@@ -0,0 +1,28 @@
+//
+// Copyright 2021, 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 {
+ // See: http://go/android-license-faq
+ // A large-scale-change added 'default_applicable_licenses' to import
+ // all of the 'license_kinds' from "frameworks_base_license"
+ // to get the below license kinds:
+ // SPDX-license-identifier-Apache-2.0
+ default_applicable_licenses: ["frameworks_base_license"],
+}
+
+runtime_resource_overlay {
+ name: "MiuiNavbarOverlay",
+ product_specific: true,
+}
diff --git a/packages/overlays/MiuiNavbarOverlay/AndroidManifest.xml b/packages/overlays/MiuiNavbarOverlay/AndroidManifest.xml
new file mode 100644
index 000000000000..3f10e2e03675
--- /dev/null
+++ b/packages/overlays/MiuiNavbarOverlay/AndroidManifest.xml
@@ -0,0 +1,22 @@
+<!--
+ ~ Copyright (C) 2021 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.34.1

View File

@ -0,0 +1,26 @@
From cf35535a94712e9f81d9532fa4a494a8628b4641 Mon Sep 17 00:00:00 2001
From: Hikari-no-Tenshi <kyryljan.serhij@gmail.com>
Date: Thu, 30 Jan 2020 22:20:54 +0200
Subject: [PATCH 03/21] Disable Bluetooth by default
Change-Id: Iea5d24f977928bf01cd7a46b98c75c0a4bd6a23c
---
packages/SettingsProvider/res/values/defaults.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/SettingsProvider/res/values/defaults.xml b/packages/SettingsProvider/res/values/defaults.xml
index 99b15db780dc..cff3e668f053 100644
--- a/packages/SettingsProvider/res/values/defaults.xml
+++ b/packages/SettingsProvider/res/values/defaults.xml
@@ -36,7 +36,7 @@
<fraction name="def_window_transition_scale">100%</fraction>
<bool name="def_haptic_feedback">true</bool>
- <bool name="def_bluetooth_on">true</bool>
+ <bool name="def_bluetooth_on">false</bool>
<bool name="def_wifi_display_on">false</bool>
<bool name="def_install_non_market_apps">false</bool>
<!-- 0 == off, 3 == on -->
--
2.34.1

View File

@ -0,0 +1,28 @@
From 8201fef9ab532374796549c938ea2fc172bf20f5 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Mon, 27 Sep 2021 16:30:00 +0000
Subject: [PATCH 04/21] Disable cursor drag by default for editable TextViews
Requested by @TadiT7
Change-Id: Id54e38ee418174af8cde4113c849bc292f5fc96d
---
core/java/android/widget/WidgetFlags.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/core/java/android/widget/WidgetFlags.java b/core/java/android/widget/WidgetFlags.java
index fb40ee5ec843..c0c6fb6e9431 100644
--- a/core/java/android/widget/WidgetFlags.java
+++ b/core/java/android/widget/WidgetFlags.java
@@ -38,7 +38,7 @@ public final class WidgetFlags {
/**
* Default value for the flag {@link #ENABLE_CURSOR_DRAG_FROM_ANYWHERE}.
*/
- public static final boolean ENABLE_CURSOR_DRAG_FROM_ANYWHERE_DEFAULT = true;
+ public static final boolean ENABLE_CURSOR_DRAG_FROM_ANYWHERE_DEFAULT = false;
/**
* Threshold for the direction of a swipe gesture in order for it to be handled as a cursor drag
--
2.34.1

View File

@ -0,0 +1,44 @@
From 0dba3680960846702881fed2b3e716825af92d58 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sun, 3 Jul 2022 00:08:42 +0000
Subject: [PATCH 05/21] Disable "RESTRICTED bucket" toast
Change-Id: I20a328d3c77962f3a6095bfca42d0b165a093ce8
---
.../server/usage/AppStandbyController.java | 20 +------------------
1 file changed, 1 insertion(+), 19 deletions(-)
diff --git a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
index b27ff411dd58..5ce49bd98c5c 100644
--- a/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
+++ b/apex/jobscheduler/service/java/com/android/server/usage/AppStandbyController.java
@@ -1792,25 +1792,7 @@ public class AppStandbyController
.noteRestrictionAttempt(packageName, userId, elapsedRealtime, reason);
if (isForcedByUser) {
- // Only user force can bypass the delay restriction. If the user forced the
- // app into the RESTRICTED bucket, then a toast confirming the action
- // shouldn't be surprising.
- // Exclude REASON_SUB_FORCED_USER_FLAG_INTERACTION since the RESTRICTED bucket
- // isn't directly visible in that flow.
- if (Build.IS_DEBUGGABLE
- && (reason & REASON_SUB_MASK)
- != REASON_SUB_FORCED_USER_FLAG_INTERACTION) {
- Toast.makeText(mContext,
- // Since AppStandbyController sits low in the lock hierarchy,
- // make sure not to call out with the lock held.
- mHandler.getLooper(),
- mContext.getResources().getString(
- R.string.as_app_forced_to_restricted_bucket, packageName),
- Toast.LENGTH_SHORT)
- .show();
- } else {
- Slog.i(TAG, packageName + " restricted by user");
- }
+ Slog.i(TAG, packageName + " restricted by user");
} else {
final long timeUntilRestrictPossibleMs = app.lastUsedByUserElapsedTime
+ mInjector.getAutoRestrictedBucketDelayMs() - elapsedRealtime;
--
2.34.1

View File

@ -0,0 +1,169 @@
From c16a1a66b9e311a2dfbf1925d8f17783933571e5 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Thu, 2 Sep 2021 16:15:19 +0000
Subject: [PATCH 06/21] Keyguard: Adjust clock style
Thinner font, less padding and unintrusive colors
Change-Id: I21e5d5bf37d724e75ebce4cd89349e0cc4dfc910
---
.../customization/res/layout/clock_default_large.xml | 1 +
.../customization/res/layout/clock_default_small.xml | 2 +-
packages/SystemUI/customization/res/values/colors.xml | 5 +++++
.../android/systemui/shared/clocks/AnimatableClockView.kt | 2 +-
.../systemui/shared/clocks/DefaultClockController.kt | 4 ++--
.../SystemUI/res-keyguard/layout/keyguard_slice_view.xml | 2 +-
packages/SystemUI/res-keyguard/values/dimens.xml | 6 +++---
packages/SystemUI/res-keyguard/values/styles.xml | 2 --
packages/SystemUI/res/layout/keyguard_status_bar.xml | 2 +-
packages/SystemUI/res/values/styles.xml | 4 ++--
10 files changed, 17 insertions(+), 13 deletions(-)
create mode 100644 packages/SystemUI/customization/res/values/colors.xml
diff --git a/packages/SystemUI/customization/res/layout/clock_default_large.xml b/packages/SystemUI/customization/res/layout/clock_default_large.xml
index 0139d50dcfba..9f5ca7b89213 100644
--- a/packages/SystemUI/customization/res/layout/clock_default_large.xml
+++ b/packages/SystemUI/customization/res/layout/clock_default_large.xml
@@ -26,6 +26,7 @@
android:fontFamily="@*android:string/config_clockFontFamily"
android:typeface="monospace"
android:elegantTextHeight="false"
+ android:fontFeatureSettings="tnum"
chargeAnimationDelay="200"
dozeWeight="200"
lockScreenWeight="400" />
diff --git a/packages/SystemUI/customization/res/layout/clock_default_small.xml b/packages/SystemUI/customization/res/layout/clock_default_small.xml
index ff6d7f9e2240..b63ffce20671 100644
--- a/packages/SystemUI/customization/res/layout/clock_default_small.xml
+++ b/packages/SystemUI/customization/res/layout/clock_default_small.xml
@@ -27,7 +27,7 @@
android:elegantTextHeight="false"
android:ellipsize="none"
android:singleLine="true"
- android:fontFeatureSettings="pnum"
+ android:fontFeatureSettings="tnum"
chargeAnimationDelay="350"
dozeWeight="200"
lockScreenWeight="400" />
diff --git a/packages/SystemUI/customization/res/values/colors.xml b/packages/SystemUI/customization/res/values/colors.xml
new file mode 100644
index 000000000000..f80af4376ff1
--- /dev/null
+++ b/packages/SystemUI/customization/res/values/colors.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<resources>
+ <color name="clock_default_color_dark">@*android:color/primary_text_material_dark</color>
+ <color name="clock_default_color_light">@*android:color/primary_text_material_light</color>
+</resources>
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/AnimatableClockView.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/AnimatableClockView.kt
index 86bd5f2bff5a..b99a8ba487cb 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/AnimatableClockView.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/AnimatableClockView.kt
@@ -146,7 +146,7 @@ class AnimatableClockView @JvmOverloads constructor(
fun refreshTime() {
time.timeInMillis = timeOverrideInMillis ?: System.currentTimeMillis()
contentDescription = DateFormat.format(descFormat, time)
- val formattedText = DateFormat.format(format, time)
+ val formattedText = DateFormat.format(format, time).toString() + ' '
logBuffer?.log(TAG, DEBUG,
{ str1 = formattedText?.toString() },
{ "refreshTime: new formattedText=$str1" }
diff --git a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockController.kt b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockController.kt
index 4df7a44d3e1d..447160a8cb63 100644
--- a/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockController.kt
+++ b/packages/SystemUI/customization/src/com/android/systemui/shared/clocks/DefaultClockController.kt
@@ -143,9 +143,9 @@ class DefaultClockController(
if (seedColor != null) {
seedColor!!
} else if (isRegionDark) {
- resources.getColor(android.R.color.system_accent1_100)
+ resources.getColor(R.color.clock_default_color_dark)
} else {
- resources.getColor(android.R.color.system_accent2_600)
+ resources.getColor(R.color.clock_default_color_light)
}
if (currentColor == color) {
diff --git a/packages/SystemUI/res-keyguard/layout/keyguard_slice_view.xml b/packages/SystemUI/res-keyguard/layout/keyguard_slice_view.xml
index 7c5dbc247428..64657547621f 100644
--- a/packages/SystemUI/res-keyguard/layout/keyguard_slice_view.xml
+++ b/packages/SystemUI/res-keyguard/layout/keyguard_slice_view.xml
@@ -38,7 +38,7 @@
android:id="@+id/row"
android:layout_width="match_parent"
android:layout_height="wrap_content"
- android:orientation="horizontal"
+ android:orientation="vertical"
android:gravity="start"
/>
</com.android.keyguard.KeyguardSliceView>
diff --git a/packages/SystemUI/res-keyguard/values/dimens.xml b/packages/SystemUI/res-keyguard/values/dimens.xml
index edd6eff92c1c..14df77dc4a4e 100644
--- a/packages/SystemUI/res-keyguard/values/dimens.xml
+++ b/packages/SystemUI/res-keyguard/values/dimens.xml
@@ -91,10 +91,10 @@
<dimen name="num_pad_key_margin_end">12dp</dimen>
<!-- additional offset for clock switch area items -->
- <dimen name="clock_padding_start">28dp</dimen>
- <dimen name="below_clock_padding_start">32dp</dimen>
+ <dimen name="clock_padding_start">22dp</dimen>
+ <dimen name="below_clock_padding_start">28dp</dimen>
<dimen name="below_clock_padding_end">16dp</dimen>
- <dimen name="below_clock_padding_start_icons">28dp</dimen>
+ <dimen name="below_clock_padding_start_icons">22dp</dimen>
<!-- Proportion of the screen height to use to set the maximum height of the bouncer to when
the device is in the DEVICE_POSTURE_HALF_OPENED posture, for the PIN/pattern entry. 0 will
diff --git a/packages/SystemUI/res-keyguard/values/styles.xml b/packages/SystemUI/res-keyguard/values/styles.xml
index 04dffb6e8c52..c81e018702bb 100644
--- a/packages/SystemUI/res-keyguard/values/styles.xml
+++ b/packages/SystemUI/res-keyguard/values/styles.xml
@@ -117,8 +117,6 @@
<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>
</style>
<style name="TextAppearance.Keyguard.Secondary">
diff --git a/packages/SystemUI/res/layout/keyguard_status_bar.xml b/packages/SystemUI/res/layout/keyguard_status_bar.xml
index 8b8594032816..9135e78f3e4c 100644
--- a/packages/SystemUI/res/layout/keyguard_status_bar.xml
+++ b/packages/SystemUI/res/layout/keyguard_status_bar.xml
@@ -74,7 +74,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/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 892c2f4caa39..6996e41e08da 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -302,7 +302,7 @@
<item name="darkIconTheme">@style/DualToneDarkTheme</item>
<item name="wallpaperTextColor">@*android:color/primary_text_material_dark</item>
<item name="wallpaperTextColorSecondary">@*android:color/secondary_text_material_dark</item>
- <item name="wallpaperTextColorAccent">@color/material_dynamic_primary90</item>
+ <item name="wallpaperTextColorAccent">@*android:color/primary_text_material_dark</item>
<item name="android:colorError">@*android:color/error_color_material_dark</item>
<item name="*android:lockPatternStyle">@style/LockPatternViewStyle</item>
<item name="lockPatternStyle">@style/LockPatternContainerStyle</item>
@@ -324,7 +324,7 @@
<style name="Theme.SystemUI.LightWallpaper">
<item name="wallpaperTextColor">@*android:color/primary_text_material_light</item>
<item name="wallpaperTextColorSecondary">@*android:color/secondary_text_material_light</item>
- <item name="wallpaperTextColorAccent">@color/material_dynamic_secondary40</item>
+ <item name="wallpaperTextColorAccent">@*android:color/primary_text_material_light</item>
<item name="android:colorError">@*android:color/error_color_material_light</item>
<item name="shadowRadius">0</item>
--
2.34.1

View File

@ -0,0 +1,43 @@
From c9d2af70d90a8cf81dae5bfba93d6f59c0373bdb 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 07/21] Keyguard: Hide padlock unless UDFPS is in use
Fair enough Google, but don't give me that otherwise
Change-Id: Ie91e80ca5c6637a51a8acc72fb28cd6ac2a7abb6
---
.../com/android/keyguard/LockIconViewController.java | 12 +++---------
1 file changed, 3 insertions(+), 9 deletions(-)
diff --git a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java
index 0887b220dee1..423549dd3ab2 100644
--- a/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java
+++ b/packages/SystemUI/src/com/android/keyguard/LockIconViewController.java
@@ -295,20 +295,14 @@ public class LockIconViewController extends ViewController<LockIconView> impleme
return;
}
- boolean wasShowingFpIcon = mUdfpsEnrolled && !mShowUnlockIcon && !mShowLockIcon
+ boolean wasShowingFpIcon = mUdfpsEnrolled && !mShowUnlockIcon
&& !mShowAodUnlockedIcon && !mShowAodLockIcon;
- mShowLockIcon = !mCanDismissLockScreen && !mUserUnlockedWithBiometric && isLockScreen()
- && (!mUdfpsEnrolled || !mRunningFPS);
- mShowUnlockIcon = (mCanDismissLockScreen || mUserUnlockedWithBiometric) && isLockScreen();
+ mShowUnlockIcon = (mCanDismissLockScreen || mUserUnlockedWithBiometric) && isLockScreen() && mUdfpsEnrolled;
mShowAodUnlockedIcon = mIsDozing && mUdfpsEnrolled && !mRunningFPS && mCanDismissLockScreen;
mShowAodLockIcon = mIsDozing && mUdfpsEnrolled && !mRunningFPS && !mCanDismissLockScreen;
final CharSequence prevContentDescription = mView.getContentDescription();
- if (mShowLockIcon) {
- mView.updateIcon(ICON_LOCK, false);
- mView.setContentDescription(mLockedLabel);
- mView.setVisibility(View.VISIBLE);
- } else if (mShowUnlockIcon) {
+ if (mShowUnlockIcon) {
if (wasShowingFpIcon) {
// fp icon was shown by UdfpsView, and now we still want to animate the transition
// in this drawable
--
2.34.1

View File

@ -0,0 +1,28 @@
From ff1164da64003d5a6d6e57fd75ba1d8684167dd7 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Wed, 1 Sep 2021 14:41:53 +0000
Subject: [PATCH 08/21] Keyguard: Never switch to large clock
It looks alright actually, but as always breaks under landscape
Change-Id: I434d033ecae597ed2a7b2ed71e96ba1a963e9cc3
---
.../src/com/android/keyguard/KeyguardClockSwitchController.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
index ba217804c96e..ab3391372e2c 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardClockSwitchController.java
@@ -470,7 +470,7 @@ public class KeyguardClockSwitchController extends ViewController<KeyguardClockS
private void updateDoubleLineClock() {
mCanShowDoubleLineClock = mSecureSettings.getIntForUser(
- Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK, 1,
+ Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK, 0,
UserHandle.USER_CURRENT) != 0;
if (!mCanShowDoubleLineClock) {
--
2.34.1

View File

@ -0,0 +1,150 @@
From a8a951832a14ed9fb5e718a14c4dc9ec73d24693 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 09/21] Keyguard: Refine indication text
Change-Id: Ib771c35610f712a1de34736e817bcfe616ac37d8
---
.../SystemUI/res-keyguard/values/styles.xml | 2 --
.../res/layout/keyguard_bottom_area.xml | 1 +
packages/SystemUI/res/values/dimens.xml | 3 +--
...ardIndicationRotateTextViewController.java | 12 ++++++++++-
.../KeyguardIndicationController.java | 21 ++-----------------
.../phone/KeyguardIndicationTextView.java | 2 +-
6 files changed, 16 insertions(+), 25 deletions(-)
diff --git a/packages/SystemUI/res-keyguard/values/styles.xml b/packages/SystemUI/res-keyguard/values/styles.xml
index c81e018702bb..cc87f9f3d7cf 100644
--- a/packages/SystemUI/res-keyguard/values/styles.xml
+++ b/packages/SystemUI/res-keyguard/values/styles.xml
@@ -132,8 +132,6 @@
<item name="android:maxLines">1</item>
<item name="android:gravity">center</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>
<style name="TextAppearance.Keyguard.BottomArea.Button">
diff --git a/packages/SystemUI/res/layout/keyguard_bottom_area.xml b/packages/SystemUI/res/layout/keyguard_bottom_area.xml
index 4048a39344bd..2f884baf0bd5 100644
--- a/packages/SystemUI/res/layout/keyguard_bottom_area.xml
+++ b/packages/SystemUI/res/layout/keyguard_bottom_area.xml
@@ -35,6 +35,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
+ android:minHeight="48dp"
android:paddingStart="@dimen/keyguard_indication_text_padding"
android:paddingEnd="@dimen/keyguard_indication_text_padding"
android:textAppearance="@style/TextAppearance.Keyguard.BottomArea"
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index ceebab2b08ef..e2c65f5542b7 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -815,11 +815,10 @@
<dimen name="keyguard_lock_height">42dp</dimen>
<dimen name="keyguard_lock_padding">20dp</dimen>
- <dimen name="keyguard_indication_margin_bottom">32dp</dimen>
+ <dimen name="keyguard_indication_margin_bottom">16dp</dimen>
<dimen name="lock_icon_margin_bottom">74dp</dimen>
<dimen name="ambient_indication_margin_bottom">71dp</dimen>
-
<!-- How much two taps can be apart to still be recognized as a double tap on the lockscreen -->
<dimen name="double_tap_slop">32dp</dimen>
diff --git a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardIndicationRotateTextViewController.java b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardIndicationRotateTextViewController.java
index 0745456b3e43..0fc0b9e29fb7 100644
--- a/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardIndicationRotateTextViewController.java
+++ b/packages/SystemUI/src/com/android/systemui/keyguard/KeyguardIndicationRotateTextViewController.java
@@ -224,12 +224,22 @@ public class KeyguardIndicationRotateTextViewController extends
}
/**
- * @return true if there are available indications to show
+ * @return true if there are available non-resting indications to show.
*/
public boolean hasIndications() {
+ if (hasIndication(INDICATION_TYPE_PERSISTENT_UNLOCK_MESSAGE)) {
+ return mIndicationMessages.keySet().size() > 1;
+ }
return mIndicationMessages.keySet().size() > 0;
}
+ /**
+ * @return true if there is an indication of the following type.
+ */
+ public boolean hasIndication(@IndicationType int type) {
+ return mIndicationMessages.containsKey(type);
+ }
+
/**
* Clears all messages in the queue and sets the current message to an empty string.
*/
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
index 2b3444e64acb..b8567d17785a 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java
@@ -407,7 +407,6 @@ public class KeyguardIndicationController {
updateLockScreenDisclosureMsg();
updateLockScreenOwnerInfo();
updateLockScreenBatteryMsg(animate);
- updateLockScreenUserLockedMsg(userId);
updateLockScreenTrustMsg(userId, getTrustGrantedIndication(), getTrustManagedIndication());
updateLockScreenAlignmentMsg();
updateLockScreenLogoutView();
@@ -518,22 +517,6 @@ public class KeyguardIndicationController {
}
}
- private void updateLockScreenUserLockedMsg(int userId) {
- if (!mKeyguardUpdateMonitor.isUserUnlocked(userId)
- || mKeyguardUpdateMonitor.isEncryptedOrLockdown(userId)) {
- mRotateTextViewController.updateIndication(
- INDICATION_TYPE_USER_LOCKED,
- new KeyguardIndication.Builder()
- .setMessage(mContext.getResources().getText(
- com.android.internal.R.string.lockscreen_storage_locked))
- .setTextColor(mInitialTextColorState)
- .build(),
- false);
- } else {
- mRotateTextViewController.hideIndication(INDICATION_TYPE_USER_LOCKED);
- }
- }
-
private void updateBiometricMessage() {
if (mDozing) {
updateDeviceEntryIndication(false);
@@ -626,11 +609,11 @@ public class KeyguardIndicationController {
}
private void updateLockScreenPersistentUnlockMsg() {
- if (!TextUtils.isEmpty(mPersistentUnlockMessage)) {
+ if (!mRotateTextViewController.hasIndications()) {
mRotateTextViewController.updateIndication(
INDICATION_TYPE_PERSISTENT_UNLOCK_MESSAGE,
new KeyguardIndication.Builder()
- .setMessage(mPersistentUnlockMessage)
+ .setMessage(mContext.getResources().getString(R.string.keyguard_unlock))
.setTextColor(mInitialTextColorState)
.build(),
true);
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java
index 9d30cb4c4852..f179194fb0e1 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardIndicationTextView.java
@@ -46,7 +46,7 @@ public class KeyguardIndicationTextView extends TextView {
@StyleRes
private static int sButtonStyleId = R.style.TextAppearance_Keyguard_BottomArea_Button;
- private boolean mAnimationsEnabled = true;
+ private boolean mAnimationsEnabled = false;
private CharSequence mMessage;
private KeyguardIndication mKeyguardIndicationInfo;
--
2.34.1

View File

@ -0,0 +1,165 @@
From 0425dac4b2f22dc37e117b55a0fdefe91f6e2ebb 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 10/21] Keyguard/UI: Fix status bar / quick settings margins
and paddings
Last revised on 2023/03/22, targeting T QPR2
The way I think SB/QS margins/paddings should work:
- Devices with left notch: [notch_definition][status_bar_padding_start][content]...[content][status_bar_padding_end][rounded_corner_content_padding]
- Devices with center or no notch: [rounded_corner_content_padding][status_bar_padding_start][content]...[content][status_bar_padding_end][rounded_corner_content_padding]
Key point being:
- SB (including keyguard) and QS should always act uniformly
- Notch definition should only be the notch itself, without additional padding
- Instead, these paddings should be covered by status_bar_padding_{start|end}
As a result, below changes have been made:
- Change keyguard_carrier_text_margin into a padding and link to status_bar_padding_start
- Add status_bar_padding_{start|end} to quick settings header
- Remove unnecessary margins and paddings if any
Change-Id: Ic91fa398813e1907297bb0892c444d96405950e7
---
packages/SystemUI/res/layout/combined_qs_header.xml | 2 +-
packages/SystemUI/res/layout/keyguard_status_bar.xml | 2 +-
packages/SystemUI/res/values-sw600dp/dimens.xml | 3 ---
packages/SystemUI/res/values/dimens.xml | 2 +-
packages/SystemUI/res/xml/qqs_header.xml | 4 ++--
.../android/systemui/shade/ShadeHeaderController.kt | 10 +++++++---
.../statusbar/phone/KeyguardStatusBarView.java | 7 -------
7 files changed, 12 insertions(+), 18 deletions(-)
diff --git a/packages/SystemUI/res/layout/combined_qs_header.xml b/packages/SystemUI/res/layout/combined_qs_header.xml
index 828a4535e656..65c8e52d00ac 100644
--- a/packages/SystemUI/res/layout/combined_qs_header.xml
+++ b/packages/SystemUI/res/layout/combined_qs_header.xml
@@ -151,4 +151,4 @@
</FrameLayout>
-</com.android.systemui.util.NoRemeasureMotionLayout>
\ No newline at end of file
+</com.android.systemui.util.NoRemeasureMotionLayout>
diff --git a/packages/SystemUI/res/layout/keyguard_status_bar.xml b/packages/SystemUI/res/layout/keyguard_status_bar.xml
index 9135e78f3e4c..ddaea938c858 100644
--- a/packages/SystemUI/res/layout/keyguard_status_bar.xml
+++ b/packages/SystemUI/res/layout/keyguard_status_bar.xml
@@ -69,7 +69,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/values-sw600dp/dimens.xml b/packages/SystemUI/res/values-sw600dp/dimens.xml
index 59becc69506c..9168a5ce1ced 100644
--- a/packages/SystemUI/res/values-sw600dp/dimens.xml
+++ b/packages/SystemUI/res/values-sw600dp/dimens.xml
@@ -28,9 +28,6 @@
<!-- The width of user avatar when on Keyguard -->
<dimen name="multi_user_avatar_keyguard_size">30dp</dimen>
- <!-- Margin on the left side of the carrier text on Keyguard -->
- <dimen name="keyguard_carrier_text_margin">24dp</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 e2c65f5542b7..d0a9055e1905 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -790,7 +790,7 @@
<dimen name="kg_framed_avatar_size">32dp</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>
<!-- Additional translation (downwards) for appearing notifications when going to the full shade
from Keyguard. -->
diff --git a/packages/SystemUI/res/xml/qqs_header.xml b/packages/SystemUI/res/xml/qqs_header.xml
index 00a0444a1c9d..a5c3f8e982ca 100644
--- a/packages/SystemUI/res/xml/qqs_header.xml
+++ b/packages/SystemUI/res/xml/qqs_header.xml
@@ -44,7 +44,7 @@
<Layout
android:layout_width="wrap_content"
android:layout_height="@dimen/new_qs_header_non_clickable_element_height"
- android:layout_marginStart="8dp"
+ android:layout_marginStart="2dp"
app:layout_constrainedWidth="true"
app:layout_constraintStart_toEndOf="@id/clock"
app:layout_constraintEnd_toStartOf="@id/barrier"
@@ -109,4 +109,4 @@
app:layout_constraintHorizontal_bias="1"
/>
</Constraint>
-</ConstraintSet>
\ No newline at end of file
+</ConstraintSet>
diff --git a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
index a6b88370f836..e7632971d37e 100644
--- a/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
+++ b/packages/SystemUI/src/com/android/systemui/shade/ShadeHeaderController.kt
@@ -132,6 +132,8 @@ constructor(
private var roundedCorners = 0
private var cutout: DisplayCutout? = null
+ private var statusBarPaddingStart = 0
+ private var statusBarPaddingEnd = 0
private var lastInsets: WindowInsets? = null
private var textColorPrimary = Color.TRANSPARENT
@@ -364,14 +366,17 @@ constructor(
val cutoutLeft = sbInsets.first
val cutoutRight = sbInsets.second
val hasCornerCutout: Boolean = insetsProvider.currentRotationHasCornerCutout()
+ roundedCorners = resources.getDimensionPixelSize(R.dimen.rounded_corner_content_padding)
+ statusBarPaddingStart = resources.getDimensionPixelSize(R.dimen.status_bar_padding_start)
+ statusBarPaddingEnd = resources.getDimensionPixelSize(R.dimen.status_bar_padding_end)
updateQQSPaddings()
// Set these guides as the left/right limits for content that lives in the top row, using
// cutoutLeft and cutoutRight
var changes =
combinedShadeHeadersConstraintManager.edgesGuidelinesConstraints(
- if (view.isLayoutRtl) cutoutRight else cutoutLeft,
+ (if (view.isLayoutRtl) cutoutRight else cutoutLeft) + statusBarPaddingStart,
header.paddingStart,
- if (view.isLayoutRtl) cutoutLeft else cutoutRight,
+ (if (view.isLayoutRtl) cutoutLeft else cutoutRight) + statusBarPaddingEnd,
header.paddingEnd
)
@@ -483,7 +488,6 @@ constructor(
}
private fun updateResources() {
- roundedCorners = resources.getDimensionPixelSize(R.dimen.rounded_corner_content_padding)
val padding = resources.getDimensionPixelSize(R.dimen.qs_panel_padding)
header.setPadding(padding, header.paddingTop, padding, header.paddingBottom)
updateQQSPaddings()
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 7b6fc66a208d..ab919f4c5882 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java
@@ -164,14 +164,7 @@ public class KeyguardStatusBarView extends RelativeLayout {
mCarrierLabel.setTextSize(TypedValue.COMPLEX_UNIT_PX,
getResources().getDimensionPixelSize(
com.android.internal.R.dimen.text_size_small_material));
- lp = (MarginLayoutParams) mCarrierLabel.getLayoutParams();
- int marginStart = calculateMargin(
- getResources().getDimensionPixelSize(R.dimen.keyguard_carrier_text_margin),
- mPadding.first);
- lp.setMarginStart(marginStart);
-
- mCarrierLabel.setLayoutParams(lp);
updateKeyguardStatusBarHeight();
}
--
2.34.1

View File

@ -0,0 +1,44 @@
From 4803ddab6f362587e769b2aa5d60a041345d26af Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Tue, 31 May 2022 00:00:08 +0000
Subject: [PATCH 11/21] Revert "SystemUI: Add left padding for keyguard slices"
This reverts commit 4a7a4426944e28e70a3eca6a696ff6c7599fb896.
---
.../src/com/android/keyguard/KeyguardSliceView.java | 9 +++------
1 file changed, 3 insertions(+), 6 deletions(-)
diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
index 31d22eb38a24..65a71664e245 100644
--- a/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
+++ b/packages/SystemUI/src/com/android/keyguard/KeyguardSliceView.java
@@ -49,7 +49,6 @@ import com.android.internal.graphics.ColorUtils;
import com.android.settingslib.Utils;
import com.android.systemui.R;
import com.android.systemui.animation.Interpolators;
-import com.android.systemui.keyguard.KeyguardSliceProvider;
import com.android.systemui.util.wakelock.KeepAwakeAnimationListener;
import java.io.PrintWriter;
@@ -446,15 +445,13 @@ public class KeyguardSliceView extends LinearLayout {
private void updatePadding() {
boolean hasText = !TextUtils.isEmpty(getText());
- boolean isDate = Uri.parse(KeyguardSliceProvider.KEYGUARD_DATE_URI).equals(getTag());
int padding = (int) getContext().getResources()
.getDimension(R.dimen.widget_horizontal_padding) / 2;
- int iconPadding = (int) mContext.getResources()
- .getDimension(R.dimen.widget_icon_padding);
// orientation is vertical, so add padding to top & bottom
- setPadding(!isDate ? iconPadding : 0, padding, 0, hasText ? padding : 0);
+ setPadding(0, padding, 0, hasText ? padding : 0);
- setCompoundDrawablePadding(iconPadding);
+ setCompoundDrawablePadding((int) mContext.getResources()
+ .getDimension(R.dimen.widget_icon_padding));
}
@Override
--
2.34.1

View File

@ -0,0 +1,273 @@
From f5ad15c1785d0a458bc2be47f0ef2a8d5283ae86 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sun, 5 Sep 2021 01:20:12 +0000
Subject: [PATCH 12/21] Revert "Update RAT icons to match Silk design"
This reverts commit 084c13c8216f6a899cd3eda04fc1d7acff3d1248.
---
.../res/drawable/ic_3g_mobiledata.xml | 19 ++++++-----
.../res/drawable/ic_4g_mobiledata.xml | 19 ++++++-----
.../res/drawable/ic_5g_mobiledata.xml | 20 +++++------
.../res/drawable/ic_5g_uc_mobiledata.xml | 33 -------------------
.../res/drawable/ic_5g_uw_mobiledata.xml | 33 -------------------
.../res/drawable/ic_carrier_wifi.xml | 15 +++++----
.../res/drawable/ic_lte_mobiledata.xml | 23 +++++++------
.../res/drawable/stat_sys_roaming_large.xml | 10 +++---
8 files changed, 59 insertions(+), 113 deletions(-)
delete mode 100644 packages/SettingsLib/res/drawable/ic_5g_uc_mobiledata.xml
delete mode 100644 packages/SettingsLib/res/drawable/ic_5g_uw_mobiledata.xml
diff --git a/packages/SettingsLib/res/drawable/ic_3g_mobiledata.xml b/packages/SettingsLib/res/drawable/ic_3g_mobiledata.xml
index 413a3873f438..0c942bdf993c 100644
--- a/packages/SettingsLib/res/drawable/ic_3g_mobiledata.xml
+++ b/packages/SettingsLib/res/drawable/ic_3g_mobiledata.xml
@@ -14,14 +14,17 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="21dp"
- android:height="16dp"
- android:viewportWidth="21.0"
- android:viewportHeight="16.0">
+ android:width="12.35dp"
+ android:height="15dp"
+ android:viewportWidth="14"
+ android:viewportHeight="17">
+
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M1.9,7.88h0.77c0.5,0,0.88-0.15,1.15-0.46s0.4-0.72,0.4-1.25c0-1.17-0.45-1.75-1.35-1.75c-0.43,0-0.77,0.16-1.02,0.47 S1.49,5.62,1.49,6.13h-1.2c0-0.8,0.24-1.46,0.73-1.97s1.11-0.78,1.86-0.78c0.78,0,1.41,0.25,1.87,0.73S5.43,5.31,5.43,6.2 c0,0.46-0.12,0.89-0.36,1.29S4.52,8.18,4.14,8.37c0.94,0.35,1.41,1.12,1.41,2.33c0,0.89-0.25,1.6-0.74,2.12 c-0.49,0.53-1.14,0.79-1.94,0.79c-0.79,0-1.43-0.25-1.91-0.75c-0.49-0.5-0.73-1.17-0.73-2.01h1.21c0,0.53,0.13,0.95,0.38,1.26 c0.26,0.31,0.6,0.47,1.05,0.47c0.45,0,0.81-0.15,1.08-0.46s0.4-0.77,0.4-1.39c0-1.21-0.57-1.81-1.72-1.81H1.9V7.88z" />
<path
- android:fillColor="#FF000000"
- android:pathData="M5.29,13.22c-0.57,0 -1.09,-0.11 -1.57,-0.34c-0.47,-0.22 -0.85,-0.54 -1.16,-0.95C2.25,11.52 2.07,11.01 2,10.42l1.47,-0.34c0.07,0.51 0.27,0.92 0.59,1.23c0.32,0.31 0.73,0.46 1.23,0.46c0.52,0 0.94,-0.15 1.26,-0.46c0.33,-0.31 0.49,-0.71 0.49,-1.22c0,-0.51 -0.18,-0.92 -0.53,-1.22c-0.35,-0.31 -0.8,-0.46 -1.36,-0.46H4.37V7.06h0.73c0.47,0 0.86,-0.13 1.18,-0.38c0.32,-0.26 0.48,-0.63 0.48,-1.11c0,-0.42 -0.14,-0.77 -0.41,-1.04C6.08,4.27 5.7,4.14 5.21,4.14c-0.43,0 -0.79,0.13 -1.08,0.38C3.85,4.76 3.67,5.08 3.6,5.48L2.17,5.3C2.23,4.81 2.4,4.38 2.67,4c0.27,-0.38 0.62,-0.69 1.05,-0.91c0.44,-0.22 0.94,-0.34 1.5,-0.34c0.62,0 1.15,0.12 1.6,0.35c0.45,0.23 0.79,0.55 1.04,0.95C8.1,4.46 8.23,4.9 8.23,5.4C8.23,6 8.1,6.48 7.84,6.81C7.58,7.14 7.29,7.4 6.97,7.6v0.08c0.46,0.2 0.84,0.5 1.13,0.91c0.3,0.4 0.45,0.93 0.45,1.58c0,0.58 -0.14,1.1 -0.42,1.55c-0.27,0.46 -0.65,0.82 -1.15,1.09C6.5,13.09 5.93,13.22 5.29,13.22z"/>
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M13.77,12.24l-0.22,0.27c-0.63,0.73-1.55,1.1-2.76,1.1c-1.08,0-1.92-0.36-2.53-1.07c-0.61-0.71-0.93-1.72-0.94-3.02V7.56 c0-1.39,0.28-2.44,0.84-3.13s1.39-1.04,2.51-1.04c0.95,0,1.69,0.26,2.23,0.79s0.83,1.28,0.89,2.26h-1.25 C12.47,5.82,12.3,5.33,12,4.98s-0.74-0.52-1.34-0.52c-0.72,0-1.24,0.23-1.57,0.7S8.59,6.37,8.58,7.4v2.03c0,1,0.19,1.77,0.57,2.31 c0.38,0.54,0.93,0.8,1.65,0.8c0.67,0,1.19-0.16,1.54-0.49l0.18-0.17V9.59H10.7V8.52h3.07V12.24z" />
<path
- android:fillColor="#FF000000"
- android:pathData="M14.44,13.22c-0.88,0 -1.66,-0.21 -2.34,-0.64c-0.67,-0.44 -1.2,-1.05 -1.6,-1.83c-0.38,-0.79 -0.57,-1.71 -0.57,-2.76c0,-1.05 0.21,-1.96 0.62,-2.74c0.41,-0.79 0.97,-1.4 1.67,-1.83c0.7,-0.44 1.5,-0.66 2.39,-0.66c1.09,0 2.01,0.25 2.74,0.76c0.75,0.5 1.22,1.21 1.41,2.11L17.3,6.01c-0.17,-0.56 -0.48,-1 -0.94,-1.32c-0.45,-0.33 -1.03,-0.49 -1.75,-0.49c-0.57,0 -1.09,0.14 -1.57,0.43c-0.48,0.29 -0.85,0.71 -1.13,1.27s-0.42,1.25 -0.42,2.07c0,0.81 0.14,1.5 0.41,2.07c0.28,0.56 0.65,0.98 1.11,1.27c0.47,0.29 0.98,0.43 1.54,0.43c0.57,0 1.06,-0.11 1.47,-0.34c0.42,-0.23 0.75,-0.55 0.99,-0.94c0.25,-0.4 0.41,-0.85 0.46,-1.36h-2.88V7.79h4.37c0,0.87 0,1.74 0,2.6c0,0.87 0,1.74 0,2.6h-1.41v-1.4h-0.08c-0.28,0.49 -0.67,0.88 -1.18,1.18C15.78,13.07 15.17,13.22 14.44,13.22z"/>
+ android:pathData="M 0 0 H 14 V 17 H 0 V 0 Z" />
</vector>
diff --git a/packages/SettingsLib/res/drawable/ic_4g_mobiledata.xml b/packages/SettingsLib/res/drawable/ic_4g_mobiledata.xml
index 1de7d78ff5f2..535f3589ea6b 100644
--- a/packages/SettingsLib/res/drawable/ic_4g_mobiledata.xml
+++ b/packages/SettingsLib/res/drawable/ic_4g_mobiledata.xml
@@ -14,14 +14,17 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="22dp"
- android:height="16dp"
- android:viewportWidth="22.0"
- android:viewportHeight="16.0">
+ android:width="12.35dp"
+ android:height="15dp"
+ android:viewportWidth="14"
+ android:viewportHeight="17">
+
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M5.07,10.13h1.11v1.03H5.07v2.31H3.86v-2.31H0.1v-0.75l3.7-6.9h1.27V10.13z M1.44,10.13h2.42V5.4L1.44,10.13z" />
<path
- android:fillColor="#FF000000"
- android:pathData="M2,10.98V9.81l4.28,-6.83h1.6v6.59h1.19v1.41H7.88V13H6.4v-2.02H2zM3.68,9.57H6.4V5.33H6.31L3.68,9.57z"/>
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M13.9,12.24l-0.22,0.27c-0.63,0.73-1.55,1.1-2.76,1.1c-1.08,0-1.92-0.36-2.53-1.07c-0.61-0.71-0.93-1.72-0.94-3.02V7.56 c0-1.39,0.28-2.44,0.84-3.13s1.39-1.04,2.51-1.04c0.95,0,1.69,0.26,2.23,0.79s0.83,1.28,0.89,2.26h-1.25 c-0.05-0.62-0.22-1.1-0.52-1.45s-0.74-0.52-1.34-0.52c-0.72,0-1.24,0.23-1.57,0.7S8.72,6.37,8.71,7.4v2.03 c0,1,0.19,1.77,0.57,2.31c0.38,0.54,0.93,0.8,1.65,0.8c0.67,0,1.19-0.16,1.54-0.49l0.18-0.17V9.59h-1.82V8.52h3.07V12.24z" />
<path
- android:fillColor="#FF000000"
- android:pathData="M15,13.22c-0.88,0 -1.66,-0.21 -2.34,-0.64c-0.67,-0.44 -1.2,-1.05 -1.6,-1.83c-0.38,-0.79 -0.57,-1.71 -0.57,-2.76c0,-1.05 0.21,-1.96 0.62,-2.74c0.41,-0.79 0.97,-1.4 1.67,-1.83c0.7,-0.44 1.5,-0.66 2.39,-0.66c1.09,0 2.01,0.25 2.74,0.76c0.75,0.5 1.22,1.21 1.41,2.11l-1.47,0.39c-0.17,-0.56 -0.48,-1 -0.94,-1.32c-0.45,-0.33 -1.03,-0.49 -1.75,-0.49c-0.57,0 -1.09,0.14 -1.57,0.43c-0.48,0.29 -0.85,0.71 -1.13,1.27c-0.28,0.56 -0.42,1.25 -0.42,2.07c0,0.81 0.14,1.5 0.41,2.07c0.28,0.56 0.65,0.98 1.11,1.27c0.47,0.29 0.98,0.43 1.54,0.43c0.57,0 1.06,-0.11 1.47,-0.34c0.42,-0.23 0.75,-0.55 0.99,-0.94c0.25,-0.4 0.41,-0.85 0.46,-1.36h-2.88V7.79h4.37c0,0.87 0,1.74 0,2.6c0,0.87 0,1.74 0,2.6h-1.41v-1.4h-0.08c-0.28,0.49 -0.67,0.88 -1.18,1.18C16.34,13.07 15.73,13.22 15,13.22z"/>
+ android:pathData="M 0 0 H 14 V 17 H 0 V 0 Z" />
</vector>
diff --git a/packages/SettingsLib/res/drawable/ic_5g_mobiledata.xml b/packages/SettingsLib/res/drawable/ic_5g_mobiledata.xml
index d961c6c2266f..2aa6e57f6f82 100644
--- a/packages/SettingsLib/res/drawable/ic_5g_mobiledata.xml
+++ b/packages/SettingsLib/res/drawable/ic_5g_mobiledata.xml
@@ -14,14 +14,14 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="21dp"
- android:height="16dp"
- android:viewportWidth="21.0"
- android:viewportHeight="16.0">
- <path
- android:fillColor="#FF000000"
- android:pathData="M5.3,13.22c-0.57,0 -1.1,-0.11 -1.58,-0.34c-0.48,-0.22 -0.87,-0.55 -1.18,-0.98C2.24,11.47 2.06,10.93 2,10.3l1.48,-0.2c0.07,0.5 0.25,0.92 0.56,1.25c0.32,0.32 0.74,0.48 1.26,0.48c0.57,0 1.02,-0.18 1.34,-0.55c0.33,-0.37 0.49,-0.87 0.49,-1.48c0,-0.61 -0.16,-1.09 -0.49,-1.46C6.32,7.96 5.88,7.78 5.32,7.78C5,7.78 4.7,7.85 4.42,8C4.15,8.14 3.93,8.33 3.76,8.56L2.28,7.92l0.6,-4.94h5.26v1.36H4.1L3.72,7.02l0.08,0.03C4,6.87 4.25,6.73 4.55,6.62c0.3,-0.12 0.63,-0.18 1.01,-0.18c0.6,0 1.13,0.14 1.6,0.41C7.62,7.11 7.98,7.5 8.24,8c0.27,0.5 0.41,1.1 0.41,1.79c0,0.66 -0.14,1.26 -0.43,1.78c-0.28,0.51 -0.67,0.92 -1.18,1.22C6.55,13.08 5.97,13.22 5.3,13.22z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M14.51,13.22c-0.88,0 -1.66,-0.21 -2.34,-0.64c-0.67,-0.44 -1.2,-1.05 -1.6,-1.83C10.19,9.95 10,9.03 10,7.99c0,-1.05 0.21,-1.96 0.62,-2.74c0.41,-0.79 0.97,-1.4 1.67,-1.83c0.7,-0.44 1.5,-0.66 2.39,-0.66c1.09,0 2.01,0.25 2.74,0.76c0.75,0.5 1.22,1.21 1.41,2.11l-1.47,0.39c-0.17,-0.56 -0.48,-1 -0.94,-1.32c-0.45,-0.33 -1.03,-0.49 -1.75,-0.49c-0.57,0 -1.09,0.14 -1.57,0.43c-0.48,0.29 -0.85,0.71 -1.13,1.27s-0.42,1.25 -0.42,2.07c0,0.81 0.14,1.5 0.41,2.07c0.28,0.56 0.65,0.98 1.11,1.27c0.47,0.29 0.98,0.43 1.54,0.43c0.57,0 1.06,-0.11 1.47,-0.34c0.42,-0.23 0.75,-0.55 0.99,-0.94c0.25,-0.4 0.41,-0.85 0.46,-1.36h-2.88V7.79h4.37c0,0.87 0,1.74 0,2.6c0,0.87 0,1.74 0,2.6H17.6v-1.4h-0.08c-0.28,0.49 -0.67,0.88 -1.18,1.18C15.85,13.07 15.24,13.22 14.51,13.22z"/>
+ android:width="14dp"
+ android:height="17dp"
+ android:viewportWidth="14"
+ android:viewportHeight="17">
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M13.9,12.24l-0.22,0.27c-0.63,0.73 -1.55,1.1 -2.76,1.1c-1.08,0 -1.92,-0.36 -2.53,-1.07s-0.93,-1.72 -0.94,-3.02V7.56c0,-1.39 0.28,-2.44 0.84,-3.13s1.39,-1.04 2.51,-1.04c0.95,0 1.69,0.26 2.23,0.79s0.83,1.28 0.89,2.26h-1.25c-0.05,-0.62 -0.22,-1.1 -0.52,-1.45s-0.74,-0.52 -1.34,-0.52c-0.72,0 -1.24,0.23 -1.57,0.7S8.72,6.37 8.71,7.4v2.03c0,1 0.19,1.77 0.57,2.31c0.38,0.54 0.93,0.8 1.65,0.8c0.67,0 1.19,-0.16 1.54,-0.49l0.18,-0.17V9.59h-1.82V8.52h3.07V12.24z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M1.15,8.47l0.43,-4.96h4.33v1.17H2.6L2.37,7.39C2.78,7.1 3.22,6.96 3.69,6.96c0.77,0 1.38,0.3 1.83,0.9s0.66,1.41 0.66,2.43c0,1.03 -0.24,1.84 -0.72,2.43S4.32,13.6 3.48,13.6c-0.75,0 -1.36,-0.24 -1.83,-0.73s-0.74,-1.16 -0.81,-2.02h1.13c0.07,0.57 0.23,1 0.49,1.29c0.26,0.29 0.59,0.43 1.01,0.43c0.47,0 0.84,-0.2 1.1,-0.61c0.26,-0.41 0.4,-0.96 0.4,-1.65c0,-0.65 -0.14,-1.18 -0.43,-1.59S3.88,8.09 3.4,8.09c-0.4,0 -0.72,0.1 -0.96,0.31L2.11,8.73L1.15,8.47z"/>
</vector>
diff --git a/packages/SettingsLib/res/drawable/ic_5g_uc_mobiledata.xml b/packages/SettingsLib/res/drawable/ic_5g_uc_mobiledata.xml
deleted file mode 100644
index 93fcad298c3f..000000000000
--- a/packages/SettingsLib/res/drawable/ic_5g_uc_mobiledata.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
- Copyright (C) 2021 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:width="27dp"
- android:height="16dp"
- android:viewportWidth="27.0"
- android:viewportHeight="16.0">
- <path
- android:fillColor="#FF000000"
- android:pathData="M5.3,13.22c-0.57,0 -1.1,-0.11 -1.58,-0.34c-0.48,-0.22 -0.87,-0.55 -1.18,-0.98C2.24,11.47 2.06,10.93 2,10.3l1.48,-0.2c0.07,0.5 0.25,0.92 0.56,1.25c0.32,0.32 0.74,0.48 1.26,0.48c0.57,0 1.02,-0.18 1.34,-0.55c0.33,-0.37 0.49,-0.87 0.49,-1.48c0,-0.61 -0.16,-1.09 -0.49,-1.46C6.32,7.96 5.88,7.78 5.32,7.78C5,7.78 4.7,7.85 4.42,8C4.15,8.14 3.93,8.33 3.76,8.56L2.28,7.92l0.6,-4.94h5.26v1.36H4.1L3.72,7.02l0.08,0.03C4,6.87 4.25,6.73 4.55,6.62c0.3,-0.12 0.63,-0.18 1.01,-0.18c0.6,0 1.13,0.14 1.6,0.41C7.62,7.11 7.98,7.5 8.24,8c0.27,0.5 0.41,1.1 0.41,1.79c0,0.66 -0.14,1.26 -0.43,1.78c-0.28,0.51 -0.67,0.92 -1.18,1.22C6.55,13.08 5.97,13.22 5.3,13.22z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M14.51,13.22c-0.88,0 -1.66,-0.21 -2.34,-0.64c-0.67,-0.44 -1.2,-1.05 -1.6,-1.83C10.19,9.95 10,9.03 10,7.99c0,-1.05 0.21,-1.96 0.62,-2.74c0.41,-0.79 0.97,-1.4 1.67,-1.83c0.7,-0.44 1.5,-0.66 2.39,-0.66c1.09,0 2.01,0.25 2.74,0.76c0.75,0.5 1.22,1.21 1.41,2.11l-1.47,0.39c-0.17,-0.56 -0.48,-1 -0.94,-1.32c-0.45,-0.33 -1.03,-0.49 -1.75,-0.49c-0.57,0 -1.09,0.14 -1.57,0.43c-0.48,0.29 -0.85,0.71 -1.13,1.27s-0.42,1.25 -0.42,2.07c0,0.81 0.14,1.5 0.41,2.07c0.28,0.56 0.65,0.98 1.11,1.27c0.47,0.29 0.98,0.43 1.54,0.43c0.57,0 1.06,-0.11 1.47,-0.34c0.42,-0.23 0.75,-0.55 0.99,-0.94c0.25,-0.4 0.41,-0.85 0.46,-1.36h-2.88V7.79h4.37c0,0.87 0,1.74 0,2.6c0,0.87 0,1.74 0,2.6H17.6v-1.4h-0.08c-0.28,0.49 -0.67,0.88 -1.18,1.18C15.85,13.07 15.24,13.22 14.51,13.22z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M23,7.39c-0.53,0 -0.94,-0.16 -1.25,-0.47C21.45,6.6 21.3,6.16 21.3,5.6V3h0.8v2.66c0,0.3 0.08,0.54 0.23,0.71C22.48,6.54 22.7,6.62 23,6.62c0.3,0 0.52,-0.08 0.67,-0.25c0.15,-0.17 0.23,-0.41 0.23,-0.71V3h0.8v2.6c0,0.36 -0.07,0.67 -0.2,0.94s-0.33,0.48 -0.58,0.62C23.65,7.32 23.35,7.39 23,7.39z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M22.99,13.1c-0.39,0 -0.73,-0.09 -1.03,-0.28c-0.3,-0.19 -0.53,-0.45 -0.7,-0.79C21.08,11.7 21,11.3 21,10.85c0,-0.46 0.08,-0.85 0.25,-1.19c0.17,-0.34 0.41,-0.6 0.71,-0.78c0.3,-0.18 0.65,-0.28 1.04,-0.28c0.31,0 0.59,0.05 0.86,0.16c0.26,0.11 0.48,0.27 0.65,0.48c0.18,0.21 0.28,0.48 0.32,0.8l-0.83,0.14c-0.06,-0.26 -0.17,-0.46 -0.35,-0.6C23.49,9.44 23.27,9.37 23,9.37c-0.22,0 -0.42,0.06 -0.61,0.17c-0.18,0.11 -0.32,0.28 -0.43,0.5c-0.1,0.22 -0.16,0.49 -0.16,0.81c0,0.32 0.05,0.58 0.16,0.8s0.25,0.39 0.43,0.5c0.18,0.11 0.38,0.17 0.61,0.17c0.26,0 0.47,-0.07 0.65,-0.21c0.18,-0.14 0.3,-0.34 0.35,-0.59l0.85,0.09c-0.06,0.29 -0.17,0.54 -0.32,0.77c-0.15,0.22 -0.36,0.39 -0.61,0.52C23.66,13.03 23.35,13.1 22.99,13.1z"/>
-</vector>
diff --git a/packages/SettingsLib/res/drawable/ic_5g_uw_mobiledata.xml b/packages/SettingsLib/res/drawable/ic_5g_uw_mobiledata.xml
deleted file mode 100644
index ca47b6ff2edb..000000000000
--- a/packages/SettingsLib/res/drawable/ic_5g_uw_mobiledata.xml
+++ /dev/null
@@ -1,33 +0,0 @@
-<!--
- Copyright (C) 2021 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:width="27dp"
- android:height="16dp"
- android:viewportWidth="27.0"
- android:viewportHeight="16.0">
- <path
- android:fillColor="#FF000000"
- android:pathData="M5.3,13.22c-0.57,0 -1.1,-0.11 -1.58,-0.34c-0.48,-0.22 -0.87,-0.55 -1.18,-0.98C2.24,11.47 2.06,10.93 2,10.3l1.48,-0.2c0.07,0.5 0.25,0.92 0.56,1.25c0.32,0.32 0.74,0.48 1.26,0.48c0.57,0 1.02,-0.18 1.34,-0.55c0.33,-0.37 0.49,-0.87 0.49,-1.48c0,-0.61 -0.16,-1.09 -0.49,-1.46C6.32,7.96 5.88,7.78 5.32,7.78C5,7.78 4.7,7.85 4.42,8C4.15,8.14 3.93,8.33 3.76,8.56L2.28,7.92l0.6,-4.94h5.26v1.36H4.1L3.72,7.02l0.08,0.03C4,6.87 4.25,6.73 4.55,6.62c0.3,-0.12 0.63,-0.18 1.01,-0.18c0.6,0 1.13,0.14 1.6,0.41C7.62,7.11 7.98,7.5 8.24,8c0.27,0.5 0.41,1.1 0.41,1.79c0,0.66 -0.14,1.26 -0.43,1.78c-0.28,0.51 -0.67,0.92 -1.18,1.22C6.55,13.08 5.97,13.22 5.3,13.22z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M14.51,13.22c-0.88,0 -1.66,-0.21 -2.34,-0.64c-0.67,-0.44 -1.2,-1.05 -1.6,-1.83C10.19,9.95 10,9.03 10,7.99c0,-1.05 0.21,-1.96 0.62,-2.74c0.41,-0.79 0.97,-1.4 1.67,-1.83c0.7,-0.44 1.5,-0.66 2.39,-0.66c1.09,0 2.01,0.25 2.74,0.76c0.75,0.5 1.22,1.21 1.41,2.11l-1.47,0.39c-0.17,-0.56 -0.48,-1 -0.94,-1.32c-0.45,-0.33 -1.03,-0.49 -1.75,-0.49c-0.57,0 -1.09,0.14 -1.57,0.43c-0.48,0.29 -0.85,0.71 -1.13,1.27s-0.42,1.25 -0.42,2.07c0,0.81 0.14,1.5 0.41,2.07c0.28,0.56 0.65,0.98 1.11,1.27c0.47,0.29 0.98,0.43 1.54,0.43c0.57,0 1.06,-0.11 1.47,-0.34c0.42,-0.23 0.75,-0.55 0.99,-0.94c0.25,-0.4 0.41,-0.85 0.46,-1.36h-2.88V7.79h4.37c0,0.87 0,1.74 0,2.6c0,0.87 0,1.74 0,2.6H17.6v-1.4h-0.08c-0.28,0.49 -0.67,0.88 -1.18,1.18C15.85,13.07 15.24,13.22 14.51,13.22z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M23,7.39c-0.53,0 -0.94,-0.16 -1.25,-0.47C21.45,6.6 21.3,6.16 21.3,5.6V3h0.8v2.66c0,0.3 0.08,0.54 0.23,0.71C22.48,6.54 22.7,6.62 23,6.62c0.3,0 0.52,-0.08 0.67,-0.25c0.15,-0.17 0.23,-0.41 0.23,-0.71V3h0.8v2.6c0,0.36 -0.07,0.67 -0.2,0.94s-0.33,0.48 -0.58,0.62C23.65,7.32 23.35,7.39 23,7.39z"/>
- <path
- android:fillColor="#FF000000"
- android:pathData="M21.41,13L20.3,8.7h0.73l0.64,2.78l0.07,0.38h0.04l0.09,-0.38l0.81,-2.78h0.66l0.79,2.78l0.09,0.37h0.04l0.07,-0.37l0.65,-2.78h0.72L24.59,13H23.9l-0.78,-2.84l-0.1,-0.41h-0.04l-0.1,0.41L22.08,13H21.41z"/>
-</vector>
diff --git a/packages/SettingsLib/res/drawable/ic_carrier_wifi.xml b/packages/SettingsLib/res/drawable/ic_carrier_wifi.xml
index 22bcf7b8c8a3..ed9d85e3cbe4 100644
--- a/packages/SettingsLib/res/drawable/ic_carrier_wifi.xml
+++ b/packages/SettingsLib/res/drawable/ic_carrier_wifi.xml
@@ -14,14 +14,17 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="24dp"
- android:height="16dp"
- android:viewportWidth="24.0"
- android:viewportHeight="16.0">
+ android:width="38dp"
+ android:height="24dp"
+ android:viewportWidth="38.0"
+ android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
- android:pathData="M4.59,13L2,2.98h1.69l1.5,6.48l0.17,0.88h0.08l0.21,-0.88l1.89,-6.48h1.54l1.83,6.48l0.21,0.87h0.08l0.15,-0.87l1.51,-6.48h1.68L12.01,13H10.4L8.58,6.36L8.36,5.4H8.27L8.05,6.36L6.16,13H4.59z"/>
+ android:pathData="M9.45,14.48h1.8c-0.05,0.98 -0.24,1.82 -0.6,2.53c-0.35,0.7 -0.85,1.24 -1.51,1.62c-0.66,0.38 -1.48,0.57 -2.47,0.57c-0.71,0 -1.35,-0.14 -1.92,-0.42c-0.57,-0.28 -1.06,-0.68 -1.47,-1.2c-0.4,-0.53 -0.71,-1.16 -0.93,-1.89c-0.21,-0.74 -0.32,-1.56 -0.32,-2.48v-2.63c0,-0.91 0.11,-1.74 0.32,-2.47c0.22,-0.74 0.54,-1.36 0.95,-1.88C3.71,5.69 4.21,5.29 4.8,5.01c0.6,-0.28 1.28,-0.42 2.03,-0.42c0.92,0 1.71,0.19 2.34,0.56c0.64,0.36 1.14,0.9 1.48,1.61c0.35,0.7 0.55,1.57 0.59,2.59h-1.8C9.41,8.59 9.29,7.98 9.1,7.52C8.91,7.04 8.63,6.69 8.26,6.47C7.9,6.24 7.42,6.13 6.84,6.13c-0.52,0 -0.97,0.1 -1.36,0.31C5.1,6.65 4.79,6.95 4.54,7.34C4.3,7.72 4.12,8.19 3.99,8.74c-0.12,0.54 -0.18,1.15 -0.18,1.82v2.65c0,0.62 0.05,1.21 0.15,1.75c0.1,0.54 0.27,1.02 0.49,1.43c0.23,0.4 0.52,0.72 0.89,0.95c0.36,0.23 0.81,0.34 1.33,0.34c0.66,0 1.18,-0.11 1.56,-0.32c0.38,-0.21 0.67,-0.56 0.85,-1.03C9.27,15.85 9.39,15.23 9.45,14.48z"/>
<path
android:fillColor="#FF000000"
- android:pathData="M15.77,9.85V8.56h2.46V6.1h1.3v2.46H22v1.29h-2.46v2.46h-1.3V9.85H15.77z"/>
+ android:pathData="M24.87,4.78l-1.74,9.72l-0.2,1.64l-0.29,-1.44l-2.21,-9.92l-0.2,0l-1.06,0l-0.22,0l-2.28,9.92l-0.28,1.4l-0.18,-1.59l-1.78,-9.73l-1.79,0l2.83,14.22l0.34,0l0.92,0l0.35,0l2.48,-10.36l0.14,-0.84l0.15,0.84l2.36,10.36l0.36,0l0.92,0l0.34,0l2.82,-14.22z"/>
+ <path
+ android:fillColor="#FF000000"
+ android:pathData="M35.72,6.32l0,-1.54l-5.61,0l-0.34,0l-1.45,0l0,14.22l1.79,0l0,-6.28l4.8,0l0,-1.54l-4.8,0l0,-4.86z"/>
</vector>
diff --git a/packages/SettingsLib/res/drawable/ic_lte_mobiledata.xml b/packages/SettingsLib/res/drawable/ic_lte_mobiledata.xml
index 739e29d886c2..e6b4fb698242 100644
--- a/packages/SettingsLib/res/drawable/ic_lte_mobiledata.xml
+++ b/packages/SettingsLib/res/drawable/ic_lte_mobiledata.xml
@@ -14,17 +14,20 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="26dp"
- android:height="16dp"
- android:viewportWidth="26.0"
- android:viewportHeight="16.0">
+ android:width="15.88dp"
+ android:height="15dp"
+ android:viewportWidth="18"
+ android:viewportHeight="17">
+
+ <path
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M1.34,12.4h3.9v1.07H0.08V3.52h1.26V12.4z" />
<path
- android:fillColor="#FF000000"
- android:pathData="M2,13V2.98h1.53v8.57H8.3V13H2z"/>
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M11.1,4.6H8.48v8.88H7.23V4.6H4.62V3.52h6.48V4.6z" />
<path
- android:fillColor="#FF000000"
- android:pathData="M11.24,13V4.43H8.19V2.98h7.63v1.46h-3.05V13H11.24z"/>
+ android:fillColor="#FFFFFFFF"
+ android:pathData="M17.34,8.88h-3.52v3.53h4.1v1.07h-5.35V3.52h5.28V4.6h-4.03V7.8h3.52V8.88z" />
<path
- android:fillColor="#FF000000"
- android:pathData="M17.41,13V2.98h6.36v1.46h-4.83v2.65h4.4v1.46h-4.4v3.01h4.83V13H17.41z"/>
+ android:pathData="M 0 0 H 18 V 17 H 0 V 0 Z" />
</vector>
diff --git a/packages/SystemUI/res/drawable/stat_sys_roaming_large.xml b/packages/SystemUI/res/drawable/stat_sys_roaming_large.xml
index 48faeb22416f..1511659ea42f 100644
--- a/packages/SystemUI/res/drawable/stat_sys_roaming_large.xml
+++ b/packages/SystemUI/res/drawable/stat_sys_roaming_large.xml
@@ -14,11 +14,11 @@
limitations under the License.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
- android:width="16dp"
- android:height="16dp"
- android:viewportWidth="16.0"
- android:viewportHeight="16.0">
+ android:width="@dimen/signal_icon_size"
+ android:height="@dimen/signal_icon_size"
+ android:viewportWidth="24.0"
+ android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
- android:pathData="M4.5,13.02V3h3.93c0.97,0 1.75,0.27 2.34,0.81c0.6,0.53 0.9,1.28 0.9,2.25c0,0.63 -0.19,1.2 -0.56,1.74c-0.37,0.53 -0.95,0.91 -1.74,1.12l2.45,4.02v0.08h-1.69L7.75,9.09H6.03v3.93H4.5zM8.46,4.44H6.03v3.23h2.44c0.49,0 0.9,-0.14 1.2,-0.41c0.31,-0.28 0.46,-0.69 0.46,-1.22s-0.15,-0.93 -0.45,-1.2C9.38,4.58 8.98,4.44 8.46,4.44z"/>
+ android:pathData="M14.21,12.81c0.36,-0.16 0.69,-0.36 0.97,-0.61c0.41,-0.38 0.72,-0.83 0.94,-1.37c0.21,-0.54 0.32,-1.14 0.32,-1.79c0,-0.92 -0.16,-1.7 -0.49,-2.33c-0.32,-0.64 -0.79,-1.12 -1.43,-1.45c-0.62,-0.33 -1.4,-0.49 -2.32,-0.49H8.23V19h1.8v-5.76h2.5L15.06,19h1.92v-0.12L14.21,12.81zM10.03,11.71V6.32h2.18c0.59,0 1.06,0.11 1.42,0.34c0.36,0.22 0.62,0.54 0.78,0.95c0.16,0.41 0.24,0.89 0.24,1.44c0,0.49 -0.09,0.93 -0.27,1.34c-0.18,0.4 -0.46,0.73 -0.82,0.97c-0.36,0.23 -0.82,0.35 -1.37,0.35H10.03z"/>
</vector>
--
2.34.1

View File

@ -0,0 +1,29 @@
From 15e59be158a3305a17e14cc18883d323d2afc54b Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Thu, 29 Sep 2022 11:27:57 +0000
Subject: [PATCH 13/21] Revert "Use the default top clock margin on h800
devices"
This reverts commits 50ba380f4d8d1c2523e0f76295ca556038796bfd
and 2a254b4d479029aec46f79a0ed14ffab6d0424bc.
---
packages/SystemUI/res/values-h800dp/dimens.xml | 3 +++
1 file changed, 3 insertions(+)
diff --git a/packages/SystemUI/res/values-h800dp/dimens.xml b/packages/SystemUI/res/values-h800dp/dimens.xml
index 3a71994e07e2..4b9bce0eda99 100644
--- a/packages/SystemUI/res/values-h800dp/dimens.xml
+++ b/packages/SystemUI/res/values-h800dp/dimens.xml
@@ -15,6 +15,9 @@
-->
<resources>
+ <!-- Minimum margin between clock and top of screen or ambient indication -->
+ <dimen name="keyguard_clock_top_margin">38dp</dimen>
+
<!-- With the large clock, move up slightly from the center -->
<dimen name="keyguard_large_clock_top_margin">-112dp</dimen>
--
2.34.1

View File

@ -0,0 +1,68 @@
From 6927e68fa4ec001ec72e9f68e4454a37c8bc7bb5 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 14/21] 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
---
.../com/android/server/wm/DisplayFrames.java | 28 +++----------------
.../com/android/server/wm/DisplayPolicy.java | 1 +
2 files changed, 5 insertions(+), 24 deletions(-)
diff --git a/services/core/java/com/android/server/wm/DisplayFrames.java b/services/core/java/com/android/server/wm/DisplayFrames.java
index 33641f72b2ff..6e201970ac03 100644
--- a/services/core/java/com/android/server/wm/DisplayFrames.java
+++ b/services/core/java/com/android/server/wm/DisplayFrames.java
@@ -92,30 +92,10 @@ public class DisplayFrames {
state.setRoundedCorners(roundedCorners);
state.setPrivacyIndicatorBounds(indicatorBounds);
state.getDisplayCutoutSafe(safe);
- if (safe.left > unrestricted.left) {
- state.getSource(ITYPE_LEFT_DISPLAY_CUTOUT).setFrame(
- unrestricted.left, unrestricted.top, safe.left, unrestricted.bottom);
- } else {
- state.removeSource(ITYPE_LEFT_DISPLAY_CUTOUT);
- }
- if (safe.top > unrestricted.top) {
- state.getSource(ITYPE_TOP_DISPLAY_CUTOUT).setFrame(
- unrestricted.left, unrestricted.top, unrestricted.right, safe.top);
- } else {
- state.removeSource(ITYPE_TOP_DISPLAY_CUTOUT);
- }
- if (safe.right < unrestricted.right) {
- state.getSource(ITYPE_RIGHT_DISPLAY_CUTOUT).setFrame(
- safe.right, unrestricted.top, unrestricted.right, unrestricted.bottom);
- } else {
- state.removeSource(ITYPE_RIGHT_DISPLAY_CUTOUT);
- }
- if (safe.bottom < unrestricted.bottom) {
- state.getSource(ITYPE_BOTTOM_DISPLAY_CUTOUT).setFrame(
- unrestricted.left, safe.bottom, unrestricted.right, unrestricted.bottom);
- } else {
- state.removeSource(ITYPE_BOTTOM_DISPLAY_CUTOUT);
- }
+ state.removeSource(ITYPE_LEFT_DISPLAY_CUTOUT);
+ state.removeSource(ITYPE_TOP_DISPLAY_CUTOUT);
+ state.removeSource(ITYPE_RIGHT_DISPLAY_CUTOUT);
+ state.removeSource(ITYPE_BOTTOM_DISPLAY_CUTOUT);
return true;
}
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index 1468360b37b7..a1f70e4c8deb 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -1558,6 +1558,7 @@ public class DisplayPolicy {
displayFrames = win.getDisplayFrames(displayFrames);
final WindowManager.LayoutParams attrs = win.mAttrs.forRotation(displayFrames.mRotation);
+ attrs.layoutInDisplayCutoutMode = LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS;
sTmpClientFrames.attachedFrame = attached != null ? attached.getFrame() : null;
// If this window has different LayoutParams for rotations, we cannot trust its requested
--
2.34.1

View File

@ -0,0 +1,28 @@
From 89c565bf1a9ce56a64191059424bf9f5fe04f1d9 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Wed, 1 Sep 2021 14:10:50 +0000
Subject: [PATCH 15/21] UI: Kill rounded corners in notification scrim
Rounded corners in S is nicely implemented, but this is one occasion where it looks out of place
Change-Id: I09ed59e0e658ebd512a9d02a8ef3edfe2c9888da
---
packages/SystemUI/res/values/dimens.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/SystemUI/res/values/dimens.xml b/packages/SystemUI/res/values/dimens.xml
index d0a9055e1905..30881992795d 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -726,7 +726,7 @@
<!-- With the large clock, move up slightly from the center -->
<dimen name="keyguard_large_clock_top_margin">-60dp</dimen>
- <dimen name="notification_scrim_corner_radius">32dp</dimen>
+ <dimen name="notification_scrim_corner_radius">0dp</dimen>
<!-- The minimum amount the user needs to swipe to go to the camera / phone. -->
<dimen name="keyguard_min_swipe_amount">110dp</dimen>
--
2.34.1

View File

@ -0,0 +1,32 @@
From be2477f3314d044e1d7581905a4d358aa0f0a2a7 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 16/21] UI: Reconfigure power menu items
Change-Id: I32cca6e2c6bb64d891efee959127edf7c0802cbc
---
core/res/res/values/config.xml | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/core/res/res/values/config.xml b/core/res/res/values/config.xml
index 87e3ddcf8fdf..64d592b2230b 100644
--- a/core/res/res/values/config.xml
+++ b/core/res/res/values/config.xml
@@ -3305,13 +3305,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
--
2.34.1

View File

@ -0,0 +1,26 @@
From f22928416285a9ac0ab6f8cd683c8dd5d95bf15b Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sat, 5 Mar 2022 01:43:37 +0000
Subject: [PATCH 17/21] UI: Reconfigure quick settings tiles
Change-Id: I743f52ef3a95db0ca2c02ae973faa4629e41885d
---
packages/SystemUI/res/values/config.xml | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 418bbc7c7932..245bde4c543a 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -68,7 +68,7 @@
<!-- The default tiles to display in QuickSettings -->
<string name="quick_settings_tiles_default" translatable="false">
- internet,bt,flashlight,dnd,alarm,airplane,controls,wallet,rotation,battery,cast,screenrecord,mictoggle,cameratoggle
+ wifi,cell,hotspot,location,rotation,flashlight
</string>
<!-- The class path of the Safety Quick Settings Tile -->
--
2.34.1

View File

@ -0,0 +1,28 @@
From fe8362152cdb0a17376ffedb37030cc57d14b375 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 18/21] 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 a34a50c4b7b0..028f77fb21b0 100644
--- a/core/java/android/app/WallpaperColors.java
+++ b/core/java/android/app/WallpaperColors.java
@@ -580,7 +580,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.34.1

View File

@ -0,0 +1,32 @@
From a0cd4caf1cd92218e44db206ec2f67839ce4dbe8 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Tue, 19 Oct 2021 12:09:34 +0000
Subject: [PATCH 19/21] UI: Remove privacy dot
Change-Id: I5d2e2b3e36f027b4348a83030d4b4d3c4f0209d1
---
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 30881992795d..7ead38868815 100644
--- a/packages/SystemUI/res/values/dimens.xml
+++ b/packages/SystemUI/res/values/dimens.xml
@@ -1059,12 +1059,12 @@
<dimen name="ongoing_appops_chip_min_width">56dp</dimen>
<!-- Three privacy items. This value must not be exceeded -->
<dimen name="ongoing_appops_chip_max_width">76dp</dimen>
- <dimen name="ongoing_appops_dot_diameter">6dp</dimen>
+ <dimen name="ongoing_appops_dot_diameter">0dp</dimen>
<dimen name="ongoing_appops_chip_min_animation_width">10dp</dimen>
<dimen name="ongoing_appops_chip_animation_in_status_bar_translation_x">15dp</dimen>
<dimen name="ongoing_appops_chip_animation_out_status_bar_translation_x">7dp</dimen>
<!-- Total minimum padding to enforce to ensure that the dot can always show -->
- <dimen name="ongoing_appops_dot_min_padding">20dp</dimen>
+ <dimen name="ongoing_appops_dot_min_padding">0dp</dimen>
<dimen name="ongoing_appops_dialog_side_margins">@dimen/notification_shade_content_margin_horizontal</dimen>
--
2.34.1

View File

@ -0,0 +1,35 @@
From 7cacf0df0092432cd2347e0cbae0c1c3d0f5dcf9 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Wed, 22 Mar 2023 00:29:13 +0000
Subject: [PATCH 20/21] UI: Restore quick settings fonts to pre-T-QPR2
TODO: Large header clock looks better in Regular - perhaps figure out how to transition smoothly?
Change-Id: If2e57fee61b6bd4b6b7fedc7e3011164cd2cb56f
---
packages/SystemUI/res/values/styles.xml | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/packages/SystemUI/res/values/styles.xml b/packages/SystemUI/res/values/styles.xml
index 6996e41e08da..5e6d45ac9305 100644
--- a/packages/SystemUI/res/values/styles.xml
+++ b/packages/SystemUI/res/values/styles.xml
@@ -134,7 +134,7 @@
<!-- This is hard coded to be sans-serif-condensed to match the icons -->
<style name="TextAppearance.QS.Status">
- <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
+ <item name="android:fontFamily">@*android:string/config_headlineFontFamilyMedium</item>
<item name="android:textColor">?android:attr/textColorPrimary</item>
<item name="android:textSize">14sp</item>
<item name="android:letterSpacing">0.01</item>
@@ -152,6 +152,7 @@
</style>
<style name="TextAppearance.QS.Status.Build">
+ <item name="android:fontFamily">@*android:string/config_headlineFontFamily</item>
<item name="android:textColor">?android:attr/textColorSecondary</item>
</style>
--
2.34.1

View File

@ -0,0 +1,47 @@
From 9732bf6c88d489f587e62d9f6b382e876295cbd6 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Fri, 30 Sep 2022 16:02:16 +0000
Subject: [PATCH 21/21] UI: Revert to HSL luminance for wallpaper dark hints
Y U no test for consistency, Google?
Change-Id: Ie5663bdf518b4ef93d6deb634e707a32d052ac55
---
core/java/android/app/WallpaperColors.java | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/core/java/android/app/WallpaperColors.java b/core/java/android/app/WallpaperColors.java
index 028f77fb21b0..63ccf961a2d8 100644
--- a/core/java/android/app/WallpaperColors.java
+++ b/core/java/android/app/WallpaperColors.java
@@ -555,15 +555,15 @@ public final class WallpaperColors implements Parcelable {
float[] tmpHsl = new float[3];
for (int i = 0; i < pixels.length; i++) {
int pixelColor = pixels[i];
- ColorUtils.colorToHSL(pixelColor, tmpHsl);
final int alpha = Color.alpha(pixelColor);
// Apply composite colors where the foreground is a black layer with an alpha value of
// the dim amount and the background is the wallpaper pixel color.
int compositeColors = ColorUtils.compositeColors(blackTransparent, pixelColor);
- // Calculate the adjusted luminance of the dimmed wallpaper pixel color.
- double adjustedLuminance = ColorUtils.calculateLuminance(compositeColors);
+ // Calculate the luminance of the dimmed wallpaper pixel color.
+ ColorUtils.colorToHSL(compositeColors, tmpHsl);
+ double luminance = tmpHsl[2];
// Make sure we don't have a dark pixel mass that will
// make text illegible.
@@ -575,7 +575,7 @@ public final class WallpaperColors implements Parcelable {
pixels[i] = Color.RED;
}
}
- totalLuminance += adjustedLuminance;
+ totalLuminance += luminance;
}
int hints = 0;
--
2.34.1

View File

@ -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

View File

@ -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

View File

@ -0,0 +1,60 @@
From ef3810b1d55f079278f3ac3ef83f7b5b2eaaa7c1 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sun, 5 Sep 2021 00:30:33 +0000
Subject: [PATCH 2/4] DeskClock: Remove night mode
Change-Id: I885f39027e78fcda397f1be59d17bc24bc66671a
---
res/xml/screensaver_settings.xml | 7 -------
src/com/android/deskclock/Screensaver.java | 5 ++---
src/com/android/deskclock/ScreensaverActivity.java | 2 +-
3 files changed, 3 insertions(+), 11 deletions(-)
diff --git a/res/xml/screensaver_settings.xml b/res/xml/screensaver_settings.xml
index 7b8c9764a..908f76fef 100644
--- a/res/xml/screensaver_settings.xml
+++ b/res/xml/screensaver_settings.xml
@@ -26,11 +26,4 @@
android:title="@string/clock_style"
app:iconSpaceReserved="false" />
- <CheckBoxPreference
- android:defaultValue="true"
- android:key="screensaver_night_mode"
- android:summary="@string/night_mode_summary"
- android:title="@string/night_mode_title"
- app:iconSpaceReserved="false" />
-
</PreferenceScreen>
diff --git a/src/com/android/deskclock/Screensaver.java b/src/com/android/deskclock/Screensaver.java
index ad92b1149..f6c03ed0a 100644
--- a/src/com/android/deskclock/Screensaver.java
+++ b/src/com/android/deskclock/Screensaver.java
@@ -136,9 +136,8 @@ public final class Screensaver extends DreamService {
private void setClockStyle() {
Utils.setScreensaverClockStyle(mDigitalClock, mAnalogClock);
- final boolean dimNightMode = DataModel.getDataModel().getScreensaverNightModeOn();
- Utils.dimClockView(dimNightMode, mMainClockView);
- setScreenBright(!dimNightMode);
+ Utils.dimClockView(false, mMainClockView);
+ setScreenBright(true);
}
/**
diff --git a/src/com/android/deskclock/ScreensaverActivity.java b/src/com/android/deskclock/ScreensaverActivity.java
index b30f82ee7..90235351f 100644
--- a/src/com/android/deskclock/ScreensaverActivity.java
+++ b/src/com/android/deskclock/ScreensaverActivity.java
@@ -101,7 +101,7 @@ public class ScreensaverActivity extends BaseActivity {
Utils.setClockIconTypeface(mMainClockView);
Utils.setTimeFormat((TextClock) digitalClock, false);
Utils.setClockStyle(digitalClock, analogClock);
- Utils.dimClockView(true, mMainClockView);
+ Utils.dimClockView(false, mMainClockView);
analogClock.enableSeconds(false);
mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LOW_PROFILE
--
2.34.1

View File

@ -0,0 +1,610 @@
From 3430de2c592c9d9b4a08c16477fff4ad1a4ca775 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Wed, 19 Jan 2022 18:04:36 +0000
Subject: [PATCH 3/4] DeskClock: Adapt digital clocks to S style
Lollipop is so yesterday...
Bring the layouts of various digital clocks (app, widget, daydream)
in-line, and adjust their styles to match the custom keyguard on S
Caveats/TODO:
- Widget swallows all touch events, even when touching an empty area
- World clocks in widgets are left untouched
Change-Id: I10c6fa213c89ac2f6e342be13fdd6390f7f787b0
---
res/layout/date_and_next_alarm_time.xml | 53 +++++++------
res/layout/desk_clock_saver.xml | 10 +--
res/layout/digital_widget.xml | 69 ++++++++---------
res/layout/digital_widget_sizer.xml | 77 ++++++++-----------
res/layout/main_clock_frame.xml | 36 +++------
res/values/dimens.xml | 12 ++-
res/values/styles.xml | 18 +++++
.../alarmclock/DigitalAppWidgetProvider.java | 31 ++++----
src/com/android/deskclock/AlarmUtils.java | 2 +-
src/com/android/deskclock/ClockFragment.java | 3 -
src/com/android/deskclock/Utils.java | 19 -----
11 files changed, 155 insertions(+), 175 deletions(-)
diff --git a/res/layout/date_and_next_alarm_time.xml b/res/layout/date_and_next_alarm_time.xml
index 9a0cb9103..b29ffedcf 100644
--- a/res/layout/date_and_next_alarm_time.xml
+++ b/res/layout/date_and_next_alarm_time.xml
@@ -18,36 +18,41 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
xmlns:tools="http://schemas.android.com/tools"
- android:layout_gravity="center_vertical"
- android:gravity="center">
+ android:gravity="center_vertical|start"
+ android:orientation="vertical">
<TextView
android:id="@+id/date"
- style="@style/body"
+ style="@style/sc_keyguard_row"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:textAllCaps="true"
+ android:paddingTop="@dimen/sc_keyguard_status_area_top_padding"
+ android:paddingStart="@dimen/sc_keyguard_row_date_start_padding"
tools:text="Sa., 01.01."/>
- <TextView
- android:id="@+id/nextAlarmIcon"
- style="@style/body"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:layout_marginEnd="@dimen/alarm_icon_padding"
- android:layout_marginStart="@dimen/alarm_icon_padding"
- android:ellipsize="none"
- android:includeFontPadding="false"
- android:maxLines="1"
- android:text="@string/clock_emoji" />
-
- <TextView
- android:id="@+id/nextAlarm"
- style="@style/body"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:textAllCaps="true"
- tools:text="Mo., 07:00"/>
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:paddingTop="@dimen/sc_keyguard_row_top_padding"
+ android:paddingStart="@dimen/sc_keyguard_row_alarm_start_padding">
+
+ <TextView
+ android:id="@+id/nextAlarmIcon"
+ style="@style/sc_keyguard_row"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:layout_marginEnd="@dimen/alarm_icon_padding"
+ android:text="@string/clock_emoji"
+ android:textSize="@dimen/sc_keyguard_alarm_icon_size" />
+
+ <TextView
+ android:id="@+id/nextAlarm"
+ style="@style/sc_keyguard_row"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ tools:text="Mo., 07:00"/>
+
+ </LinearLayout>
</LinearLayout>
diff --git a/res/layout/desk_clock_saver.xml b/res/layout/desk_clock_saver.xml
index c147bf7cd..d24219dbb 100644
--- a/res/layout/desk_clock_saver.xml
+++ b/res/layout/desk_clock_saver.xml
@@ -42,16 +42,10 @@
<TextClock
android:id="@+id/digital_clock"
- style="@style/big_thin"
+ style="@style/sc_keyguard_clock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:layout_marginBottom="@dimen/bottom_text_spacing_digital"
- android:ellipsize="none"
- android:gravity="center"
- android:singleLine="true"
- android:textColor="@color/white"
- android:textSize="@dimen/main_clock_font_size" />
+ android:fontFamily="sans-serif-thin" />
<include layout="@layout/date_and_next_alarm_time" />
diff --git a/res/layout/digital_widget.xml b/res/layout/digital_widget.xml
index 5cf896a84..e376a5a7a 100644
--- a/res/layout/digital_widget.xml
+++ b/res/layout/digital_widget.xml
@@ -19,58 +19,53 @@
android:id="@+id/digital_widget"
android:layout_width="match_parent"
android:layout_height="match_parent"
- android:gravity="top|center_horizontal"
+ android:gravity="center"
android:orientation="vertical">
- <TextClock
- android:id="@+id/clock"
- style="@style/widget_big_thin"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal|top"
- android:ellipsize="none"
- android:format12Hour="@string/lock_screen_12_hour_format"
- android:format24Hour="@string/lock_screen_24_hour_format"
- android:includeFontPadding="false"
- android:singleLine="true"
- android:textColor="@color/white" />
-
<LinearLayout
+ android:id="@+id/digital_widget_actual"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal|top">
+ android:gravity="center_vertical|start"
+ android:orientation="vertical">
<TextClock
- android:id="@+id/date"
- style="@style/widget_label"
+ android:id="@+id/clock"
+ style="@style/sc_keyguard_clock"
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" />
+ android:format12Hour="@string/lock_screen_12_hour_format"
+ android:format24Hour="@string/lock_screen_24_hour_format" />
- <ImageView
- android:id="@+id/nextAlarmIcon"
+ <TextClock
+ android:id="@+id/date"
+ style="@style/sc_keyguard_row"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:contentDescription="@null"
- android:scaleType="center" />
+ android:paddingTop="@dimen/sc_keyguard_status_area_top_padding"
+ android:paddingStart="@dimen/sc_keyguard_row_date_start_padding" />
- <TextView
- android:id="@+id/nextAlarm"
- style="@style/widget_label"
+ <LinearLayout
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" />
+ android:paddingTop="@dimen/sc_keyguard_row_top_padding"
+ android:paddingStart="@dimen/sc_keyguard_row_alarm_start_padding">
+
+ <ImageView
+ android:id="@+id/nextAlarmIcon"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:contentDescription="@null"
+ android:scaleType="center" />
+
+ <TextView
+ android:id="@+id/nextAlarm"
+ style="@style/sc_keyguard_row"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ </LinearLayout>
</LinearLayout>
diff --git a/res/layout/digital_widget_sizer.xml b/res/layout/digital_widget_sizer.xml
index f524cf536..b9a28c79f 100644
--- a/res/layout/digital_widget_sizer.xml
+++ b/res/layout/digital_widget_sizer.xml
@@ -15,64 +15,55 @@
-->
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
+ android:layout_width="match_parent"
+ android:layout_height="match_parent"
+ android:gravity="center"
android:orientation="vertical">
- <TextClock
- android:id="@+id/clock"
- style="@style/widget_big_thin"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal|top"
- android:includeFontPadding="false"
- android:ellipsize="none"
- android:format12Hour="@string/lock_screen_12_hour_format"
- android:format24Hour="@string/lock_screen_24_hour_format"
- android:singleLine="true"
- android:textColor="@color/white" />
-
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center_horizontal|top">
+ android:gravity="center_vertical|start"
+ android:orientation="vertical">
<TextClock
- android:id="@+id/date"
- style="@style/widget_label"
+ android:id="@+id/clock"
+ style="@style/sc_keyguard_clock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:includeFontPadding="false"
- android:ellipsize="none"
- android:singleLine="true"
- android:textAllCaps="true"
- android:textColor="@color/white" />
+ android:format12Hour="@string/lock_screen_12_hour_format"
+ android:format24Hour="@string/lock_screen_24_hour_format" />
- <!-- This view is drawn to a Bitmap and sent to the widget as an icon. -->
- <TextView
- android:id="@+id/nextAlarmIcon"
- style="@style/widget_label"
+ <TextClock
+ android:id="@+id/date"
+ style="@style/sc_keyguard_row"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:includeFontPadding="false"
- android:ellipsize="none"
- android:singleLine="true"
- android:text="@string/clock_emoji"
- android:textColor="@color/white" />
+ android:paddingTop="@dimen/sc_keyguard_status_area_top_padding"
+ android:paddingStart="@dimen/sc_keyguard_row_date_start_padding" />
- <TextView
- android:id="@+id/nextAlarm"
- style="@style/widget_label"
+ <LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="center"
- android:includeFontPadding="false"
- android:ellipsize="none"
- android:singleLine="true"
- android:textAllCaps="true"
- android:textColor="@color/white" />
+ android:paddingTop="@dimen/sc_keyguard_row_top_padding"
+ android:paddingStart="@dimen/sc_keyguard_row_alarm_start_padding">
+
+ <!-- This view is drawn to a Bitmap and sent to the widget as an icon. -->
+ <TextView
+ android:id="@+id/nextAlarmIcon"
+ style="@style/sc_keyguard_row"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_gravity="center"
+ android:text="@string/clock_emoji" />
+
+ <TextView
+ android:id="@+id/nextAlarm"
+ style="@style/sc_keyguard_row"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content" />
+
+ </LinearLayout>
</LinearLayout>
diff --git a/res/layout/main_clock_frame.xml b/res/layout/main_clock_frame.xml
index c26f61dbd..c2e84eaa3 100644
--- a/res/layout/main_clock_frame.xml
+++ b/res/layout/main_clock_frame.xml
@@ -26,44 +26,28 @@
android:layout_marginEnd="24dp"
android:orientation="vertical">
- <androidx.constraintlayout.widget.ConstraintLayout
- android:layout_width="match_parent"
+ <LinearLayout
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_gravity="start">
+ android:gravity="center_vertical|start"
+ android:orientation="vertical">
<com.android.deskclock.AnalogClock
android:id="@+id/analog_clock"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:layout_marginTop="@dimen/circle_margin_top"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintDimensionRatio="1:1"
- app:layout_constraintEnd_toEndOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
- app:layout_constraintWidth_percent="@dimen/analog_clock_width_percent"/>
+ android:layout_marginTop="@dimen/circle_margin_top"/>
<com.android.deskclock.widget.AutoSizingTextClock
android:id="@+id/digital_clock"
- style="@style/display_time"
- android:layout_width="match_parent"
+ style="@style/sc_keyguard_clock"
+ android:layout_width="wrap_content"
android:layout_height="wrap_content"
- android:ellipsize="none"
- android:includeFontPadding="false"
android:paddingTop="@dimen/main_clock_digital_padding"
- android:singleLine="true"
- android:textSize="@dimen/main_clock_digital_font_size"
- app:layout_constraintBottom_toBottomOf="parent"
- app:layout_constraintStart_toStartOf="parent"
- app:layout_constraintTop_toTopOf="parent"
tools:text="01:23"/>
- </androidx.constraintlayout.widget.ConstraintLayout>
+ <include layout="@layout/date_and_next_alarm_time" />
+
+ </LinearLayout>
- <include
- layout="@layout/date_and_next_alarm_time"
- android:id="@+id/date_and_next_alarm_time"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="start"/>
</LinearLayout>
diff --git a/res/values/dimens.xml b/res/values/dimens.xml
index c136fe25a..58a9fedc0 100644
--- a/res/values/dimens.xml
+++ b/res/values/dimens.xml
@@ -62,7 +62,7 @@
<dimen name="body_font_padding">4dp</dimen>
<dimen name="alarm_label_size">14sp</dimen>
- <dimen name="alarm_icon_padding">6dp</dimen>
+ <dimen name="alarm_icon_padding">7dp</dimen>
<dimen name="backspace_icon_size">24dp</dimen>
<dimen name="no_alarms_size">90dp</dimen>
@@ -144,4 +144,14 @@
<dimen name="settings_padding">4dp</dimen>
<dimen name="analog_clock_width_percent">0.5</dimen>
+
+ <!-- Keyguard dimens, taken from S fwb -->
+ <dimen name="sc_keyguard_clock_text_size">86dp</dimen>
+ <dimen name="sc_keyguard_row_text_size">16dp</dimen>
+ <dimen name="sc_keyguard_alarm_icon_size">21dp</dimen>
+ <!-- Padding correction values, measured from S fwb -->
+ <dimen name="sc_keyguard_status_area_top_padding">9dp</dimen>
+ <dimen name="sc_keyguard_row_top_padding">11dp</dimen>
+ <dimen name="sc_keyguard_row_date_start_padding">6dp</dimen>
+ <dimen name="sc_keyguard_row_alarm_start_padding">5.5dp</dimen>
</resources>
diff --git a/res/values/styles.xml b/res/values/styles.xml
index 8c6364344..159f24766 100644
--- a/res/values/styles.xml
+++ b/res/values/styles.xml
@@ -209,4 +209,22 @@
<item name="layout_constraintStart_toStartOf">parent</item>
<item name="layout_constraintTop_toBottomOf">@id/timer_setup_time</item>
</style>
+
+ <style name="sc_keyguard_clock">
+ <item name="android:fontFamily">sans-serif-light</item>
+ <item name="android:fontFeatureSettings">tnum</item>
+ <item name="android:textSize">@dimen/sc_keyguard_clock_text_size</item>
+ <item name="android:textColor">@color/white</item>
+ <item name="android:ellipsize">none</item>
+ <item name="android:includeFontPadding">false</item>
+ <item name="android:maxLines">1</item>
+ </style>
+
+ <style name="sc_keyguard_row">
+ <item name="android:textSize">@dimen/sc_keyguard_row_text_size</item>
+ <item name="android:textColor">@color/white</item>
+ <item name="android:ellipsize">none</item>
+ <item name="android:includeFontPadding">false</item>
+ <item name="android:maxLines">1</item>
+ </style>
</resources>
diff --git a/src/com/android/alarmclock/DigitalAppWidgetProvider.java b/src/com/android/alarmclock/DigitalAppWidgetProvider.java
index b54a500c5..fb1b30aa7 100644
--- a/src/com/android/alarmclock/DigitalAppWidgetProvider.java
+++ b/src/com/android/alarmclock/DigitalAppWidgetProvider.java
@@ -223,7 +223,7 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
if (Utils.isWidgetClickable(wm, widgetId)) {
final Intent openApp = new Intent(context, DeskClock.class);
final PendingIntent pi = PendingIntent.getActivity(context, 0, openApp, FLAG_IMMUTABLE);
- rv.setOnClickPendingIntent(R.id.digital_widget, pi);
+ rv.setOnClickPendingIntent(R.id.digital_widget_actual, pi);
}
// Configure child views of the remote view.
@@ -255,7 +255,7 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
final int targetWidthPx = portrait ? minWidthPx : maxWidthPx;
final int targetHeightPx = portrait ? maxHeightPx : minHeightPx;
final int largestClockFontSizePx =
- resources.getDimensionPixelSize(R.dimen.widget_max_clock_font_size);
+ resources.getDimensionPixelSize(R.dimen.sc_keyguard_clock_text_size);
// Create a size template that describes the widget bounds.
final Sizes template = new Sizes(targetWidthPx, targetHeightPx, largestClockFontSizePx);
@@ -327,13 +327,13 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
}
// Measure the widget at the largest possible size.
- Sizes high = measure(template, template.getLargestClockFontSizePx(), sizer);
+ Sizes high = measure(context, template, template.getLargestClockFontSizePx(), sizer);
if (!high.hasViolations()) {
return high;
}
// Measure the widget at the smallest possible size.
- Sizes low = measure(template, template.getSmallestClockFontSizePx(), sizer);
+ Sizes low = measure(context, template, template.getSmallestClockFontSizePx(), sizer);
if (low.hasViolations()) {
return low;
}
@@ -345,7 +345,7 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
return low;
}
- final Sizes midSize = measure(template, midFontSize, sizer);
+ final Sizes midSize = measure(context, template, midFontSize, sizer);
if (midSize.hasViolations()) {
high = midSize;
} else {
@@ -411,7 +411,7 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
* the offscreen {@code sizer} view. Measure the {@code sizer} view and return the resulting
* size measurements.
*/
- private static Sizes measure(Sizes template, int clockFontSize, View sizer) {
+ private static Sizes measure(Context context, Sizes template, int clockFontSize, View sizer) {
// Create a copy of the given template sizes.
final Sizes measuredSizes = template.newSize();
@@ -422,13 +422,13 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
final TextView nextAlarmIcon = sizer.findViewById(R.id.nextAlarmIcon);
// Adjust the font sizes.
- measuredSizes.setClockFontSizePx(clockFontSize);
+ measuredSizes.setClockFontSizePx(context, clockFontSize);
clock.setText(getLongestTimeString(clock));
clock.setTextSize(COMPLEX_UNIT_PX, measuredSizes.mClockFontSizePx);
date.setTextSize(COMPLEX_UNIT_PX, measuredSizes.mFontSizePx);
nextAlarm.setTextSize(COMPLEX_UNIT_PX, measuredSizes.mFontSizePx);
nextAlarmIcon.setTextSize(COMPLEX_UNIT_PX, measuredSizes.mIconFontSizePx);
- nextAlarmIcon.setPadding(measuredSizes.mIconPaddingPx, 0, measuredSizes.mIconPaddingPx, 0);
+ nextAlarmIcon.setPadding(0, 0, measuredSizes.mIconPaddingPx, 0);
// Measure and layout the sizer.
final int widthSize = View.MeasureSpec.getSize(measuredSizes.mTargetWidthPx);
@@ -509,12 +509,17 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
private int getLargestClockFontSizePx() { return mLargestClockFontSizePx; }
private int getSmallestClockFontSizePx() { return mSmallestClockFontSizePx; }
private int getClockFontSizePx() { return mClockFontSizePx; }
- private void setClockFontSizePx(int clockFontSizePx) {
+ private void setClockFontSizePx(Context context, int clockFontSizePx) {
+ final Resources resources = context.getResources();
+ int keyguardClockTextSizePx = resources.getDimensionPixelSize(R.dimen.sc_keyguard_clock_text_size);
+ int keyguardRowTextSizePx = resources.getDimensionPixelSize(R.dimen.sc_keyguard_row_text_size);
+ int keyguardAlarmIconSizePx = resources.getDimensionPixelSize(R.dimen.sc_keyguard_alarm_icon_size);
+ int alarmIconPaddingPx = resources.getDimensionPixelSize(R.dimen.alarm_icon_padding);
mClockFontSizePx = clockFontSizePx;
- mFontSizePx = max(1, round(clockFontSizePx / 7.5f));
- mIconFontSizePx = (int) (mFontSizePx * 1.4f);
- mIconPaddingPx = mFontSizePx / 3;
- }
+ mFontSizePx = max(1, round(clockFontSizePx / (float) keyguardClockTextSizePx * (float) keyguardRowTextSizePx));
+ mIconFontSizePx = max(1, round(clockFontSizePx / (float) keyguardClockTextSizePx * (float) keyguardAlarmIconSizePx));
+ mIconPaddingPx = max(1, round(clockFontSizePx / (float) keyguardClockTextSizePx * (float) alarmIconPaddingPx));
+ }
/**
* @return the amount of widget height available to the world cities list
diff --git a/src/com/android/deskclock/AlarmUtils.java b/src/com/android/deskclock/AlarmUtils.java
index c3739bac8..5b931a46d 100644
--- a/src/com/android/deskclock/AlarmUtils.java
+++ b/src/com/android/deskclock/AlarmUtils.java
@@ -38,7 +38,7 @@ import java.util.Locale;
public class AlarmUtils {
public static String getFormattedTime(Context context, Calendar time) {
- final String skeleton = DateFormat.is24HourFormat(context) ? "EHm" : "Ehma";
+ final String skeleton = DateFormat.is24HourFormat(context) ? "Hm" : "hma";
final String pattern = DateFormat.getBestDateTimePattern(Locale.getDefault(), skeleton);
return (String) DateFormat.format(pattern, time);
}
diff --git a/src/com/android/deskclock/ClockFragment.java b/src/com/android/deskclock/ClockFragment.java
index bf53584e4..7a0e3ae0b 100644
--- a/src/com/android/deskclock/ClockFragment.java
+++ b/src/com/android/deskclock/ClockFragment.java
@@ -123,7 +123,6 @@ public final class ClockFragment extends DeskClockFragment {
Utils.updateDate(mDateFormat, mDateFormatForAccessibility, mClockFrame);
Utils.setClockStyle(mDigitalClock, mAnalogClock);
Utils.setClockSecondsEnabled(mDigitalClock, mAnalogClock);
- Utils.updateDateGravity(mClockFrame);
}
// Schedule a runnable to update the date every quarter hour.
@@ -151,7 +150,6 @@ public final class ClockFragment extends DeskClockFragment {
if (mDigitalClock != null && mAnalogClock != null) {
Utils.setClockStyle(mDigitalClock, mAnalogClock);
Utils.setClockSecondsEnabled(mDigitalClock, mAnalogClock);
- Utils.updateDateGravity(mClockFrame);
}
final View view = getView();
@@ -493,7 +491,6 @@ public final class ClockFragment extends DeskClockFragment {
Utils.updateDate(dateFormat, dateFormatForAccessibility, itemView);
Utils.setClockStyle(mDigitalClock, mAnalogClock);
Utils.setClockSecondsEnabled(mDigitalClock, mAnalogClock);
- Utils.updateDateGravity(itemView);
}
}
}
diff --git a/src/com/android/deskclock/Utils.java b/src/com/android/deskclock/Utils.java
index 4eea6beba..4a5ad5a0a 100644
--- a/src/com/android/deskclock/Utils.java
+++ b/src/com/android/deskclock/Utils.java
@@ -52,9 +52,7 @@ import android.text.style.RelativeSizeSpan;
import android.text.style.StyleSpan;
import android.text.style.TypefaceSpan;
import android.util.ArraySet;
-import android.view.Gravity;
import android.view.View;
-import android.widget.LinearLayout;
import android.widget.TextClock;
import android.widget.TextView;
@@ -302,23 +300,6 @@ public class Utils {
dateDisplay.setContentDescription(new SimpleDateFormat(descriptionPattern, l).format(now));
}
- public static void updateDateGravity(View clockFrame) {
- View dateAndNextAlarm = clockFrame.findViewById(R.id.date_and_next_alarm_time);
- LinearLayout.LayoutParams lp =
- (LinearLayout.LayoutParams)dateAndNextAlarm.getLayoutParams();
-
- final DataModel.ClockStyle clockStyle = DataModel.getDataModel().getClockStyle();
- switch (clockStyle) {
- case ANALOG:
- lp.gravity = Gravity.CENTER;
- break;
- case DIGITAL:
- lp.gravity = Gravity.START;
- break;
- }
- dateAndNextAlarm.setLayoutParams(lp);
- }
-
/***
* Formats the time in the TextClock according to the Locale with a special
* formatting treatment for the am/pm label.
--
2.34.1

View File

@ -0,0 +1,118 @@
From 169570068c3a78f7294d581b2df864ccd3057579 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Thu, 20 Jan 2022 04:42:03 +0000
Subject: [PATCH 4/4] DeskClock: Wallpaper-based text coloring for digital
clock widget
RemoteViews is such a restrictive PITA
Change-Id: Ie22c4980526575f73ebb4e56780d4c2193cc45d3
---
.../alarmclock/DigitalAppWidgetProvider.java | 57 +++++++++++++++++++
1 file changed, 57 insertions(+)
diff --git a/src/com/android/alarmclock/DigitalAppWidgetProvider.java b/src/com/android/alarmclock/DigitalAppWidgetProvider.java
index fb1b30aa7..c04528240 100644
--- a/src/com/android/alarmclock/DigitalAppWidgetProvider.java
+++ b/src/com/android/alarmclock/DigitalAppWidgetProvider.java
@@ -38,6 +38,8 @@ import static java.lang.Math.round;
import android.annotation.SuppressLint;
import android.app.AlarmManager;
import android.app.PendingIntent;
+import android.app.WallpaperColors;
+import android.app.WallpaperManager;
import android.appwidget.AppWidgetManager;
import android.appwidget.AppWidgetProvider;
import android.content.BroadcastReceiver;
@@ -111,12 +113,40 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
/** Intent used to deliver the {@link #ACTION_ON_DAY_CHANGE} callback. */
private static final Intent DAY_CHANGE_INTENT = new Intent(ACTION_ON_DAY_CHANGE);
+ private static WallpaperManager mWallpaperManager;
+ private static boolean mDarkText;
+
+ private static void relayoutAllWidgets(Context context) {
+ final AppWidgetManager wm = AppWidgetManager.getInstance(context);
+ final ComponentName provider = new ComponentName(context, DigitalAppWidgetProvider.class);
+ final int[] widgetIds = wm.getAppWidgetIds(provider);
+ for (int widgetId : widgetIds) {
+ relayoutWidget(context, wm, widgetId, wm.getAppWidgetOptions(widgetId));
+ }
+ }
+
+ private static void addOnColorsChangedListener(Context context) {
+ mWallpaperManager.addOnColorsChangedListener(new WallpaperManager.OnColorsChangedListener() {
+ @Override
+ public void onColorsChanged(WallpaperColors colors, int which) {
+ relayoutAllWidgets(context);
+ }
+ }, null);
+ }
+
@Override
public void onEnabled(Context context) {
super.onEnabled(context);
// Schedule the day-change callback if necessary.
updateDayChangeCallback(context);
+
+ // Listen for wallpaper color changes
+ mWallpaperManager = WallpaperManager.getInstance(context);
+ addOnColorsChangedListener(context);
+
+ // Force a relayout to pick up initial colors
+ relayoutAllWidgets(context);
}
@Override
@@ -215,6 +245,19 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
*/
private static RemoteViews relayoutWidget(Context context, AppWidgetManager wm, int widgetId,
Bundle options, boolean portrait) {
+ // Determine text colors.
+ if (mWallpaperManager == null) {
+ mWallpaperManager = WallpaperManager.getInstance(context);
+ addOnColorsChangedListener(context);
+ }
+ WallpaperColors wallpaperColors = mWallpaperManager.getWallpaperColors(WallpaperManager.FLAG_SYSTEM);
+ // Live wallpapers might not implement the WallpaperColors API.
+ if (wallpaperColors == null) {
+ mDarkText = false;
+ } else {
+ mDarkText = (wallpaperColors.getColorHints() & WallpaperColors.HINT_SUPPORTS_DARK_TEXT) != 0;
+ }
+
// Create a remote view for the digital clock.
final String packageName = context.getPackageName();
final RemoteViews rv = new RemoteViews(packageName, R.layout.digital_widget);
@@ -272,6 +315,17 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
rv.setTextViewTextSize(R.id.nextAlarm, COMPLEX_UNIT_PX, sizes.mFontSizePx);
rv.setTextViewTextSize(R.id.clock, COMPLEX_UNIT_PX, sizes.mClockFontSizePx);
+ // Apply the text color to the remote views.
+ if (mDarkText) {
+ rv.setTextColor(R.id.clock, resources.getColor(R.color.black));
+ rv.setTextColor(R.id.date, resources.getColor(R.color.black));
+ rv.setTextColor(R.id.nextAlarm, resources.getColor(R.color.black));
+ } else {
+ rv.setTextColor(R.id.clock, resources.getColor(R.color.white));
+ rv.setTextColor(R.id.date, resources.getColor(R.color.white));
+ rv.setTextColor(R.id.nextAlarm, resources.getColor(R.color.white));
+ }
+
final int smallestWorldCityListSizePx =
resources.getDimensionPixelSize(R.dimen.widget_min_world_city_list_size);
if (sizes.getListHeight() <= smallestWorldCityListSizePx) {
@@ -430,6 +484,9 @@ public class DigitalAppWidgetProvider extends AppWidgetProvider {
nextAlarmIcon.setTextSize(COMPLEX_UNIT_PX, measuredSizes.mIconFontSizePx);
nextAlarmIcon.setPadding(0, 0, measuredSizes.mIconPaddingPx, 0);
+ // Adjust the alarm icon text color before generating its bitmap.
+ nextAlarmIcon.setTextColor(context.getResources().getColor(mDarkText ? R.color.black : R.color.white));
+
// Measure and layout the sizer.
final int widthSize = View.MeasureSpec.getSize(measuredSizes.mTargetWidthPx);
final int heightSize = View.MeasureSpec.getSize(measuredSizes.mTargetHeightPx);
--
2.34.1

View File

@ -0,0 +1,26 @@
From 99b3533fe66a7bdc71dd6c63c4ba6c75e2ef2082 Mon Sep 17 00:00:00 2001
From: Daniel Micay <danielmicay@gmail.com>
Date: Sat, 6 Jun 2015 10:40:51 -0400
Subject: [PATCH] NfcService: Disable NFC by default
Change-Id: Ibe6abec7fa84c6fde476b8a083f57a3f61b50909
---
src/com/android/nfc/NfcService.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/com/android/nfc/NfcService.java b/src/com/android/nfc/NfcService.java
index 3facdeeb..878b7e21 100644
--- a/src/com/android/nfc/NfcService.java
+++ b/src/com/android/nfc/NfcService.java
@@ -133,7 +133,7 @@ public class NfcService implements DeviceHostListener {
public static final String PREF = "NfcServicePrefs";
static final String PREF_NFC_ON = "nfc_on";
- static final boolean NFC_ON_DEFAULT = true;
+ static final boolean NFC_ON_DEFAULT = false;
static final String PREF_NDEF_PUSH_ON = "ndef_push_on";
static final boolean NDEF_PUSH_ON_DEFAULT = false;
static final String PREF_SECURE_NFC_ON = "secure_nfc_on";
--
2.25.1

View File

@ -0,0 +1,227 @@
From 4c3fbe18f838dce0c06342016ca4c933cf077a05 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sun, 13 Mar 2022 11:22:48 +0000
Subject: [PATCH] Revert "[DO NOT MERGE] Allow a settings override for
double-line clock"
Sorry but I SAID NEVER!
This reverts commit cb4836b4868adc1f06212ce82851a5f16169ab5c.
Change-Id: I8b4b1354f23981f6edbe7f3c81ec4f511da3cc1a
---
res/values/strings.xml | 4 -
res/xml/security_lockscreen_settings.xml | 6 --
.../LockscreenClockPreferenceController.java | 70 ---------------
...ckscreenClockPreferenceControllerTest.java | 90 -------------------
4 files changed, 170 deletions(-)
delete mode 100644 src/com/android/settings/display/LockscreenClockPreferenceController.java
delete mode 100644 tests/robotests/src/com/android/settings/display/LockscreenClockPreferenceControllerTest.java
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 62062b5fe8..35a8a39689 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -13812,10 +13812,6 @@
<string name="lockscreen_trivial_controls_summary">Control external devices without unlocking your phone or tablet if allowed by the device controls app</string>
<!-- Trivial Device disabled controls summary [CHAR LIMIT=NONE] -->
<string name="lockscreen_trivial_disabled_controls_summary">To use, first turn on \u0022Show device controls\u0022</string>
- <!-- Lockscreen double-line clock summary [CHAR LIMIT=NONE] -->
- <string name="lockscreen_double_line_clock_summary">Show double-line clock when available</string>
- <!-- Lockscreen double-line clock toggle [CHAR LIMIT=60] -->
- <string name="lockscreen_double_line_clock_setting_toggle">Double-line clock</string>
<!-- Lock screen shortcuts preference [CHAR LIMIT=60] -->
<string name="lockscreen_quick_affordances_title">Shortcuts</string>
<!-- Summary for the lock screen button preference [CHAR LIMIT=60] -->
diff --git a/res/xml/security_lockscreen_settings.xml b/res/xml/security_lockscreen_settings.xml
index 77a32122ee..b71839fe23 100644
--- a/res/xml/security_lockscreen_settings.xml
+++ b/res/xml/security_lockscreen_settings.xml
@@ -78,12 +78,6 @@
android:key="customizable_lock_screen_quick_affordances"
android:title="@string/lockscreen_quick_affordances_title"
settings:controller="com.android.settings.display.CustomizableLockScreenQuickAffordancesPreferenceController" />
-
- <SwitchPreference
- android:key="lockscreen_double_line_clock_switch"
- android:title="@string/lockscreen_double_line_clock_setting_toggle"
- android:summary="@string/lockscreen_double_line_clock_summary"
- settings:controller="com.android.settings.display.LockscreenClockPreferenceController" />
</PreferenceCategory>
<PreferenceCategory
diff --git a/src/com/android/settings/display/LockscreenClockPreferenceController.java b/src/com/android/settings/display/LockscreenClockPreferenceController.java
deleted file mode 100644
index 70ae55eaf9..0000000000
--- a/src/com/android/settings/display/LockscreenClockPreferenceController.java
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- * Copyright (C) 2021 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.settings.display;
-
-import android.content.Context;
-import android.provider.Settings;
-
-import androidx.preference.Preference;
-
-import com.android.settings.R;
-import com.android.settings.core.TogglePreferenceController;
-
-/**
- * Preference to enable/disable the large double-line clock on lockscreen
- */
-public class LockscreenClockPreferenceController extends TogglePreferenceController {
-
- private static final String SETTING_KEY = Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK;
-
- public LockscreenClockPreferenceController(Context context, String preferenceKey) {
- super(context, preferenceKey);
- }
-
- @Override
- public boolean isChecked() {
- return Settings.Secure.getInt(mContext.getContentResolver(), SETTING_KEY, 1) != 0;
- }
-
- @Override
- public boolean setChecked(boolean isChecked) {
- return Settings.Secure.putInt(mContext.getContentResolver(), SETTING_KEY,
- isChecked ? 1 : 0);
- }
-
- @Override
- public CharSequence getSummary() {
- return mContext.getText(R.string.lockscreen_double_line_clock_summary);
- }
-
- @Override
- public int getAvailabilityStatus() {
- return AVAILABLE;
- }
-
- @Override
- public void updateState(Preference preference) {
- super.updateState(preference);
- preference.setEnabled(true);
- refreshSummary(preference);
- }
-
- @Override
- public int getSliceHighlightMenuRes() {
- return R.string.menu_key_display;
- }
-}
diff --git a/tests/robotests/src/com/android/settings/display/LockscreenClockPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/display/LockscreenClockPreferenceControllerTest.java
deleted file mode 100644
index 94f2dc6655..0000000000
--- a/tests/robotests/src/com/android/settings/display/LockscreenClockPreferenceControllerTest.java
+++ /dev/null
@@ -1,90 +0,0 @@
-/*
- * Copyright (C) 2021 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.settings.display;
-
-import static com.google.common.truth.Truth.assertThat;
-
-import android.content.ContentResolver;
-import android.content.Context;
-import android.provider.Settings;
-
-import androidx.preference.Preference;
-
-import org.junit.Before;
-import org.junit.Test;
-import org.junit.runner.RunWith;
-import org.mockito.Mock;
-import org.mockito.MockitoAnnotations;
-import org.robolectric.RobolectricTestRunner;
-import org.robolectric.RuntimeEnvironment;
-
-@RunWith(RobolectricTestRunner.class)
-public class LockscreenClockPreferenceControllerTest {
-
- private static final String TEST_KEY = "test_key";
- private static final String SETTING_KEY = Settings.Secure.LOCKSCREEN_USE_DOUBLE_LINE_CLOCK;
-
- private Context mContext;
- private ContentResolver mContentResolver;
- private LockscreenClockPreferenceController mController;
-
- @Mock
- private Preference mPreference;
-
- @Before
- public void setUp() {
- MockitoAnnotations.initMocks(this);
- mContext = RuntimeEnvironment.application;
- mContentResolver = mContext.getContentResolver();
- mController = new LockscreenClockPreferenceController(mContext, TEST_KEY);
- }
-
- @Test
- public void isChecked_SettingIs1_returnTrue() {
- Settings.Secure.putInt(mContentResolver, SETTING_KEY, 1);
-
- assertThat(mController.isChecked()).isTrue();
- }
-
- @Test
- public void isChecked_SettingIs0_returnFalse() {
- Settings.Secure.putInt(mContentResolver, SETTING_KEY, 0);
-
- assertThat(mController.isChecked()).isFalse();
- }
-
- @Test
- public void isChecked_SettingIsNotSet_returnTrue() {
- Settings.Secure.putString(mContentResolver, SETTING_KEY, null);
-
- assertThat(mController.isChecked()).isTrue();
- }
-
- @Test
- public void setChecked_true_SettingIsNot0() {
- mController.setChecked(true);
-
- assertThat(Settings.Secure.getInt(mContentResolver, SETTING_KEY, 0)).isNotEqualTo(0);
- }
-
- @Test
- public void setChecked_false_SettingIs0() {
- mController.setChecked(false);
-
- assertThat(Settings.Secure.getInt(mContentResolver, SETTING_KEY, 0)).isEqualTo(0);
- }
-}
--
2.34.1

View File

@ -0,0 +1,86 @@
From f32dde0ff88ec58029be1fe4a1b42b94ff1bdbab Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Thu, 28 Oct 2021 02:30:59 +0000
Subject: [PATCH 1/2] Trebuchet: Make overview scrim transparent again
Also revert texts/buttons to workspace color
Change-Id: I78c84865eb06b8e59c9c271cd2e267ae4cd7cc08
---
quickstep/res/values/styles.xml | 2 +-
quickstep/src/com/android/quickstep/views/RecentsView.java | 2 +-
res/color-v31/overview_scrim.xml | 2 +-
res/color-v31/overview_scrim_dark.xml | 2 +-
res/color/overview_button.xml | 6 +++---
5 files changed, 7 insertions(+), 7 deletions(-)
diff --git a/quickstep/res/values/styles.xml b/quickstep/res/values/styles.xml
index 8eea37f6c2..623f60f81a 100644
--- a/quickstep/res/values/styles.xml
+++ b/quickstep/res/values/styles.xml
@@ -176,7 +176,7 @@
parent="@android:style/Widget.DeviceDefault.Button.Borderless">
<item name="android:textColor">@color/overview_button</item>
<item name="android:drawableTint">@color/overview_button</item>
- <item name="android:tint">?android:attr/textColorPrimary</item>
+ <item name="android:tint">?attr/workspaceTextColor</item>
<item name="android:drawablePadding">8dp</item>
<item name="android:textAllCaps">false</item>
</style>
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index 9222e456e5..678c0dfd80 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -783,7 +783,7 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
mEmptyIcon.setCallback(this);
mEmptyMessage = context.getText(R.string.recents_empty_message);
mEmptyMessagePaint = new TextPaint();
- mEmptyMessagePaint.setColor(Themes.getAttrColor(context, android.R.attr.textColorPrimary));
+ mEmptyMessagePaint.setColor(Themes.getAttrColor(context, R.attr.workspaceTextColor));
mEmptyMessagePaint.setTextSize(getResources()
.getDimension(R.dimen.recents_empty_message_text_size));
mEmptyMessagePaint.setTypeface(Typeface.create(Themes.getDefaultBodyFont(context),
diff --git a/res/color-v31/overview_scrim.xml b/res/color-v31/overview_scrim.xml
index 212518ff65..894997c59a 100644
--- a/res/color-v31/overview_scrim.xml
+++ b/res/color-v31/overview_scrim.xml
@@ -14,5 +14,5 @@
limitations under the License.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="@android:color/system_neutral2_200" />
+ <item android:color="@android:color/transparent" />
</selector>
diff --git a/res/color-v31/overview_scrim_dark.xml b/res/color-v31/overview_scrim_dark.xml
index 2ab8ecdec9..894997c59a 100644
--- a/res/color-v31/overview_scrim_dark.xml
+++ b/res/color-v31/overview_scrim_dark.xml
@@ -14,5 +14,5 @@
limitations under the License.
-->
<selector xmlns:android="http://schemas.android.com/apk/res/android">
- <item android:color="@android:color/system_neutral1_500" android:lStar="35" />
+ <item android:color="@android:color/transparent" />
</selector>
diff --git a/res/color/overview_button.xml b/res/color/overview_button.xml
index aa48b78604..e638ac2d4a 100644
--- a/res/color/overview_button.xml
+++ b/res/color/overview_button.xml
@@ -2,10 +2,10 @@
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item
android:alpha="1"
- android:color="?android:attr/textColorPrimary"
+ android:color="?attr/workspaceTextColor"
android:state_enabled="true" />
<item
android:alpha="?android:disabledAlpha"
- android:color="?android:attr/textColorPrimary"
+ android:color="?attr/workspaceTextColor"
android:state_enabled="false" />
-</selector>
\ No newline at end of file
+</selector>
--
2.34.1

View File

@ -0,0 +1,82 @@
From c04fae6b45b624a39d684c4b6cf02440a3fe83b5 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Fri, 18 Mar 2022 08:42:18 +0000
Subject: [PATCH 2/2] Trebuchet: Kill haptics in recents
This partially reverts commit cc5c8843dfebfa92057b6ce8904ac58cd05ffaef.
Change-Id: Ie3b0eabe8cc0421e696720740edc492cae2f5153
---
.../NoButtonQuickSwitchTouchController.java | 8 --------
.../TaskViewTouchController.java | 5 -----
.../android/quickstep/views/RecentsView.java | 19 -------------------
3 files changed, 32 deletions(-)
diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
index 847114a960..eef4be2964 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/NoButtonQuickSwitchTouchController.java
@@ -419,14 +419,6 @@ public class NoButtonQuickSwitchTouchController implements TouchController,
nonOverviewAnim.setFloatValues(startProgress, endProgress);
mNonOverviewAnim.dispatchOnStart();
}
- if (targetState == QUICK_SWITCH_FROM_HOME) {
- // Navigating to quick switch, add scroll feedback since the first time is not
- // considered a scroll by the RecentsView.
- VibratorWrapper.INSTANCE.get(mLauncher).vibrate(
- RecentsView.SCROLL_VIBRATION_PRIMITIVE,
- RecentsView.SCROLL_VIBRATION_PRIMITIVE_SCALE,
- RecentsView.SCROLL_VIBRATION_FALLBACK);
- }
nonOverviewAnim.setDuration(Math.max(xDuration, yDuration));
mNonOverviewAnim.setEndAction(() -> onAnimationToStateCompleted(targetState));
diff --git a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java
index eddc50c64f..09f253b08d 100644
--- a/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java
+++ b/quickstep/src/com/android/launcher3/uioverrides/touchcontrollers/TaskViewTouchController.java
@@ -369,11 +369,6 @@ public abstract class TaskViewTouchController<T extends BaseDraggingActivity>
mCurrentAnimation.startWithVelocity(mActivity, goingToEnd,
velocity * orientationHandler.getSecondaryTranslationDirectionFactor(),
mEndDisplacement, animationDuration);
- if (goingUp && goingToEnd && !mIsDismissHapticRunning) {
- VibratorWrapper.INSTANCE.get(mActivity).vibrate(TASK_DISMISS_VIBRATION_PRIMITIVE,
- TASK_DISMISS_VIBRATION_PRIMITIVE_SCALE, TASK_DISMISS_VIBRATION_FALLBACK);
- mIsDismissHapticRunning = true;
- }
}
private void clearState() {
diff --git a/quickstep/src/com/android/quickstep/views/RecentsView.java b/quickstep/src/com/android/quickstep/views/RecentsView.java
index 678c0dfd80..8e75a7c18d 100644
--- a/quickstep/src/com/android/quickstep/views/RecentsView.java
+++ b/quickstep/src/com/android/quickstep/views/RecentsView.java
@@ -1466,25 +1466,6 @@ public abstract class RecentsView<ACTIVITY_TYPE extends StatefulActivity<STATE_T
}
}
- @Override
- protected void onEdgeAbsorbingScroll() {
- vibrateForScroll();
- }
-
- @Override
- protected void onScrollOverPageChanged() {
- vibrateForScroll();
- }
-
- private void vibrateForScroll() {
- long now = SystemClock.uptimeMillis();
- if (now - mScrollLastHapticTimestamp > mScrollHapticMinGapMillis) {
- mScrollLastHapticTimestamp = now;
- VibratorWrapper.INSTANCE.get(mContext).vibrate(SCROLL_VIBRATION_PRIMITIVE,
- SCROLL_VIBRATION_PRIMITIVE_SCALE, SCROLL_VIBRATION_FALLBACK);
- }
- }
-
@Override
protected void determineScrollingStart(MotionEvent ev, float touchSlopScale) {
// Enables swiping to the left or right only if the task overlay is not modal.
--
2.34.1

View File

@ -0,0 +1,87 @@
From b09034c7e5f9bbc2d29c3f10452259956fcb9f46 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sat, 16 Oct 2021 00:33:15 +0000
Subject: [PATCH] Replace captive portal URLs globally
...so that it works even without a SIM inserted, which is a typical usecase of mine
URLs from Chinese OEM UIs are faster and more reliable than g.cn and other int'l ones
Change-Id: Ic3e124b2b62838a2bcf1dad0d670515f3d056964
---
res/values-mcc460/config.xml | 31 -------------------------------
res/values/config.xml | 7 +++----
2 files changed, 3 insertions(+), 35 deletions(-)
delete mode 100644 res/values-mcc460/config.xml
diff --git a/res/values-mcc460/config.xml b/res/values-mcc460/config.xml
deleted file mode 100644
index 3c4b4933..00000000
--- a/res/values-mcc460/config.xml
+++ /dev/null
@@ -1,31 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<resources>
- <!-- Network validation URL configuration for devices using a Chinese SIM (MCC 460).
- The below URLs are often whitelisted by captive portals, so they should not be used in the
- general case as this could degrade the user experience (portals not detected properly).
- However in China the default URLs are not accessible in general. The below alternatives
- should allow users to connect to local networks normally. -->
- <!-- default_captive_portal_http_url is not configured as overlayable so
- OEMs that wish to change captive_portal_http_url configuration must
- do so via configuring runtime resource overlay to
- config_captive_portal_http_url and *NOT* by changing or overlaying
- this resource. It will break if the enforcement of overlayable starts.
- -->
- <string name="default_captive_portal_http_url" translatable="false">http://connectivitycheck.gstatic.cn/generate_204</string>
- <!-- default_captive_portal_https_url is not configured as overlayable so
- OEMs that wish to change captive_portal_https_url configuration must
- do so via configuring runtime resource overlay to
- config_captive_portal_https_url and *NOT* by changing or overlaying
- this resource. It will break if the enforcement of overlayable starts.
- -->
- <string name="default_captive_portal_https_url" translatable="false">https://connectivitycheck.gstatic.cn/generate_204</string>
- <!-- default_captive_portal_fallback_urls is not configured as overlayable
- so OEMs that wish to change captive_portal_fallback_urls configuration
- must do so via configuring runtime resource overlay to
- config_captive_portal_fallback_urls and *NOT* by changing or overlaying
- this resource. It will break if the enforcement of overlayable starts.
- -->
- <string-array name="default_captive_portal_fallback_urls" translatable="false">
- <item>http://www.googleapis.cn/generate_204</item>
- </string-array>
-</resources>
diff --git a/res/values/config.xml b/res/values/config.xml
index 805ca041..61297dda 100644
--- a/res/values/config.xml
+++ b/res/values/config.xml
@@ -13,7 +13,7 @@
config_captive_portal_http_url and *NOT* by changing or overlaying
this resource. It will break if the enforcement of overlayable starts.
-->
- <string name="default_captive_portal_http_url" translatable="false">http://connectivitycheck.gstatic.com/generate_204</string>
+ <string name="default_captive_portal_http_url" translatable="false">http://conn4.coloros.com/generate204</string>
<!-- HTTPS URL for network validation, to use for confirming internet connectivity. -->
<!-- default_captive_portal_https_url is not configured as overlayable so
OEMs that wish to change captive_portal_https_url configuration must
@@ -21,7 +21,7 @@
config_captive_portal_https_url and *NOT* by changing or overlaying
this resource. It will break if the enforcement of overlayable starts.
-->
- <string name="default_captive_portal_https_url" translatable="false">https://www.google.com/generate_204</string>
+ <string name="default_captive_portal_https_url" translatable="false">https://conn4.coloros.com/generate204</string>
<!-- List of fallback URLs to use for detecting captive portals. -->
<!-- default_captive_portal_fallback_urls is not configured as overlayable
@@ -31,8 +31,7 @@
this resource. It will break if the enforcement of overlayable starts.
-->
<string-array name="default_captive_portal_fallback_urls" translatable="false">
- <item>http://www.google.com/gen_204</item>
- <item>http://play.googleapis.com/generate_204</item>
+ <item>http://connect.rom.miui.com/generate_204</item>
</string-array>
<!-- Configuration hooks for the above settings.
Empty by default but may be overridden by RROs. -->
--
2.25.1

View File

@ -0,0 +1,36 @@
From 863e8f70e3a4f987938ff4ad01c22822bc38e409 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 1/4] 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 28044e2c..c5aa9617 100644
--- a/build/core/main_version.mk
+++ b/build/core/main_version.mk
@@ -5,17 +5,12 @@ ADDITIONAL_SYSTEM_PROPERTIES += \
endif
# LineageOS System Version
+# Do not set Display Versions here, due to Makefile not playing nice with spaces
ADDITIONAL_SYSTEM_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_SYSTEM_PROPERTIES += \
- ro.lineage.display.version=$(LINEAGE_DISPLAY_VERSION)
-
# LineageOS Platform SDK Version
ADDITIONAL_SYSTEM_PROPERTIES += \
ro.lineage.build.version.plat.sdk=$(LINEAGE_PLATFORM_SDK_VERSION)
--
2.34.1

View File

@ -0,0 +1,40 @@
From 34f8aa093286970f82014f1dae0e86e4cbeba896 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sat, 16 Oct 2021 00:41:07 +0000
Subject: [PATCH 2/4] build: Remove Stk (2/2)
Change-Id: I4e1cfacd296e47ef1731f3c32555089a5fca6f0c
---
config/data_only.mk | 4 ----
config/telephony.mk | 3 +--
2 files changed, 1 insertion(+), 6 deletions(-)
diff --git a/config/data_only.mk b/config/data_only.mk
index 5ff877c9..ab70301b 100644
--- a/config/data_only.mk
+++ b/config/data_only.mk
@@ -1,7 +1,3 @@
# World APN list
PRODUCT_PACKAGES += \
apns-conf.xml
-
-# Telephony packages
-PRODUCT_PACKAGES += \
- Stk
diff --git a/config/telephony.mk b/config/telephony.mk
index 6adf48d9..e63b320d 100644
--- a/config/telephony.mk
+++ b/config/telephony.mk
@@ -8,8 +8,7 @@ PRODUCT_PACKAGES += \
# Telephony packages
PRODUCT_PACKAGES += \
- messaging \
- Stk
+ messaging
# Default ringtone
PRODUCT_PRODUCT_PROPERTIES += \
--
2.34.1

View File

@ -0,0 +1,30 @@
From 84b5b23519166701423a324cac955e9110e36eae Mon Sep 17 00:00:00 2001
From: AndyCGYan <GeForce8800Ultra@gmail.com>
Date: Mon, 1 Jul 2019 07:03:04 +0000
Subject: [PATCH 3/4] 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.34.1

View File

@ -0,0 +1,46 @@
From eec24080edaf13ebf8d4b58815a5ef7c22f88658 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sat, 5 Nov 2022 23:49:11 +0000
Subject: [PATCH 5/9] treble: Switch to MindTheGapps
Change-Id: I1b80d4c5176cbf4af21d147c71b0abce6027c7c7
---
generate.sh | 13 +++++++------
1 file changed, 7 insertions(+), 6 deletions(-)
diff --git a/generate.sh b/generate.sh
index 89fa88b..8654eeb 100644
--- a/generate.sh
+++ b/generate.sh
@@ -24,9 +24,15 @@ for part in a ab;do
extra_packages=""
vndk="vndk.mk"
optional_base=""
+
+ baseArch="$arch"
+ if [ "$arch" = "a64" ];then
+ baseArch="arm"
+ fi
+
if [ "$apps" == "gapps" ];then
apps_suffix="g"
- apps_script='$(call inherit-product, device/phh/treble/gapps.mk)'
+ apps_script='$(call inherit-product, vendor/gapps/'$baseArch'/'$baseArch'-vendor.mk)'
apps_name="with GApps"
fi
if [ "$apps" == "gapps-go" ];then
@@ -66,11 +72,6 @@ for part in a ab;do
target="lineage_${arch}_${part_suffix}${apps_suffix}${su_suffix}"
- baseArch="$arch"
- if [ "$arch" = "a64" ];then
- baseArch="arm"
- fi
-
zygote=32
if [ "$arch" = "arm64" ];then
zygote=64_32
--
2.34.1

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,431 @@
From c329331ba9e37c24809afbd026bcc770f7950384 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 1/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 | 4 +
meizu-vibrator/Android.bp | 32 ++++
meizu-vibrator/Vibrator.cpp | 140 ++++++++++++++++++
meizu-vibrator/Vibrator.h | 60 ++++++++
...oid.hardware.vibrator@1.3-service.meizu.rc | 5 +
...id.hardware.vibrator@1.3-service.meizu.xml | 11 ++
meizu-vibrator/service.cpp | 72 +++++++++
sepolicy/file_contexts | 1 +
sepolicy/hal.te | 11 ++
9 files changed, 336 insertions(+)
create mode 100644 meizu-vibrator/Android.bp
create mode 100644 meizu-vibrator/Vibrator.cpp
create mode 100644 meizu-vibrator/Vibrator.h
create mode 100644 meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.rc
create mode 100644 meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.xml
create mode 100644 meizu-vibrator/service.cpp
diff --git a/base.mk b/base.mk
index 49c4da6..3a99248 100644
--- a/base.mk
+++ b/base.mk
@@ -259,3 +259,7 @@ PRODUCT_PACKAGES += \
# Two-pane layout in Settings
PRODUCT_PACKAGES += \
androidx.window.extensions
+
+# Meizu vibrator
+PRODUCT_PACKAGES += \
+ android.hardware.vibrator@1.3-service.meizu
diff --git a/meizu-vibrator/Android.bp b/meizu-vibrator/Android.bp
new file mode 100644
index 0000000..76ad034
--- /dev/null
+++ b/meizu-vibrator/Android.bp
@@ -0,0 +1,32 @@
+//
+// 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",
+ vintf_fragments: ["android.hardware.vibrator@1.3-service.meizu.xml"],
+ 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/meizu-vibrator/Vibrator.cpp b/meizu-vibrator/Vibrator.cpp
new file mode 100644
index 0000000..8f12987
--- /dev/null
+++ b/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/meizu-vibrator/Vibrator.h b/meizu-vibrator/Vibrator.h
new file mode 100644
index 0000000..df901aa
--- /dev/null
+++ b/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/meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.rc b/meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.rc
new file mode 100644
index 0000000..527ff66
--- /dev/null
+++ b/meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.rc
@@ -0,0 +1,5 @@
+service vibrator.meizu /system/bin/hw/android.hardware.vibrator@1.3-service.meizu
+ class late_start
+ user system
+ group system
+ oneshot
diff --git a/meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.xml b/meizu-vibrator/android.hardware.vibrator@1.3-service.meizu.xml
new file mode 100644
index 0000000..d1b836e
--- /dev/null
+++ b/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/meizu-vibrator/service.cpp b/meizu-vibrator/service.cpp
new file mode 100644
index 0000000..1405dfb
--- /dev/null
+++ b/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 beb639a..3bc437c 100644
--- a/sepolicy/file_contexts
+++ b/sepolicy/file_contexts
@@ -14,6 +14,7 @@
/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.biometrics.fingerprint@2.1-service.oplus.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.34.1

View File

@ -0,0 +1,29 @@
From cfc2fd859fb445535d9de131697c56f21d1cee48 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Thu, 28 Oct 2021 01:51:27 +0000
Subject: [PATCH 2/3] Revert "Include sim toolkit app"
This reverts commit 52d4d731465f37e3e8ccf9d315cfc8195303e51f.
Change-Id: I1eb7f4bb070eea649b4cea6280299e629d1edb3d
---
base.mk | 3 ---
1 file changed, 3 deletions(-)
diff --git a/base.mk b/base.mk
index 3a99248..877a408 100644
--- a/base.mk
+++ b/base.mk
@@ -172,9 +172,6 @@ PRODUCT_PACKAGES += \
xiaomi-motor \
oneplus-motor
-PRODUCT_PACKAGES += \
- Stk
-
PRODUCT_PACKAGES += \
resetprop_phh
--
2.34.1

View File

@ -0,0 +1,27 @@
From 719b8e8406f6dbb72aac8029c37cdef445339292 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 3/3] Revert "treble: Set BOARD_EXT4_SHARE_DUP_BLOCKS
explicitly"
This reverts commit d7b179f234d76c3acf7a723fc05f07efe9adc84c.
Change-Id: I2bf95d40d4a096181710765c7d152f63556d27d8
---
board-base.mk | 2 --
1 file changed, 2 deletions(-)
diff --git a/board-base.mk b/board-base.mk
index 9d1d45e..8cde64f 100644
--- a/board-base.mk
+++ b/board-base.mk
@@ -11,6 +11,4 @@ BUILD_BROKEN_ELF_PREBUILT_PRODUCT_COPY_FILES := true
BOARD_ROOT_EXTRA_SYMLINKS := $(filter-out $(BOARD_ROOT_EXTRA_SYMLINKS),/mnt/vendor/persist:/persist)
-BOARD_EXT4_SHARE_DUP_BLOCKS := true
-
TARGET_NO_KERNEL_OVERRIDE := true
--
2.34.1

View File

@ -0,0 +1,80 @@
From 51ee2c02c249cec676666e96c38ef490691472b8 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 09/27] Add persist.sys.phh.samsung.camera_ids property to
access hidden Samsung cameras
Change-Id: I2c7bf535272acc28ed2277e96c78ddd28a0b4593
---
services/camera/libcameraservice/Android.bp | 1 +
.../common/hidl/HidlProviderInfo.cpp | 14 ++++++++++++--
2 files changed, 13 insertions(+), 2 deletions(-)
diff --git a/services/camera/libcameraservice/Android.bp b/services/camera/libcameraservice/Android.bp
index 981c56942c..7c4e4d9bcd 100644
--- a/services/camera/libcameraservice/Android.bp
+++ b/services/camera/libcameraservice/Android.bp
@@ -164,6 +164,7 @@ cc_library_shared {
"android.hardware.camera.device@3.6",
"android.hardware.camera.device@3.7",
"android.hardware.camera.device-V1-ndk",
+ "vendor.samsung.hardware.camera.provider@3.0",
"media_permission-aidl-cpp",
],
diff --git a/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp b/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp
index 630090b4ac..1acf9c2990 100644
--- a/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp
+++ b/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp
@@ -27,6 +27,7 @@
#include <utils/Trace.h>
#include <android/hardware/camera/device/3.7/ICameraDevice.h>
+#include <vendor/samsung/hardware/camera/provider/3.0/ISehCameraProvider.h>
namespace {
const bool kEnableLazyHal(property_get_bool("ro.camera.enableLazyHal", false));
@@ -134,6 +135,7 @@ status_t HidlProviderInfo::initializeHidlProvider(
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){
@@ -170,6 +172,9 @@ status_t HidlProviderInfo::initializeHidlProvider(
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",
@@ -200,7 +205,7 @@ status_t HidlProviderInfo::initializeHidlProvider(
// 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;
@@ -217,7 +222,12 @@ status_t HidlProviderInfo::initializeHidlProvider(
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.34.1

View File

@ -0,0 +1,67 @@
From ce308a54ba2c124fe2f13b82cb3eec26ccb939a5 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 14/27] Support Samsung R multi-cams
Change-Id: If46f385e8dd16185cbf37ab083e6a1242e1d1555
---
services/camera/libcameraservice/Android.bp | 1 +
.../libcameraservice/common/hidl/HidlProviderInfo.cpp | 8 +++++++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/services/camera/libcameraservice/Android.bp b/services/camera/libcameraservice/Android.bp
index 7c4e4d9bcd..1faeb60ba7 100644
--- a/services/camera/libcameraservice/Android.bp
+++ b/services/camera/libcameraservice/Android.bp
@@ -165,6 +165,7 @@ cc_library_shared {
"android.hardware.camera.device@3.7",
"android.hardware.camera.device-V1-ndk",
"vendor.samsung.hardware.camera.provider@3.0",
+ "vendor.samsung.hardware.camera.provider@4.0",
"media_permission-aidl-cpp",
],
diff --git a/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp b/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp
index 1acf9c2990..367ffb8cdc 100644
--- a/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp
+++ b/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp
@@ -28,6 +28,7 @@
#include <android/hardware/camera/device/3.7/ICameraDevice.h>
#include <vendor/samsung/hardware/camera/provider/3.0/ISehCameraProvider.h>
+#include <vendor/samsung/hardware/camera/provider/4.0/ISehCameraProvider.h>
namespace {
const bool kEnableLazyHal(property_get_bool("ro.camera.enableLazyHal", false));
@@ -173,7 +174,9 @@ status_t HidlProviderInfo::initializeHidlProvider(
}
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()) {
@@ -211,6 +214,7 @@ status_t HidlProviderInfo::initializeHidlProvider(
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);
@@ -224,7 +228,9 @@ status_t HidlProviderInfo::initializeHidlProvider(
}
} };
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.34.1

View File

@ -0,0 +1,57 @@
From 0fa119c66801a5e2a0fce1055bfbc261d65c00fb Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sat, 16 Apr 2022 14:30:14 -0400
Subject: [PATCH 22/27] Add a prop to change Samsung flash strength
---
services/camera/libcameraservice/Android.bp | 1 +
.../common/hidl/HidlProviderInfo.cpp | 14 +++++++++++++-
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/services/camera/libcameraservice/Android.bp b/services/camera/libcameraservice/Android.bp
index 1faeb60ba7..8c588065cf 100644
--- a/services/camera/libcameraservice/Android.bp
+++ b/services/camera/libcameraservice/Android.bp
@@ -166,6 +166,7 @@ cc_library_shared {
"android.hardware.camera.device-V1-ndk",
"vendor.samsung.hardware.camera.provider@3.0",
"vendor.samsung.hardware.camera.provider@4.0",
+ "vendor.samsung.hardware.camera.device@5.0",
"media_permission-aidl-cpp",
],
diff --git a/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp b/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp
index 367ffb8cdc..362945a1ea 100644
--- a/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp
+++ b/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp
@@ -29,6 +29,7 @@
#include <android/hardware/camera/device/3.7/ICameraDevice.h>
#include <vendor/samsung/hardware/camera/provider/3.0/ISehCameraProvider.h>
#include <vendor/samsung/hardware/camera/provider/4.0/ISehCameraProvider.h>
+#include <vendor/samsung/hardware/camera/device/5.0/ISehCameraDevice.h>
namespace {
const bool kEnableLazyHal(property_get_bool("ro.camera.enableLazyHal", false));
@@ -781,7 +782,18 @@ HidlProviderInfo::HidlDeviceInfo3::HidlDeviceInfo3(
status_t HidlProviderInfo::HidlDeviceInfo3::setTorchMode(bool enabled) {
using hardware::camera::common::V1_0::TorchMode;
const sp<hardware::camera::device::V3_2::ICameraDevice> interface = startDeviceInterface();
- Status s = interface->setTorchMode(enabled ? TorchMode::ON : TorchMode::OFF);
+ int32_t flashStrength = property_get_int32("persist.sys.phh.flash_strength", 1);
+
+ auto sehCast = vendor::samsung::hardware::camera::device::V5_0::ISehCameraDevice::castFrom(interface);
+ android::sp<vendor::samsung::hardware::camera::device::V5_0::ISehCameraDevice> seh = sehCast;
+
+ Status s;
+ if(seh != nullptr) {
+ s = seh->sehSetTorchModeStrength(enabled ? TorchMode::ON : TorchMode::OFF, flashStrength);
+ } else {
+ s = interface->setTorchMode(enabled ? TorchMode::ON : TorchMode::OFF);
+ }
+
return mapToStatusT(s);
}
--
2.34.1

View File

@ -0,0 +1,52 @@
From 7ba94ce583e1ab8b6bf86f798865082bd1bd86e9 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 2 May 2022 17:37:09 -0400
Subject: [PATCH 23/27] Support variable flash strength on samsung hal 4.0
---
services/camera/libcameraservice/Android.bp | 1 +
.../libcameraservice/common/hidl/HidlProviderInfo.cpp | 6 ++++++
2 files changed, 7 insertions(+)
diff --git a/services/camera/libcameraservice/Android.bp b/services/camera/libcameraservice/Android.bp
index 8c588065cf..769862aaa2 100644
--- a/services/camera/libcameraservice/Android.bp
+++ b/services/camera/libcameraservice/Android.bp
@@ -167,6 +167,7 @@ cc_library_shared {
"vendor.samsung.hardware.camera.provider@3.0",
"vendor.samsung.hardware.camera.provider@4.0",
"vendor.samsung.hardware.camera.device@5.0",
+ "vendor.samsung.hardware.camera.device@4.0",
"media_permission-aidl-cpp",
],
diff --git a/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp b/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp
index 362945a1ea..62c57cd4f7 100644
--- a/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp
+++ b/services/camera/libcameraservice/common/hidl/HidlProviderInfo.cpp
@@ -30,6 +30,7 @@
#include <vendor/samsung/hardware/camera/provider/3.0/ISehCameraProvider.h>
#include <vendor/samsung/hardware/camera/provider/4.0/ISehCameraProvider.h>
#include <vendor/samsung/hardware/camera/device/5.0/ISehCameraDevice.h>
+#include <vendor/samsung/hardware/camera/device/4.0/ISehCameraDevice.h>
namespace {
const bool kEnableLazyHal(property_get_bool("ro.camera.enableLazyHal", false));
@@ -787,9 +788,14 @@ status_t HidlProviderInfo::HidlDeviceInfo3::setTorchMode(bool enabled) {
auto sehCast = vendor::samsung::hardware::camera::device::V5_0::ISehCameraDevice::castFrom(interface);
android::sp<vendor::samsung::hardware::camera::device::V5_0::ISehCameraDevice> seh = sehCast;
+ auto sehCast2 = vendor::samsung::hardware::camera::device::V4_0::ISehCameraDevice::castFrom(interface);
+ android::sp<vendor::samsung::hardware::camera::device::V4_0::ISehCameraDevice> seh2 = sehCast2;
+
Status s;
if(seh != nullptr) {
s = seh->sehSetTorchModeStrength(enabled ? TorchMode::ON : TorchMode::OFF, flashStrength);
+ } else if(seh2 != nullptr) {
+ s = seh2->sehSetTorchModeStrength(enabled ? TorchMode::ON : TorchMode::OFF, flashStrength);
} else {
s = interface->setTorchMode(enabled ? TorchMode::ON : TorchMode::OFF);
}
--
2.34.1

View File

@ -0,0 +1,25 @@
From 1d2d5b9d635f06d8b686a326c33d893d441cd106 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 6 Aug 2018 12:49:00 +0200
Subject: [PATCH 06/40] Show APN Settings for CDMA carriers
---
telephony/java/android/telephony/CarrierConfigManager.java | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/telephony/java/android/telephony/CarrierConfigManager.java b/telephony/java/android/telephony/CarrierConfigManager.java
index 741721d14ac1..2b08fa644779 100644
--- a/telephony/java/android/telephony/CarrierConfigManager.java
+++ b/telephony/java/android/telephony/CarrierConfigManager.java
@@ -8712,7 +8712,7 @@ public class CarrierConfigManager {
sDefaults.putBoolean(KEY_OPERATOR_SELECTION_EXPAND_BOOL, true);
sDefaults.putBoolean(KEY_PREFER_2G_BOOL, false);
sDefaults.putBoolean(KEY_4G_ONLY_BOOL, false);
- sDefaults.putBoolean(KEY_SHOW_APN_SETTING_CDMA_BOOL, false);
+ sDefaults.putBoolean(KEY_SHOW_APN_SETTING_CDMA_BOOL, true);
sDefaults.putBoolean(KEY_SHOW_CDMA_CHOICES_BOOL, false);
sDefaults.putBoolean(KEY_SMS_REQUIRES_DESTINATION_NUMBER_CONVERSION_BOOL, false);
sDefaults.putBoolean(KEY_SUPPORT_EMERGENCY_SMS_OVER_IMS_BOOL, false);
--
2.34.1

View File

@ -0,0 +1,26 @@
From afe65799c5be40b760f0bf4208f3062f52f6d999 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 24 Mar 2019 23:05:14 +0100
Subject: [PATCH 08/40] Support samsung Pie and Q light hal
Change-Id: I01f94acd7d0672733e48854d80368f9ac6f861c6
---
services/core/jni/Android.bp | 2 ++
1 file changed, 2 insertions(+)
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
index 0d49f5fffb4b..1fc974ebc56f 100644
--- a/services/core/jni/Android.bp
+++ b/services/core/jni/Android.bp
@@ -186,6 +186,8 @@ cc_defaults {
"android.system.suspend.control.internal-cpp",
"android.system.suspend-V1-ndk",
"service.incremental",
+ "vendor.samsung.hardware.light@2.0",
+ "vendor.samsung.hardware.light@3.0",
],
static_libs: [
--
2.34.1

View File

@ -0,0 +1,67 @@
From 74f65c6b4812fcbe4c0e7e9805d7d9c5af597cea Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 12 Aug 2019 23:08:26 +0200
Subject: [PATCH 09/40] Add support for samsung touch, physical and hover
proximity sensor as fallback to real proximity sensor
Change-Id: I7a0f8b4665c802140d19197d850b77b2a7ac1865
---
.../display/DisplayPowerController.java | 35 +++++++++++++++++++
1 file changed, 35 insertions(+)
diff --git a/services/core/java/com/android/server/display/DisplayPowerController.java b/services/core/java/com/android/server/display/DisplayPowerController.java
index 864ea43c8b01..d1be15c62fc8 100644
--- a/services/core/java/com/android/server/display/DisplayPowerController.java
+++ b/services/core/java/com/android/server/display/DisplayPowerController.java
@@ -2186,6 +2186,27 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
? Sensor.TYPE_PROXIMITY : SensorUtils.NO_FALLBACK;
mProximitySensor = SensorUtils.findSensor(mSensorManager, proxSensor.type, proxSensor.name,
fallbackType);
+ if(mProximitySensor == null) {
+ java.util.List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
+ for(Sensor sensor: sensors) {
+ if("com.samsung.sensor.physical_proximity".equals(sensor.getStringType()))
+ mProximitySensor = sensor;
+ }
+ }
+ if(mProximitySensor == null) {
+ java.util.List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
+ for(Sensor sensor: sensors) {
+ if("com.samsung.sensor.hover_proximity".equals(sensor.getStringType()))
+ mProximitySensor = sensor;
+ }
+ }
+ if(mProximitySensor == null) {
+ java.util.List<Sensor> sensors = mSensorManager.getSensorList(Sensor.TYPE_ALL);
+ for(Sensor sensor: sensors) {
+ if("com.samsung.sensor.touch_proximity".equals(sensor.getStringType()))
+ mProximitySensor = sensor;
+ }
+ }
if (mProximitySensor != null) {
mProximityThreshold = Math.min(mProximitySensor.getMaximumRange(),
TYPICAL_PROXIMITY_THRESHOLD);
@@ -3304,6 +3325,20 @@ final class DisplayPowerController implements AutomaticBrightnessController.Call
public void onSensorChanged(SensorEvent event) {
if (mProximitySensorEnabled) {
final long time = SystemClock.uptimeMillis();
+ if("com.samsung.sensor.touch_proximity".equals(mProximitySensor.getStringType())) {
+ int v = (int)event.values[0];
+ boolean positive = (v <= 4);
+ android.util.Log.d("PHH", "Samsung sensor changed " + positive + ":" + v);
+ handleProximitySensorEvent(time, positive);
+ return;
+ }
+ if("com.samsung.sensor.hover_proximity".equals(mProximitySensor.getStringType())) {
+ float v = event.values[0];
+ boolean positive = (v >= 0.5f && v <= 4.5);
+ android.util.Log.d("PHH", "Samsung hover sensor changed " + positive + ":" + v);
+ handleProximitySensorEvent(time, positive);
+ return;
+ }
final float distance = event.values[0];
boolean positive = distance >= 0.0f && distance < mProximityThreshold;
handleProximitySensorEvent(time, positive);
--
2.34.1

View File

@ -0,0 +1,121 @@
From e46a9f944f561ec28a22fca69531c429cd6e2e5b Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sat, 24 Mar 2018 08:01:48 +0100
Subject: [PATCH 22/40] backlight: Fix backlight control on Galaxy S9(+)
Change-Id: I1fbbb47939c377597ef8ad6b88b2acea5f4acaa6
:backlight: S9 brightness override only for screen
Change-Id: Ie16a46336fa64850014b962429f7a20ff569222f
:backlight: [WIP] Fix OP6 brightness
Change-Id: If08959ece6cac1f27e1f1a0bd966ee8e1813241d
:backlight: Try to make brightness more generic using property set by rw-system
Change-Id: I0f20ca4b1f0fa1fcfd19833aa291fbdf16d6eedd
:backlight: Add Qualcomm starlte
Change-Id: I12a445344deb8b2e59a2f6ce6b24c1ffe5675092
:backlight: Switch samsung light fingerprint match to regexp, to include Note9
Change-Id: I2995f7bab615aec125927a5a027ad8f9ae43405f
Add a property toggle to enable high brightness range on samsung device
Change-Id: I649a3985ef87f46a5515a63935fdae9cdcbd8ec5
:backlight: Add japanese S9
Change-Id: I5e245469f5f51fed14c6080e5be72506e10389e0
:backlight: Fix backlight on S10*. Add an additional property to check, so testers can try it more easily
Change-Id: Ia224e641cad8561201b4dee3d896362bee80c903
:backlight: Make samsung light HAL more overridable
Change-Id: Ie04f394f8a614da8070f330bcadbcbe12895bed0
Use new backlight control API only for backlight, not for other lights
Change-Id: I35c35fabff8b275f35671dcb8578b96dcad526f1
:backlight: fixup
Change-Id: I4e85178327d2bb63d5d0a37786058843662a89ba
---
.../android/server/lights/LightsService.java | 46 +++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/services/core/java/com/android/server/lights/LightsService.java b/services/core/java/com/android/server/lights/LightsService.java
index fea6b29d9260..caf9eba7d9a8 100644
--- a/services/core/java/com/android/server/lights/LightsService.java
+++ b/services/core/java/com/android/server/lights/LightsService.java
@@ -32,6 +32,7 @@ import android.os.IBinder;
import android.os.Looper;
import android.os.RemoteException;
import android.os.ServiceManager;
+import android.os.SystemProperties;
import android.os.Trace;
import android.provider.Settings;
import android.util.Slog;
@@ -295,6 +296,51 @@ public class LightsService extends SystemService {
return;
}
int brightnessInt = BrightnessSynchronizer.brightnessFloatToInt(brightness);
+
+ if(mHwLight.id == 0) {
+ String fp = SystemProperties.get("ro.vendor.build.fingerprint", "hello");
+ if(fp.matches(".*astarqlte.*")) {
+ int newBrightness = brightnessInt;
+ if(SystemProperties.getBoolean("persist.sys.samsung.full_brightness", false)) {
+ newBrightness = (int) (brightnessInt * 365.0 / 255.0);
+ }
+ setLightLocked(newBrightness, LIGHT_FLASH_HARDWARE, 0, 0, brightnessMode);
+ return;
+ }
+
+ int useSamsungBacklight = SystemProperties.getInt("persist.sys.phh.samsung_backlight", -1);
+ if(useSamsungBacklight != 0) {
+ if(useSamsungBacklight > 0 ||
+ fp.matches(".*beyond.*lte.*") ||
+ fp.matches(".*(crown|star)[q2]*lte.*") ||
+ fp.matches(".*(SC-0[23]K|SCV3[89]).*")) {
+ int ratio = 100;
+ if(useSamsungBacklight > 1)
+ ratio = useSamsungBacklight;
+ int newBrightness = brightnessInt * ratio;
+ if(SystemProperties.getBoolean("persist.sys.samsung.full_brightness", false)) {
+ newBrightness = (int) (brightnessInt * 40960.0 / 255.0);
+ }
+ setLightLocked(newBrightness, LIGHT_FLASH_HARDWARE, 0, 0, brightnessMode);
+ return;
+ }
+ }
+
+ boolean qcomExtendBrightness = SystemProperties.getBoolean("persist.extend.brightness", false);
+ int scale = SystemProperties.getInt("persist.display.max_brightness", 1023);
+ //This is set by vndk-detect
+ int qcomScale = SystemProperties.getInt("persist.sys.qcom-brightness", -1);
+ if(qcomScale != -1) {
+ qcomExtendBrightness = true;
+ scale = qcomScale;
+ }
+
+ if(qcomExtendBrightness) {
+ setLightLocked(brightnessInt * scale / 255, LIGHT_FLASH_NONE, 0, 0, brightnessMode);
+ return;
+ }
+ }
+
int color = brightnessInt & 0x000000ff;
color = 0xff000000 | (color << 16) | (color << 8) | color;
setLightLocked(color, LIGHT_FLASH_NONE, 0, 0, brightnessMode);
--
2.34.1

View File

@ -0,0 +1,27 @@
From 2e3edc114941d9f984065a8dc62c1ae6ebe53dc6 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 27 Dec 2021 17:57:11 -0500
Subject: [PATCH 24/40] Once we integrate Samsung Power hal in libpowermanager,
libpowermanager and its deps require linking against
vendor.samsung.hardware.miscpower@2.0
Change-Id: I9084f64e505009abe9420d28b44199605cee52d8
---
services/core/jni/Android.bp | 1 +
1 file changed, 1 insertion(+)
diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp
index 1fc974ebc56f..c73b29739cbf 100644
--- a/services/core/jni/Android.bp
+++ b/services/core/jni/Android.bp
@@ -188,6 +188,7 @@ cc_defaults {
"service.incremental",
"vendor.samsung.hardware.light@2.0",
"vendor.samsung.hardware.light@3.0",
+ "vendor.samsung.hardware.miscpower@2.0",
],
static_libs: [
--
2.34.1

View File

@ -0,0 +1,102 @@
From 045b26b61ba6c6a0f74b0ed4b06ad67c8cb160e3 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 14 Dec 2022 17:21:00 -0500
Subject: [PATCH 30/40] Call Samsung's ISehSysInputDev to report screen state
to touchscreen driver
This fixes touchscreen not waking up on Galaxy F23
---
services/core/Android.bp | 1 +
.../server/display/LocalDisplayAdapter.java | 32 +++++++++++++++++++
2 files changed, 33 insertions(+)
diff --git a/services/core/Android.bp b/services/core/Android.bp
index faf7da35813a..ebd4373e25c1 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -174,6 +174,7 @@ java_library_static {
"motorola.hardware.health-V1.0-java",
"overlayable_policy_aidl-java",
"com.android.sysprop.watchdog",
+ "vendor.samsung.hardware.sysinput-V1.2-java", // HIDL
],
javac_shard_size: 50,
}
diff --git a/services/core/java/com/android/server/display/LocalDisplayAdapter.java b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
index 58a182a61e44..84c3982458ff 100644
--- a/services/core/java/com/android/server/display/LocalDisplayAdapter.java
+++ b/services/core/java/com/android/server/display/LocalDisplayAdapter.java
@@ -33,6 +33,7 @@ import android.os.Trace;
import android.util.DisplayUtils;
import android.util.LongSparseArray;
import android.util.Slog;
+import android.util.Log;
import android.util.SparseArray;
import android.view.Display;
import android.view.DisplayAddress;
@@ -48,6 +49,8 @@ import com.android.server.LocalServices;
import com.android.server.lights.LightsManager;
import com.android.server.lights.LogicalLight;
+import vendor.samsung.hardware.sysinput.V1_1.ISehSysInputDev;
+
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.Arrays;
@@ -228,6 +231,8 @@ final class LocalDisplayAdapter extends DisplayAdapter {
private DisplayEventReceiver.FrameRateOverride[] mFrameRateOverrides =
new DisplayEventReceiver.FrameRateOverride[0];
+ private boolean triedSamsungHal = false;
+ private ISehSysInputDev samsungSysinput = null;
LocalDisplayDevice(IBinder displayToken, long physicalDisplayId,
SurfaceControl.StaticDisplayInfo staticDisplayInfo,
@@ -815,17 +820,44 @@ final class LocalDisplayAdapter extends DisplayAdapter {
}
mSidekickActive = false;
}
+ if (!triedSamsungHal) {
+ triedSamsungHal = true;
+ try {
+ samsungSysinput = ISehSysInputDev.getService();
+ } catch(Throwable t) {}
+ }
final int mode = getPowerModeForState(state);
Trace.traceBegin(Trace.TRACE_TAG_POWER, "setDisplayState("
+ "id=" + physicalDisplayId
+ ", state=" + Display.stateToString(state) + ")");
+
+ if (samsungSysinput != null) {
+ try {
+ Log.d("PHH", "setTspEnable 1, " + state + ", true");
+ samsungSysinput.setTspEnable(1, state, true);
+ } catch(Throwable t) {
+ Log.d("PHH", "Failed settings tsp enable", t);
+ }
+ }
+
try {
mSurfaceControlProxy.setDisplayPowerMode(token, mode);
Trace.traceCounter(Trace.TRACE_TAG_POWER, "DisplayPowerMode", mode);
} finally {
Trace.traceEnd(Trace.TRACE_TAG_POWER);
}
+
+ if (samsungSysinput != null) {
+ try {
+ Log.d("PHH", "setTspEnable 1, " + state + ", false");
+ samsungSysinput.setTspEnable(1, state, false);
+ } catch(Throwable t) {
+ Log.d("PHH", "Failed settings tsp enable", t);
+ }
+ }
+
setCommittedState(state);
+
// If we're entering a suspended (but not OFF) power state and we
// have a sidekick available, tell it now that it can take control.
if (Display.isSuspendedState(state) && state != Display.STATE_OFF
--
2.34.1

View File

@ -0,0 +1,566 @@
From 9608e159585b0fad82cede7fd9dca5e50a71672b Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 18 Dec 2022 18:20:40 -0500
Subject: [PATCH 32/40] FOD support for Asus ZF8 and Samsung devices
Thanks Asus for providing a free device to make this support
And thanks @davigamer987 for donating enough to get a Samsung FOD device
to make this
Change-Id: Ib328f39217c3f9b42e13e186496b3f6391643637
---
packages/SystemUI/Android.bp | 1 +
packages/SystemUI/res/values/config.xml | 2 +-
.../biometrics/UdfpsControllerOverlay.kt | 7 +-
.../android/systemui/biometrics/UdfpsView.kt | 138 ++++++++++
services/core/Android.bp | 7 +-
.../server/biometrics/AuthService.java | 238 +++++++++++++++++-
6 files changed, 388 insertions(+), 5 deletions(-)
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index b4027197344d..0637dd4b4471 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -178,6 +178,7 @@ android_library {
"LowLightDreamLib",
"motion_tool_lib",
"vendor.lineage.powershare-V1.0-java",
+ "vendor.goodix.hardware.biometrics.fingerprint-V2.1-java",
],
manifest: "AndroidManifest.xml",
additional_manifests: ["LineageManifest.xml"],
diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml
index 0743bcdde621..99f21ed21d15 100644
--- a/packages/SystemUI/res/values/config.xml
+++ b/packages/SystemUI/res/values/config.xml
@@ -585,7 +585,7 @@
<!-- The radius of the enrollment progress bar, in dp -->
<integer name="config_udfpsEnrollProgressBar" translatable="false">
- 70
+ 50
</integer>
<!-- The time (in ms) needed to trigger the lock icon view's long-press affordance -->
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt
index b6b5d26b398c..88c2976d81ab 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsControllerOverlay.kt
@@ -120,7 +120,9 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
gravity = android.view.Gravity.TOP or android.view.Gravity.LEFT
layoutInDisplayCutoutMode = WindowManager.LayoutParams.LAYOUT_IN_DISPLAY_CUTOUT_MODE_ALWAYS
flags = (Utils.FINGERPRINT_OVERLAY_LAYOUT_PARAM_FLAGS or
- WindowManager.LayoutParams.FLAG_SPLIT_TOUCH)
+ WindowManager.LayoutParams.FLAG_SPLIT_TOUCH) or
+ WindowManager.LayoutParams.FLAG_DIM_BEHIND
+ dimAmount = 0.0f
privateFlags = WindowManager.LayoutParams.PRIVATE_FLAG_TRUSTED_OVERLAY
// Avoid announcing window title.
accessibilityTitle = " "
@@ -189,6 +191,9 @@ class UdfpsControllerOverlay @JvmOverloads constructor(
windowManager.addView(this, coreLayoutParams.updateDimensions(animation))
sensorRect = sensorBounds
touchExplorationEnabled = accessibilityManager.isTouchExplorationEnabled
+ dimUpdate = {
+ windowManager.updateViewLayout(this, coreLayoutParams.updateDimensions(animation).apply { dimAmount = it })
+ }
overlayTouchListener = TouchExplorationStateChangeListener {
if (accessibilityManager.isTouchExplorationEnabled) {
setOnHoverListener { v, event -> onTouch(v, event, true) }
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt
index e61c614f0292..cdaad81b9222 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt
@@ -19,18 +19,27 @@ import android.content.Context
import android.graphics.Canvas
import android.graphics.Color
import android.graphics.Paint
+import android.graphics.PixelFormat
import android.graphics.PointF
import android.graphics.Rect
import android.graphics.RectF
+import android.os.FileObserver
import android.util.AttributeSet
import android.util.Log
import android.view.MotionEvent
+import android.view.SurfaceHolder
+import android.view.SurfaceView
+import android.view.ViewGroup
import android.widget.FrameLayout
import com.android.systemui.R
import com.android.systemui.doze.DozeReceiver
+import java.io.File
+
+import vendor.goodix.hardware.biometrics.fingerprint.V2_1.IGoodixFingerprintDaemon
private const val TAG = "UdfpsView"
+
/**
* The main view group containing all UDFPS animations.
*/
@@ -38,6 +47,54 @@ class UdfpsView(
context: Context,
attrs: AttributeSet?
) : FrameLayout(context, attrs), DozeReceiver {
+ private var currentOnIlluminatedRunnable: Runnable? = null
+ private val mySurfaceView = SurfaceView(context)
+ init {
+ mySurfaceView.setVisibility(INVISIBLE)
+ mySurfaceView.setZOrderOnTop(true)
+ addView(mySurfaceView, FrameLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT))
+ mySurfaceView.holder.addCallback(object: SurfaceHolder.Callback{
+ override fun surfaceCreated(p0: SurfaceHolder) {
+ Log.d("PHH", "Surface created!")
+ val paint = Paint(0 /* flags */);
+ paint.setAntiAlias(true);
+ paint.setStyle(Paint.Style.FILL);
+ val colorStr = android.os.SystemProperties.get("persist.sys.phh.fod_color", "00ff00");
+ try {
+ val parsedColor = Color.parseColor("#" + colorStr);
+ val r = (parsedColor shr 16) and 0xff;
+ val g = (parsedColor shr 8) and 0xff;
+ val b = (parsedColor shr 0) and 0xff;
+ paint.setARGB(255, r, g, b);
+ } catch(t: Throwable) {
+ Log.d("PHH", "Failed parsing color #" + colorStr, t);
+ }
+ var canvas: Canvas? = null
+ try {
+ canvas = p0.lockCanvas();
+Log.d("PHH", "Surface dimensions ${canvas.getWidth()*1.0f} ${canvas.getHeight()*1.0f}")
+ canvas.drawOval(RectF(0.0f, 0.0f, canvas.getWidth()*1.0f, canvas.getHeight()*1.0f), paint);
+ } finally {
+ // Make sure the surface is never left in a bad state.
+ if (canvas != null) {
+ p0.unlockCanvasAndPost(canvas);
+ }
+ }
+
+ currentOnIlluminatedRunnable?.run()
+ }
+
+ override fun surfaceChanged(p0: SurfaceHolder, p1: Int, p2: Int, p3: Int) {
+Log.d("PHH", "Got surface size $p1 $p2 $p3")
+ }
+
+ override fun surfaceDestroyed(p0: SurfaceHolder) {
+Log.d("PHH", "Surface destroyed!")
+ }
+ })
+ mySurfaceView.holder.setFormat(PixelFormat.RGBA_8888)
+
+ }
// Use expanded overlay when feature flag is true, set by UdfpsViewController
var useExpandedOverlay: Boolean = false
@@ -66,6 +123,8 @@ class UdfpsView(
/** Parameters that affect the position and size of the overlay. */
var overlayParams = UdfpsOverlayParams()
+ var dimUpdate: (Float) -> Unit = {}
+
/** Debug message. */
var debugMessage: String? = null
set(value) {
@@ -146,15 +205,94 @@ class UdfpsView(
!(animationViewController?.shouldPauseAuth() ?: false)
}
+ fun goodixCmd(id: Int) {
+ val goodixSvc = IGoodixFingerprintDaemon.getService()
+ if(goodixSvc != null) {
+ goodixSvc.sendCommand(id, ArrayList(), { returnCode, resultData -> {
+ Log.e("PHH-Enroll", "Goodix send command returned code "+ returnCode);
+ }});
+ }
+ }
+
+ val asusGhbmOnAchieved = "/sys/class/drm/ghbm_on_achieved"
+ var hasAsusGhbm = File(asusGhbmOnAchieved).exists()
+ var samsungActualMaskBrightness = "/sys/class/lcd/panel/actual_mask_brightness"
+ val hasSamsungMask = File(samsungActualMaskBrightness).exists()
+ var fodFileObserver: FileObserver? = null
+
fun configureDisplay(onDisplayConfigured: Runnable) {
isDisplayConfigured = true
animationViewController?.onDisplayConfiguring()
mUdfpsDisplayMode?.enable(onDisplayConfigured)
+
+ mySurfaceView.setVisibility(VISIBLE)
+ Log.d("PHH", "setting surface visible!")
+
+ val brightness = File("/sys/class/backlight/panel0-backlight/brightness").readText().toDouble()
+ val maxBrightness = File("/sys/class/backlight/panel0-backlight/max_brightness").readText().toDouble()
+
+ // Assume HBM is max brightness
+ val dim = 1.0 - Math.pow( (brightness / maxBrightness), 1/2.3);
+ Log.d("PHH-Enroll", "Brightness is $brightness / $maxBrightness, setting dim to $dim")
+ if (hasAsusGhbm) {
+ dimUpdate(dim.toFloat())
+ }
+ if (hasSamsungMask) {
+ dimUpdate(dim.toFloat())
+ }
+
+ if(android.os.SystemProperties.get("ro.vendor.build.fingerprint").contains("ASUS")) {
+ goodixCmd(200001)
+ }
}
fun unconfigureDisplay() {
isDisplayConfigured = false
animationViewController?.onDisplayUnconfigured()
mUdfpsDisplayMode?.disable(null /* onDisabled */)
+
+ if (hasAsusGhbm) {
+ fodFileObserver = object: FileObserver(asusGhbmOnAchieved, FileObserver.MODIFY) {
+ override fun onEvent(event: Int, path: String): Unit {
+ Log.d("PHH-Enroll", "Asus ghbm event")
+ try {
+ val spotOn = File(asusGhbmOnAchieved).readText().toInt()
+ if(spotOn == 0) {
+ dimUpdate(0.0f)
+ fodFileObserver?.stopWatching()
+ fodFileObserver = null
+ }
+ } catch(e: Exception) {
+ Log.d("PHH-Enroll", "Failed dimpdate off", e)
+ }
+ }
+ };
+ fodFileObserver?.startWatching();
+ } else if (hasSamsungMask) {
+ fodFileObserver = object: FileObserver(asusGhbmOnAchieved, FileObserver.MODIFY) {
+ override fun onEvent(event: Int, path: String): Unit {
+ Log.d("PHH-Enroll", "samsung mask brightness event")
+ try {
+ val spotOn = File(samsungActualMaskBrightness).readText().toInt()
+ if(spotOn == 0) {
+ dimUpdate(0.0f)
+ fodFileObserver?.stopWatching()
+ fodFileObserver = null
+ }
+ } catch(e: Exception) {
+ Log.d("PHH-Enroll", "Failed dimpdate off", e)
+ }
+ }
+ };
+ fodFileObserver?.startWatching();
+ } else {
+ dimUpdate(0.0f)
+ }
+
+ mySurfaceView.setVisibility(INVISIBLE)
+ Log.d("PHH", "setting surface invisible!")
+ if(android.os.SystemProperties.get("ro.vendor.build.fingerprint").contains("ASUS")) {
+ goodixCmd(200003)
+ }
}
}
diff --git a/services/core/Android.bp b/services/core/Android.bp
index ebd4373e25c1..c4c8ee1f565a 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -174,7 +174,12 @@ java_library_static {
"motorola.hardware.health-V1.0-java",
"overlayable_policy_aidl-java",
"com.android.sysprop.watchdog",
- "vendor.samsung.hardware.sysinput-V1.2-java", // HIDL
+ // HIDL
+ "vendor.samsung.hardware.sysinput-V1.2-java",
+ "vendor.goodix.hardware.biometrics.fingerprint-V2.1-java",
+ "vendor.samsung.hardware.biometrics.fingerprint-V3.0-java",
+ "vendor.oplus.hardware.biometrics.fingerprint-V2.1-java",
+ "vendor.oppo.hardware.biometrics.fingerprint-V2.1-java",
],
javac_shard_size: 50,
}
diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java
index 7e6f35acc398..063e3599d6cd 100644
--- a/services/core/java/com/android/server/biometrics/AuthService.java
+++ b/services/core/java/com/android/server/biometrics/AuthService.java
@@ -77,6 +77,22 @@ import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
+import android.hardware.display.DisplayManager;
+
+import android.graphics.Point;
+import android.util.DisplayMetrics;
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.PrintWriter;
+
+import android.os.FileObserver;
+import android.os.Build;
+
+import vendor.samsung.hardware.biometrics.fingerprint.V3_0.ISehBiometricsFingerprint;
+import vendor.goodix.hardware.biometrics.fingerprint.V2_1.IGoodixFingerprintDaemon;
+import vendor.samsung.hardware.sysinput.V1_0.ISehSysInputDev;
+
/**
* System service that provides an interface for authenticating with biometrics and
* PIN/pattern/password to BiometricPrompt and lock screen.
@@ -95,6 +111,9 @@ public class AuthService extends SystemService {
@VisibleForTesting
final IAuthService.Stub mImpl;
+ private FileObserver fodFileObserver = null;
+ private ISehBiometricsFingerprint mSamsungFingerprint = null;
+
/**
* Class for injecting dependencies into AuthService.
* TODO(b/141025588): Replace with a dependency injection framework (e.g. Guice, Dagger).
@@ -652,6 +671,72 @@ public class AuthService extends SystemService {
registerAuthenticators(hidlConfigs);
mInjector.publishBinderService(this, mImpl);
+ try {
+ mSamsungFingerprint = ISehBiometricsFingerprint.getService();
+ android.util.Log.e("PHH", "Got samsung fingerprint HAL");
+ } catch(Exception e) {
+ android.util.Log.e("PHH", "Failed getting Samsung fingerprint HAL", e);
+ }
+ if(samsungHasCmd("fod_enable") && mSamsungFingerprint != null) {
+ samsungCmd("fod_enable,1,1,0");
+ String actualMaskBrightnessPath = "/sys/class/lcd/panel/actual_mask_brightness";
+ android.util.Log.e("PHH-Enroll", "Reading actual brightness file gives " + readFile(actualMaskBrightnessPath));
+ fodFileObserver = new FileObserver(actualMaskBrightnessPath, FileObserver.MODIFY) {
+ @Override
+ public void onEvent(int event, String path) {
+ String actualMask = readFile(actualMaskBrightnessPath);
+ try {
+ mSamsungFingerprint = ISehBiometricsFingerprint.getService();
+ } catch(Exception e) {}
+ Slog.d("PHH-Enroll", "New actual mask brightness is " + actualMask);
+ try {
+ int eventReq = 0;
+ if("0".equals(actualMask)) {
+ eventReq = 1; //released
+ } else {
+ eventReq = 2; //pressed
+ }
+ if(mSamsungFingerprint != null) {
+ mSamsungFingerprint.sehRequest(22 /* SEM_FINGER_STATE */, eventReq, new java.util.ArrayList<Byte>(),
+ (int retval, java.util.ArrayList<Byte> out) -> {} );
+ }
+ } catch(Exception e) {
+ Slog.d("PHH-Enroll", "Failed setting samsung event for mask observer", e);
+ }
+ }
+ };
+ fodFileObserver.startWatching();
+ }
+
+ String asusGhbmOnAchieved = "/sys/class/drm/ghbm_on_achieved";
+ if( (new File(asusGhbmOnAchieved)).exists()) {
+ fodFileObserver = new FileObserver(asusGhbmOnAchieved, FileObserver.MODIFY) {
+ boolean wasOn = false;
+ @Override
+ public void onEvent(int event, String path) {
+ String spotOn = readFile(asusGhbmOnAchieved);
+ if("1".equals(spotOn)) {
+ if(!wasOn) {
+ try {
+ IGoodixFingerprintDaemon goodixDaemon = IGoodixFingerprintDaemon.getService();
+
+ //Send UI ready
+ goodixDaemon.sendCommand(200002, new java.util.ArrayList<Byte>(), (returnCode, resultData) -> {
+ Slog.e(TAG, "Goodix send command touch pressed returned code "+ returnCode);
+ });
+ } catch(Throwable t) {
+ Slog.d("PHH-Enroll", "Failed sending goodix command", t);
+ }
+ }
+ wasOn = true;
+ } else {
+ wasOn = false;
+ }
+ }
+ };
+ fodFileObserver.startWatching();
+ }
+
}
/**
@@ -775,18 +860,104 @@ public class AuthService extends SystemService {
? modality : (modality & ~BiometricAuthenticator.TYPE_CREDENTIAL);
}
+ private int[] dynamicUdfpsProps() {
+ DisplayManager mDM = (DisplayManager) getContext().getSystemService(Context.DISPLAY_SERVICE);
+ Point displayRealSize = new Point();
+ DisplayMetrics displayMetrics = new DisplayMetrics();
+ mDM.getDisplay(0).getRealSize(displayRealSize);
+ mDM.getDisplay(0).getMetrics(displayMetrics);
+
+ if(readFile("/sys/class/fingerprint/fingerprint/position") != null) {
+ try {
+ ISehSysInputDev s = ISehSysInputDev.getService();
+ s.getTspFodInformation(0, (a, b) -> {
+ Slog.d("PHH-Enroll", "TspFod info " + a + ", " + b);
+ });
+ s.getTspFodPosition(0, (a, b) -> {
+ Slog.d("PHH-Enroll", "TspFod info " + a + ", " + b);
+ });
+ }catch(Throwable t) {
+ Slog.d("PHH-Enroll", "heya ", t);
+ }
+
+
+ android.util.Log.d("PHH", "Samsung fingerprint");
+ String[] fodPositionArray = readFile("/sys/class/fingerprint/fingerprint/position").split(",");
+ float bottomMM = Float.parseFloat(fodPositionArray[0]);
+ float areaSizeMM = Float.parseFloat(fodPositionArray[5]);
+ float heightMM = Float.parseFloat(fodPositionArray[2]);
+ float bottomInch = bottomMM * 0.0393700787f;
+ float areaSizeInch = areaSizeMM * 0.0393700787f;
+ float heightInch = heightMM * 0.0393700787f;
+ int bottomPx = (int)(bottomInch * displayMetrics.ydpi);
+ int areaSizePx = (int)(areaSizeInch * displayMetrics.ydpi);
+ int midDistPx = (int)(areaSizeInch * displayMetrics.ydpi / 2.0f);
+
+ float mW = areaSizePx/2;
+ float mH = areaSizePx/2;
+ float mX = displayRealSize.x/2;
+ //float mY = displayRealSize.y - bottomPx - midDistPx;
+ float mY = displayRealSize.y - (bottomInch * displayMetrics.ydpi) - (areaSizeInch * displayMetrics.ydpi / 2.0f);
+
+ samsungCmd(String.format("fod_rect,%d,%d,%d,%d", (int)(mX - mW/2), (int)(mY - mW/2), (int)(mX + mW/2), (int)(mY + mW/2)));
+ Slog.d("PHH-Enroll", "Display real size is " + displayRealSize.y + ", dpy " + displayMetrics.ydpi);
+
+ int udfpsProps[] = new int[3];
+ udfpsProps[0] = (int)mX;
+ udfpsProps[1] = (int)mY;
+ udfpsProps[2] = (int)mW;
+
+ try {
+ mSamsungFingerprint = ISehBiometricsFingerprint.getService();
+ Slog.d("PHH-Enroll", "Samsung ask for sensor status");
+ mSamsungFingerprint.sehRequest(6, 0, new java.util.ArrayList(), (int retval, java.util.ArrayList<Byte> out) -> {
+ Slog.d("PHH-Enroll", "Result is " + retval);
+ for(int i=0; i<out.size(); i++) {
+ Slog.d("PHH-Enroll", "\t" + i + ":" + out.get(i));
+ }
+ } );
+ Slog.d("PHH-Enroll", "Samsung ask for sensor brightness value");
+ mSamsungFingerprint.sehRequest(32, 0, new java.util.ArrayList(), (int retval, java.util.ArrayList<Byte> out) -> {
+ Slog.d("PHH-Enroll", "Result is " + retval);
+ for(int i=0; i<out.size(); i++) {
+ Slog.d("PHH-Enroll", "\t" + i + ":" + out.get(i));
+ }
+ } );
+
+ } catch(Exception e) {
+ Slog.d("PHH-Enroll", "Failed setting samsung3.0 fingerprint recognition", e);
+ }
+ return udfpsProps;
+ }
+
+ if(android.os.SystemProperties.get("ro.vendor.build.fingerprint").contains("ASUS_I006D")) {
+ int udfpsProps[] = new int[3];
+ udfpsProps[0] = displayRealSize.x/2;
+ udfpsProps[1] = 1741;
+ udfpsProps[2] = 110;
+ return udfpsProps;
+ }
+
+ return new int[0];
+ }
private FingerprintSensorPropertiesInternal getHidlFingerprintSensorProps(int sensorId,
@BiometricManager.Authenticators.Types int strength) {
// The existence of config_udfps_sensor_props indicates that the sensor is UDFPS.
- final int[] udfpsProps = getContext().getResources().getIntArray(
+ int[] udfpsProps = getContext().getResources().getIntArray(
com.android.internal.R.array.config_udfps_sensor_props);
// Non-empty workaroundLocations indicates that the sensor is SFPS.
final List<SensorLocationInternal> workaroundLocations =
getWorkaroundSensorProps(getContext());
- final boolean isUdfps = !ArrayUtils.isEmpty(udfpsProps);
+ boolean isUdfps = !ArrayUtils.isEmpty(udfpsProps);
+ if(!isUdfps) udfpsProps = dynamicUdfpsProps();
+ isUdfps = !ArrayUtils.isEmpty(udfpsProps);
+
+ if(udfpsProps.length > 0) {
+ Slog.d("PHH-Enroll", "Got udfps infos " + udfpsProps[0] + ", " + udfpsProps[1] + ", " + udfpsProps[2]);
+ }
// config_is_powerbutton_fps indicates whether device has a power button fingerprint sensor.
final boolean isPowerbuttonFps = getContext().getResources().getBoolean(
@@ -854,4 +1025,67 @@ public class AuthService extends SystemService {
componentInfo, resetLockoutRequiresHardwareAuthToken,
resetLockoutRequiresChallenge);
}
+
+ private static boolean samsungHasCmd(String cmd) {
+ try {
+ File f = new File("/sys/devices/virtual/sec/tsp/cmd_list");
+ if(!f.exists()) return false;
+
+ android.util.Log.d("PHH", "Managed to grab cmd list, checking...");
+ BufferedReader b = new BufferedReader(new FileReader(f));
+ String line = null;
+ while( (line = b.readLine()) != null) {
+ if(line.equals(cmd)) return true;
+ }
+ android.util.Log.d("PHH", "... nope");
+ return false;
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed reading cmd_list", e);
+ return false;
+ }
+ }
+
+ public static void samsungCmd(String cmd) {
+ try {
+ writeFile("/sys/devices/virtual/sec/tsp/cmd", cmd);
+
+ String status = readFile("/sys/devices/virtual/sec/tsp/cmd_status");
+ String ret = readFile("/sys/devices/virtual/sec/tsp/cmd_result");
+
+ android.util.Log.d("PHH", "Sending command " + cmd + " returned " + ret + ":" + status);
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed sending command " + cmd, e);
+ }
+ }
+
+ private static void writeFile(String path, String value) {
+ try {
+ PrintWriter writer = new PrintWriter(path, "UTF-8");
+ writer.println(value);
+ writer.close();
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed writing to " + path + ": " + value);
+ }
+ }
+
+ private static void writeFile(File file, String value) {
+ try {
+ PrintWriter writer = new PrintWriter(file, "UTF-8");
+ writer.println(value);
+ writer.close();
+ } catch(Exception e) {
+ android.util.Log.d("PHH", "Failed writing to " + file + ": " + value);
+ }
+ }
+
+ private static String readFile(String path) {
+ try {
+ File f = new File(path);
+
+ BufferedReader b = new BufferedReader(new FileReader(f));
+ return b.readLine();
+ } catch(Exception e) {
+ return null;
+ }
+ }
}
--
2.34.1

View File

@ -0,0 +1,39 @@
From 1a3206a559815eaa16f9429ad7005bf9b9166e00 Mon Sep 17 00:00:00 2001
From: ItsLynix <71310187+ItsLynix@users.noreply.github.com>
Date: Sat, 28 Jan 2023 10:25:16 +0100
Subject: [PATCH 34/40] SystemUI: Implement alternate brightness path for FOD
Change-Id: I0d9d7352c507529a3aa66e7a7d78220887a5a532
---
.../com/android/systemui/biometrics/UdfpsView.kt | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt
index cdaad81b9222..6cc9ab3da570 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt
@@ -228,8 +228,19 @@ Log.d("PHH", "Surface destroyed!")
mySurfaceView.setVisibility(VISIBLE)
Log.d("PHH", "setting surface visible!")
- val brightness = File("/sys/class/backlight/panel0-backlight/brightness").readText().toDouble()
- val maxBrightness = File("/sys/class/backlight/panel0-backlight/max_brightness").readText().toDouble()
+ val brightnessFile = File("/sys/class/backlight/panel/brightness")
+ val maxBrightnessFile = File("/sys/class/backlight/panel/max_brightness")
+
+ var brightness: Double = 0.0
+ var maxBrightness: Double = 0.0
+
+ if (brightnessFile.exists() && maxBrightnessFile.exists()) {
+ brightness = brightnessFile.readText().toDouble()
+ maxBrightness = maxBrightnessFile.readText().toDouble()
+ } else {
+ brightness = File("/sys/class/backlight/panel0-backlight/brightness").readText().toDouble()
+ maxBrightness = File("/sys/class/backlight/panel0-backlight/max_brightness").readText().toDouble()
+ }
// Assume HBM is max brightness
val dim = 1.0 - Math.pow( (brightness / maxBrightness), 1/2.3);
--
2.34.1

View File

@ -0,0 +1,125 @@
From 97ffa12b05a61bf23af04c575dca064141ead52f Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sat, 17 Jun 2023 08:31:55 -0400
Subject: [PATCH 37/40] Add Mediatek power hints on touch
Mediatek has multiple HALs (which existed concurrently), so it is a bit
of a mess.
From what I can tell, mOldMtkPerf is used on Android 10 vendors, while
mMtkPerf is used on Android 11/12 vendors.
If anyone has an Android 9 vendor and want to take a look, I think it
would be something like this:
vendor.mediatek.hardware.power.V2_0.IPower.powerHint()
On some devices, sending the touch boost isn't very helpful. Our guess
is that Android 12 rendering got a lot heavier, and then touch boost is
not enough. So, we add a property to /cheat/ and report a bigger boost:
APP_ROTATE.
On the few devices we've seen, touch boost only boosts scheduler, while
app rotate will also for cpu min frequency.
Experimentally using this app rotate boost indeed makes the device much
smoother.
Change-Id: I92729336e8a27b925a1c3aede24c95e971d41b88
---
services/core/Android.bp | 1 +
.../com/android/server/wm/DisplayPolicy.java | 50 +++++++++++++++++++
2 files changed, 51 insertions(+)
diff --git a/services/core/Android.bp b/services/core/Android.bp
index c4c8ee1f565a..8514ad55da09 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -175,6 +175,7 @@ java_library_static {
"overlayable_policy_aidl-java",
"com.android.sysprop.watchdog",
// HIDL
+ "vendor.mediatek.hardware.mtkpower-V1.1-java",
"vendor.samsung.hardware.sysinput-V1.2-java",
"vendor.goodix.hardware.biometrics.fingerprint-V2.1-java",
"vendor.samsung.hardware.biometrics.fingerprint-V3.0-java",
diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java
index 41f84c05a749..024f27a42d76 100644
--- a/services/core/java/com/android/server/wm/DisplayPolicy.java
+++ b/services/core/java/com/android/server/wm/DisplayPolicy.java
@@ -221,6 +221,9 @@ public class DisplayPolicy {
private boolean mCanSystemBarsBeShownByUser;
private boolean mNavButtonForcedVisible;
+ private vendor.mediatek.hardware.mtkpower.V1_1.IMtkPerf mMtkPerf;
+ private vendor.mediatek.hardware.mtkpower.V1_0.IMtkPower mOldMtkPerf;
+
StatusBarManagerInternal getStatusBarManagerInternal() {
synchronized (mServiceAcquireLock) {
if (mStatusBarManagerInternal == null) {
@@ -473,6 +476,20 @@ public class DisplayPolicy {
mScreenOnEarly = true;
mScreenOnFully = true;
}
+ try {
+ mMtkPerf = vendor.mediatek.hardware.mtkpower.V1_1.IMtkPerf.getService();
+ } catch(Throwable t) {
+ android.util.Log.d("PHH-Power", "Retrieving mtkpower 1.0", t);
+ mMtkPerf = null;
+ }
+
+ try {
+ mOldMtkPerf = vendor.mediatek.hardware.mtkpower.V1_0.IMtkPower.getService();
+ } catch(Throwable t) {
+ android.util.Log.d("PHH-Power", "Retrieving mtkpower 1.0", t);
+ mOldMtkPerf = null;
+ }
+
final Looper looper = UiThread.getHandler().getLooper();
mHandler = new PolicyHandler(looper);
@@ -552,6 +569,17 @@ public class DisplayPolicy {
mService.mPowerManagerInternal.setPowerBoost(
Boost.INTERACTION, duration);
}
+ if(mOldMtkPerf != null) {
+ try {
+ android.util.Log.d("PHH-Power", "mtk1 fling power hint");
+ int hint = 36; // MTKPOWER_HINT_APP_TOUCH
+ if("rotate".equals(SystemProperties.get("persist.sys.phh.touch_hint")))
+ hint = 35; // MTKPOWER_HINT_APP_ROTATE
+ mOldMtkPerf.mtkPowerHint(hint, duration);
+ } catch(Throwable t) {
+ android.util.Log.d("PHH-Power", "Failed sending touch power hint", t);
+ }
+ }
}
@Override
@@ -570,6 +598,28 @@ public class DisplayPolicy {
if (listener != null) {
listener.onTouchStart();
}
+ if(mMtkPerf != null) {
+ try {
+ android.util.Log.d("PHH-Power", "mtk power hint");
+ int hint = 25; //MTKPOWER_HINT_APP_TOUCH
+ if("rotate".equals(SystemProperties.get("persist.sys.phh.touch_hint")))
+ hint = 24; // MTKPOWER_HINT_APP_ROTATE
+ mMtkPerf.perfCusLockHint(hint, 1000);
+ } catch(Throwable t) {
+ android.util.Log.d("PHH-Power", "Failed sending touch power hint", t);
+ }
+ }
+ if(mOldMtkPerf != null) {
+ try {
+ android.util.Log.d("PHH-Power", "mtk1 power hint");
+ int hint = 36; // MTKPOWER_HINT_APP_TOUCH
+ if("rotate".equals(SystemProperties.get("persist.sys.phh.touch_hint")))
+ hint = 35; // MTKPOWER_HINT_APP_ROTATE
+ mOldMtkPerf.mtkPowerHint(hint, 1000);
+ } catch(Throwable t) {
+ android.util.Log.d("PHH-Power", "Failed sending touch power hint", t);
+ }
+ }
}
@Override
--
2.34.1

View File

@ -0,0 +1,48 @@
From a0186f96b11f3ce778e6edb42dde69f1ee373dd9 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 5 Jul 2023 10:50:36 -0400
Subject: [PATCH 38/40] Detect Moto dynamic hardware feature
Moto added a custom node in sysconfig XMLs:
<unavailable-feature-conditional />
This node reads a property and enables a feature based on it.
Take those into account to enable NFC on Moto devices which have
NFC-less variants
---
.../java/com/android/server/SystemConfig.java | 19 +++++++++++++++++++
1 file changed, 19 insertions(+)
diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java
index 00b01051adae..ffcc75e63d66 100644
--- a/core/java/com/android/server/SystemConfig.java
+++ b/core/java/com/android/server/SystemConfig.java
@@ -979,6 +979,25 @@ public class SystemConfig {
}
XmlUtils.skipCurrentTag(parser);
} break;
+ case "unavailable-feature-conditional": {
+ if (allowFeatures) {
+ String fname = parser.getAttributeValue(null, "name");
+ String prop = parser.getAttributeValue(null, "prop");
+ if (fname == null || prop == null) {
+ Slog.w(TAG, "<" + name + "> without name in " + permFile
+ + " at " + parser.getPositionDescription());
+ } else {
+ if(android.os.SystemProperties.getBoolean(prop, false)) {
+ addFeature(fname, 0);
+ } else {
+ mUnavailableFeatures.add(fname);
+ }
+ }
+ } else {
+ logNotAllowedInPartition(name, permFile, parser);
+ }
+ XmlUtils.skipCurrentTag(parser);
+ } break;
case "allow-in-power-save-except-idle": {
if (allowOverrideAppRestrictions) {
String pkgname = parser.getAttributeValue(null, "package");
--
2.34.1

View File

@ -0,0 +1,211 @@
From 8fe0669d57555ce564caa476bd0278bb208c2d94 Mon Sep 17 00:00:00 2001
From: jgudec <jakov.gudec@gmail.com>
Date: Fri, 18 Aug 2023 08:41:49 +0100
Subject: [PATCH 39/40] Add initial Xiaomi FOD implementation for recent Xiaomi
devices
Huge thanks to phhusson for the help and guidance.
Change-Id: I123556a7d6c48e9ace36281336991ed231cf62a5
---
packages/SystemUI/Android.bp | 2 +
.../android/systemui/biometrics/UdfpsView.kt | 43 +++++++++++++++++
services/core/Android.bp | 1 +
.../server/biometrics/AuthService.java | 46 +++++++++++++++++++
4 files changed, 92 insertions(+)
diff --git a/packages/SystemUI/Android.bp b/packages/SystemUI/Android.bp
index 0637dd4b4471..f41b178f55b1 100644
--- a/packages/SystemUI/Android.bp
+++ b/packages/SystemUI/Android.bp
@@ -179,6 +179,8 @@ android_library {
"motion_tool_lib",
"vendor.lineage.powershare-V1.0-java",
"vendor.goodix.hardware.biometrics.fingerprint-V2.1-java",
+ "vendor.xiaomi.hw.touchfeature-V1.0-java",
+ "vendor.xiaomi.hardware.fingerprintextension-V1.0-java"
],
manifest: "AndroidManifest.xml",
additional_manifests: ["LineageManifest.xml"],
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt
index 6cc9ab3da570..8ab00fc34f0d 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt
@@ -37,6 +37,12 @@ import java.io.File
import vendor.goodix.hardware.biometrics.fingerprint.V2_1.IGoodixFingerprintDaemon
+import vendor.xiaomi.hw.touchfeature.V1_0.ITouchFeature
+import vendor.xiaomi.hardware.fingerprintextension.V1_0.IXiaomiFingerprint
+
+import android.os.Handler
+import android.os.HandlerThread
+
private const val TAG = "UdfpsView"
@@ -220,6 +226,12 @@ Log.d("PHH", "Surface destroyed!")
val hasSamsungMask = File(samsungActualMaskBrightness).exists()
var fodFileObserver: FileObserver? = null
+ val xiaomiDispParam = "/sys/class/mi_display/disp-DSI-0/disp_param"
+ var hasXiaomiLhbm = File(xiaomiDispParam).exists()
+
+ private val handlerThread = HandlerThread("UDFPS").also { it.start() }
+ val myHandler = Handler(handlerThread.looper)
+
fun configureDisplay(onDisplayConfigured: Runnable) {
isDisplayConfigured = true
animationViewController?.onDisplayConfiguring()
@@ -255,6 +267,34 @@ Log.d("PHH", "Surface destroyed!")
if(android.os.SystemProperties.get("ro.vendor.build.fingerprint").contains("ASUS")) {
goodixCmd(200001)
}
+
+ if(hasXiaomiLhbm){
+ Log.d("PHH-Enroll", "Xiaomi scenario in UdfpsView reached!")
+ mySurfaceView.setVisibility(INVISIBLE)
+
+ IXiaomiFingerprint.getService().extCmd(android.os.SystemProperties.getInt("persist.phh.xiaomi.fod.enrollment.id", 4), 1);
+ var res = ITouchFeature.getService().setTouchMode(0, 10, 1);
+ if(res != 0){
+ Log.d("PHH-Enroll", "SetTouchMode 10,1 was NOT executed successfully. Res is " + res)
+ }
+
+ myHandler.postDelayed({
+ var ret200 = ITouchFeature.getService().setTouchMode(0, 10, 1);
+
+ if(ret200 != 0){
+ Log.d("PHH-Enroll", "myHandler.postDelayed 200ms -SetTouchMode was NOT executed successfully. Ret is " + ret200)
+ }
+
+ myHandler.postDelayed({
+ Log.d("PHH-Enroll", "myHandler.postDelayed 600ms - line prior to setTouchMode 10,0")
+ var ret600 = ITouchFeature.getService().setTouchMode(0, 10, 0);
+
+ if(ret600 != 0){
+ Log.d("PHH-Enroll", "myHandler.postDelayed 600ms -SetTouchMode 10,0 was NOT executed successfully. Ret is " + ret600)
+ }
+ }, 600)
+ }, 200)
+ }
}
fun unconfigureDisplay() {
@@ -296,6 +336,9 @@ Log.d("PHH", "Surface destroyed!")
}
};
fodFileObserver?.startWatching();
+ } else if(hasXiaomiLhbm) {
+ IXiaomiFingerprint.getService().extCmd(android.os.SystemProperties.getInt("persist.phh.xiaomi.fod.enrollment.id", 4), 0);
+ ITouchFeature.getService().setTouchMode(0, 10, 0);
} else {
dimUpdate(0.0f)
}
diff --git a/services/core/Android.bp b/services/core/Android.bp
index 8514ad55da09..58458734053b 100644
--- a/services/core/Android.bp
+++ b/services/core/Android.bp
@@ -181,6 +181,7 @@ java_library_static {
"vendor.samsung.hardware.biometrics.fingerprint-V3.0-java",
"vendor.oplus.hardware.biometrics.fingerprint-V2.1-java",
"vendor.oppo.hardware.biometrics.fingerprint-V2.1-java",
+ "vendor.xiaomi.hardware.fingerprintextension-V1.0-java",
],
javac_shard_size: 50,
}
diff --git a/services/core/java/com/android/server/biometrics/AuthService.java b/services/core/java/com/android/server/biometrics/AuthService.java
index 7d6f9a12057f..22827ecdaf89 100644
--- a/services/core/java/com/android/server/biometrics/AuthService.java
+++ b/services/core/java/com/android/server/biometrics/AuthService.java
@@ -66,6 +66,7 @@ import android.os.ServiceManager;
import android.os.SystemProperties;
import android.os.UserHandle;
import android.provider.Settings;
+import android.text.TextUtils;
import android.util.Slog;
import com.android.internal.R;
@@ -93,6 +94,7 @@ import vendor.samsung.hardware.biometrics.fingerprint.V3_0.ISehBiometricsFingerp
import vendor.goodix.hardware.biometrics.fingerprint.V2_1.IGoodixFingerprintDaemon;
import vendor.samsung.hardware.sysinput.V1_0.ISehSysInputDev;
+import vendor.xiaomi.hardware.fingerprintextension.V1_0.IXiaomiFingerprint;
/**
* System service that provides an interface for authenticating with biometrics and
* PIN/pattern/password to BiometricPrompt and lock screen.
@@ -114,6 +116,7 @@ public class AuthService extends SystemService {
private FileObserver fodFileObserver = null;
private ISehBiometricsFingerprint mSamsungFingerprint = null;
+ private IXiaomiFingerprint mXiaomiFingerprint = null;
/**
* Class for injecting dependencies into AuthService.
* TODO(b/141025588): Replace with a dependency injection framework (e.g. Guice, Dagger).
@@ -677,6 +680,12 @@ public class AuthService extends SystemService {
} catch(Exception e) {
android.util.Log.e("PHH", "Failed getting Samsung fingerprint HAL", e);
}
+ try {
+ mXiaomiFingerprint = IXiaomiFingerprint.getService();
+ android.util.Log.e("PHH", "Got xiaomi fingerprint HAL");
+ } catch(Exception e) {
+ android.util.Log.e("PHH", "Failed getting xiaomi fingerprint HAL", e);
+ }
if(samsungHasCmd("fod_enable") && mSamsungFingerprint != null) {
samsungCmd("fod_enable,1,1,0");
String actualMaskBrightnessPath = "/sys/class/lcd/panel/actual_mask_brightness";
@@ -737,6 +746,31 @@ public class AuthService extends SystemService {
fodFileObserver.startWatching();
}
+ String xiaomiFodPressedStatusPath = "/sys/class/touch/touch_dev/fod_press_status";
+ if(new File(xiaomiFodPressedStatusPath).exists() && mXiaomiFingerprint != null) {
+ fodFileObserver = new FileObserver(xiaomiFodPressedStatusPath, FileObserver.MODIFY) {
+ @Override
+ public void onEvent(int event, String path) {
+ String isFodPressed = readFile(xiaomiFodPressedStatusPath);
+ Slog.d("PHH-Enroll", "Fod pressed status: " + isFodPressed);
+ Slog.d("PHH-Enroll", "Within xiaomi scenario for FOD");
+
+ try {
+ if("0".equals(isFodPressed)) {
+ Slog.d("PHH-Enroll", "Fod un-pressed!");
+ mXiaomiFingerprint.extCmd(android.os.SystemProperties.getInt("phh.xiaomi.fod.enrollment.id", 4), 0);
+ } else if("1".equals(isFodPressed)) {
+ Slog.d("PHH-Enroll", "Fod pressed!");
+ mXiaomiFingerprint.extCmd(android.os.SystemProperties.getInt("phh.xiaomi.fod.enrollment.id", 4), 1);
+ }
+ } catch(Exception e) {
+ Slog.d("PHH-Enroll", "Failed Xiaomi async extcmd", e);
+ }
+ }
+ };
+ fodFileObserver.startWatching();
+ }
+
}
/**
@@ -938,6 +972,18 @@ public class AuthService extends SystemService {
return udfpsProps;
}
+ if(!TextUtils.isEmpty(android.os.SystemProperties.get("persist.vendor.sys.fp.fod.location.X_Y"))) {
+ int[] udfpsProps = new int[3];
+ String[] coordinates = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.location.X_Y").split(",");
+ udfpsProps[0] = displayRealSize.x/2;
+ udfpsProps[1] = Integer.parseInt(coordinates[1]) + 100;
+
+ String[] widthHeight = android.os.SystemProperties.get("persist.vendor.sys.fp.fod.size.width_height").split(",");
+
+ udfpsProps[2] = (Integer.parseInt(widthHeight[0]) /2);
+ return udfpsProps;
+ }
+
return new int[0];
}
--
2.34.1

View File

@ -0,0 +1,67 @@
From 3bb8617db39e8249dde5d7fc01d07e375f9fba57 Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Sun, 15 Oct 2023 11:21:58 +0800
Subject: [PATCH 40/40] SystemUI: Add MTK's brightness path for FOD
Rewrote the part for easier extension
Change-Id: Ifec88c625210301b5d1146bba0275cd9699243e8
---
.../android/systemui/biometrics/UdfpsView.kt | 30 ++++++++++++++-----
1 file changed, 22 insertions(+), 8 deletions(-)
diff --git a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt
index 8ab00fc34f0d..e43650d9d3f9 100644
--- a/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt
+++ b/packages/SystemUI/src/com/android/systemui/biometrics/UdfpsView.kt
@@ -34,6 +34,7 @@ import android.widget.FrameLayout
import com.android.systemui.R
import com.android.systemui.doze.DozeReceiver
import java.io.File
+import java.io.FileNotFoundException
import vendor.goodix.hardware.biometrics.fingerprint.V2_1.IGoodixFingerprintDaemon
@@ -240,18 +241,31 @@ Log.d("PHH", "Surface destroyed!")
mySurfaceView.setVisibility(VISIBLE)
Log.d("PHH", "setting surface visible!")
- val brightnessFile = File("/sys/class/backlight/panel/brightness")
- val maxBrightnessFile = File("/sys/class/backlight/panel/max_brightness")
+ val brightnessFiles = listOf(
+ File("/sys/class/backlight/panel/brightness"),
+ File("/sys/class/backlight/panel0-backlight/brightness"),
+ File("/sys/devices/platform/soc/soc:mtk_leds/leds/lcd-backlight/brightness")
+ )
+ val maxBrightnessFiles = listOf(
+ File("/sys/class/backlight/panel/max_brightness"),
+ File("/sys/class/backlight/panel0-backlight/max_brightness"),
+ File("/sys/devices/platform/soc/soc:mtk_leds/leds/lcd-backlight/max_brightness")
+ )
var brightness: Double = 0.0
var maxBrightness: Double = 0.0
+ var bmFilesExist: Boolean = false
- if (brightnessFile.exists() && maxBrightnessFile.exists()) {
- brightness = brightnessFile.readText().toDouble()
- maxBrightness = maxBrightnessFile.readText().toDouble()
- } else {
- brightness = File("/sys/class/backlight/panel0-backlight/brightness").readText().toDouble()
- maxBrightness = File("/sys/class/backlight/panel0-backlight/max_brightness").readText().toDouble()
+ brightnessFiles.zip(maxBrightnessFiles) {bFile, mFile ->
+ if (bFile.exists() && mFile.exists()) {
+ bmFilesExist = true
+ brightness = bFile.readText().toDouble()
+ maxBrightness = mFile.readText().toDouble()
+ }
+ }
+
+ if (!bmFilesExist) {
+ throw FileNotFoundException("No brightness files under expected paths")
}
// Assume HBM is max brightness
--
2.34.1

View File

@ -0,0 +1,35 @@
From c27f6299504342badced594ae52d0f77eda447eb Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 14 Aug 2019 23:37:10 +0200
Subject: [PATCH 01/10] On Samsung, we need to send a hack-message to HAL to
get all Sensors
Change-Id: Id6a1fa48340de61c418493668e9abd22c2599376
---
services/sensorservice/SensorDevice.cpp | 3 +++
1 file changed, 3 insertions(+)
diff --git a/services/sensorservice/SensorDevice.cpp b/services/sensorservice/SensorDevice.cpp
index de050e02d0..3daeece62b 100644
--- a/services/sensorservice/SensorDevice.cpp
+++ b/services/sensorservice/SensorDevice.cpp
@@ -38,6 +38,7 @@
#include <cstddef>
#include <thread>
+#include <android-base/properties.h>
using namespace android::hardware::sensors;
using android::hardware::Return;
using android::util::ProtoOutputStream;
@@ -77,6 +78,8 @@ SensorDevice::SensorDevice() {
}
void SensorDevice::initializeSensorList() {
+ if(::android::base::GetBoolProperty("persist.sys.phh.samsung_sensors", false))
+ setMode(5555);
if (mHalWrapper == nullptr) {
return;
}
--
2.34.1

View File

@ -0,0 +1,37 @@
From ca1a996ac9076302682afe4138ccf907675c664e Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 31 Mar 2021 23:36:03 +0200
Subject: [PATCH 04/10] Remove Samsung system permission on sensors
---
libs/sensor/Sensor.cpp | 1 +
libs/sensor/include/sensor/Sensor.h | 1 +
2 files changed, 2 insertions(+)
diff --git a/libs/sensor/Sensor.cpp b/libs/sensor/Sensor.cpp
index b865c4d5d6..56dc219f33 100644
--- a/libs/sensor/Sensor.cpp
+++ b/libs/sensor/Sensor.cpp
@@ -433,6 +433,7 @@ const String8& Sensor::getStringType() const {
}
const String8& Sensor::getRequiredPermission() const {
+ if (mRequiredPermission == "com.samsung.permission.SSENSOR") return mFakeRequiredPermission;
return mRequiredPermission;
}
diff --git a/libs/sensor/include/sensor/Sensor.h b/libs/sensor/include/sensor/Sensor.h
index bae8a1380b..afaafb321e 100644
--- a/libs/sensor/include/sensor/Sensor.h
+++ b/libs/sensor/include/sensor/Sensor.h
@@ -125,6 +125,7 @@ private:
uint32_t mFifoMaxEventCount;
String8 mStringType;
String8 mRequiredPermission;
+ String8 mFakeRequiredPermission;
bool mRequiredPermissionRuntime = false;
int32_t mRequiredAppOp;
int32_t mMaxDelay;
--
2.34.1

View File

@ -0,0 +1,301 @@
From 4eca6bb36b071de20f2defe141ff7a880596114c Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 27 Dec 2021 18:00:43 -0500
Subject: [PATCH 06/10] powermanager: Add support Samsung miscpower HAL
Several various configurations need to be supported:
- Android Pie vendors have a android.hardware.power HIDL default + "miscpower"
- Android Q vendors have default HIDL android.hardware.power +
ISehMiscPower
- Android R vendors have default AIDL android.hardware.power +
ISehMiscPower
ISehMiscPower is always in addition to android.hardware.power, not as a
substituion
Only tested configuration ATM is the latest one
Change-Id: I182a91ccb0a89f9d0d7d41f36eccab218b553bbc
---
include/powermanager/PowerHalLoader.h | 5 ++
include/powermanager/PowerHalWrapper.h | 36 +++++++++-
services/powermanager/Android.bp | 1 +
services/powermanager/PowerHalController.cpp | 7 +-
services/powermanager/PowerHalLoader.cpp | 17 ++++-
services/powermanager/PowerHalWrapper.cpp | 70 ++++++++++++++++++++
6 files changed, 133 insertions(+), 3 deletions(-)
diff --git a/include/powermanager/PowerHalLoader.h b/include/powermanager/PowerHalLoader.h
index ed6f6f35f5..cf1d76e3d1 100644
--- a/include/powermanager/PowerHalLoader.h
+++ b/include/powermanager/PowerHalLoader.h
@@ -20,6 +20,8 @@
#include <android-base/thread_annotations.h>
#include <android/hardware/power/1.1/IPower.h>
#include <android/hardware/power/IPower.h>
+#include <vendor/samsung/hardware/miscpower/2.0/ISehMiscPower.h>
+
namespace android {
@@ -32,12 +34,15 @@ public:
static sp<hardware::power::IPower> loadAidl();
static sp<hardware::power::V1_0::IPower> loadHidlV1_0();
static sp<hardware::power::V1_1::IPower> loadHidlV1_1();
+ static sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> loadHidlSeh();
private:
static std::mutex gHalMutex;
static sp<hardware::power::IPower> gHalAidl GUARDED_BY(gHalMutex);
static sp<hardware::power::V1_0::IPower> gHalHidlV1_0 GUARDED_BY(gHalMutex);
static sp<hardware::power::V1_1::IPower> gHalHidlV1_1 GUARDED_BY(gHalMutex);
+ static sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> gHalHidlSeh GUARDED_BY(gHalMutex);
+
static sp<hardware::power::V1_0::IPower> loadHidlV1_0Locked()
EXCLUSIVE_LOCKS_REQUIRED(gHalMutex);
diff --git a/include/powermanager/PowerHalWrapper.h b/include/powermanager/PowerHalWrapper.h
index dfb0ff59a0..9ad805dfcd 100644
--- a/include/powermanager/PowerHalWrapper.h
+++ b/include/powermanager/PowerHalWrapper.h
@@ -23,6 +23,8 @@
#include <android/hardware/power/IPower.h>
#include <android/hardware/power/IPowerHintSession.h>
#include <android/hardware/power/Mode.h>
+#include <vendor/samsung/hardware/miscpower/2.0/ISehMiscPower.h>
+
namespace android {
@@ -181,7 +183,10 @@ private:
// Wrapper for the AIDL Power HAL.
class AidlHalWrapper : public HalWrapper {
public:
- explicit AidlHalWrapper(sp<hardware::power::IPower> handle) : mHandle(std::move(handle)) {}
+ explicit AidlHalWrapper(sp<hardware::power::IPower> handle,
+ sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> sehHandle)
+ : mHandle(std::move(handle)),
+ mHandleSeh(std::move(sehHandle)) {}
virtual ~AidlHalWrapper() = default;
virtual HalResult<void> setBoost(hardware::power::Boost boost, int32_t durationMs) override;
@@ -196,6 +201,7 @@ private:
std::mutex mBoostMutex;
std::mutex mModeMutex;
sp<hardware::power::IPower> mHandle;
+ sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> mHandleSeh;
// Android framework only sends boost upto DISPLAY_UPDATE_IMMINENT.
// Need to increase the array size if more boost supported.
std::array<std::atomic<HalSupport>,
@@ -206,6 +212,34 @@ private:
mModeSupportedArray GUARDED_BY(mModeMutex) = {HalSupport::UNKNOWN};
};
+class HidlHalWrapperSeh : public HalWrapper {
+public:
+ explicit HidlHalWrapperSeh(sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> hal1,
+ sp<android::hardware::power::V1_1::IPower> hal2,
+ sp<android::hardware::power::V1_0::IPower> hal3)
+ : mHandleSeh(std::move(hal1)),
+ mHandle11(std::move(hal2)),
+ mHandle10(std::move(hal3)) {}
+ virtual ~HidlHalWrapperSeh() = default;
+
+ virtual HalResult<void> setBoost(hardware::power::Boost boost, int32_t durationMs) override;
+ virtual HalResult<void> setMode(hardware::power::Mode mode, bool enabled) override;
+ virtual HalResult<sp<hardware::power::IPowerHintSession>> createHintSession(
+ int32_t tgid, int32_t uid, const std::vector<int32_t>& threadIds,
+ int64_t durationNanos) override;
+ virtual HalResult<int64_t> getHintSessionPreferredRate() override;
+
+protected:
+ virtual HalResult<void> sendPowerHint(hardware::power::V1_0::PowerHint hintId, uint32_t data);
+
+private:
+ sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> mHandleSeh;
+ sp<android::hardware::power::V1_1::IPower> mHandle11;
+ sp<android::hardware::power::V1_0::IPower> mHandle10;
+ HalResult<void> setInteractive(bool enabled);
+ HalResult<void> setFeature(hardware::power::V1_0::Feature feature, bool enabled);
+};
+
}; // namespace power
}; // namespace android
diff --git a/services/powermanager/Android.bp b/services/powermanager/Android.bp
index 6fbba3f568..08280dd20f 100644
--- a/services/powermanager/Android.bp
+++ b/services/powermanager/Android.bp
@@ -39,6 +39,7 @@ cc_library_shared {
"android.hardware.power@1.0",
"android.hardware.power@1.1",
"android.hardware.power-V3-cpp",
+ "vendor.samsung.hardware.miscpower@2.0",
],
cflags: [
diff --git a/services/powermanager/PowerHalController.cpp b/services/powermanager/PowerHalController.cpp
index 8c225d5d02..f67fbae08b 100644
--- a/services/powermanager/PowerHalController.cpp
+++ b/services/powermanager/PowerHalController.cpp
@@ -20,6 +20,7 @@
#include <android/hardware/power/IPower.h>
#include <android/hardware/power/IPowerHintSession.h>
#include <android/hardware/power/Mode.h>
+#include <vendor/samsung/hardware/miscpower/2.0/ISehMiscPower.h>
#include <powermanager/PowerHalController.h>
#include <powermanager/PowerHalLoader.h>
#include <utils/Log.h>
@@ -34,11 +35,15 @@ namespace power {
std::unique_ptr<HalWrapper> HalConnector::connect() {
sp<IPower> halAidl = PowerHalLoader::loadAidl();
+ sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> halHidlSeh = PowerHalLoader::loadHidlSeh();
if (halAidl) {
- return std::make_unique<AidlHalWrapper>(halAidl);
+ return std::make_unique<AidlHalWrapper>(halAidl, halHidlSeh);
}
sp<V1_0::IPower> halHidlV1_0 = PowerHalLoader::loadHidlV1_0();
sp<V1_1::IPower> halHidlV1_1 = PowerHalLoader::loadHidlV1_1();
+ if (halHidlSeh) {
+ return std::make_unique<HidlHalWrapperSeh>(halHidlSeh, halHidlV1_1, halHidlV1_0);
+ }
if (halHidlV1_1) {
return std::make_unique<HidlHalWrapperV1_1>(halHidlV1_0, halHidlV1_1);
}
diff --git a/services/powermanager/PowerHalLoader.cpp b/services/powermanager/PowerHalLoader.cpp
index 1f1b43a607..9b20e67f7a 100644
--- a/services/powermanager/PowerHalLoader.cpp
+++ b/services/powermanager/PowerHalLoader.cpp
@@ -18,6 +18,7 @@
#include <android/hardware/power/1.1/IPower.h>
#include <android/hardware/power/IPower.h>
+#include <vendor/samsung/hardware/miscpower/2.0/ISehMiscPower.h>
#include <binder/IServiceManager.h>
#include <hardware/power.h>
#include <hardware_legacy/power.h>
@@ -55,6 +56,8 @@ std::mutex PowerHalLoader::gHalMutex;
sp<IPower> PowerHalLoader::gHalAidl = nullptr;
sp<V1_0::IPower> PowerHalLoader::gHalHidlV1_0 = nullptr;
sp<V1_1::IPower> PowerHalLoader::gHalHidlV1_1 = nullptr;
+sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> PowerHalLoader::gHalHidlSeh = nullptr;
+
void PowerHalLoader::unloadAll() {
std::lock_guard<std::mutex> lock(gHalMutex);
@@ -82,10 +85,22 @@ sp<V1_1::IPower> PowerHalLoader::loadHidlV1_1() {
return loadHal<V1_1::IPower>(gHalExists, gHalHidlV1_1, loadFn, "HIDL v1.1");
}
+sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> PowerHalLoader::loadHidlSeh() {
+ std::lock_guard<std::mutex> lock(gHalMutex);
+ static bool gHalExists = true;
+ static auto loadFn = []() { return vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower::getService(); };
+ return loadHal<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower>(gHalExists, gHalHidlSeh, loadFn, "HIDL SEH v1.1");
+}
+
sp<V1_0::IPower> PowerHalLoader::loadHidlV1_0Locked() {
static bool gHalExists = true;
+ static auto loadFnSec = []() { return V1_0::IPower::getService("power"); };
+ auto hal = loadHal<V1_0::IPower>(gHalExists, gHalHidlV1_0, loadFnSec, "HIDL v1.0");
+
static auto loadFn = []() { return V1_0::IPower::getService(); };
- return loadHal<V1_0::IPower>(gHalExists, gHalHidlV1_0, loadFn, "HIDL v1.0");
+ if(hal == nullptr)
+ hal = loadHal<V1_0::IPower>(gHalExists, gHalHidlV1_0, loadFn, "HIDL v1.0");
+ return hal;
}
// -------------------------------------------------------------------------------------------------
diff --git a/services/powermanager/PowerHalWrapper.cpp b/services/powermanager/PowerHalWrapper.cpp
index d74bd23a8d..a83990f2a4 100644
--- a/services/powermanager/PowerHalWrapper.cpp
+++ b/services/powermanager/PowerHalWrapper.cpp
@@ -209,6 +209,10 @@ HalResult<void> AidlHalWrapper::setMode(Mode mode, bool enabled) {
std::unique_lock<std::mutex> lock(mModeMutex);
size_t idx = static_cast<size_t>(mode);
+ if (mHandleSeh != nullptr && mode == Mode::INTERACTIVE) {
+ mHandleSeh->setInteractiveAsync(enabled, false);
+ }
+
// Quick return if mode is not supported by HAL
if (idx >= mModeSupportedArray.size() || mModeSupportedArray[idx] == HalSupport::OFF) {
ALOGV("Skipped setMode %s because Power HAL doesn't support it", toString(mode).c_str());
@@ -248,6 +252,72 @@ HalResult<int64_t> AidlHalWrapper::getHintSessionPreferredRate() {
return HalResult<int64_t>::fromStatus(result, rate);
}
+HalResult<void> HidlHalWrapperSeh::setBoost(Boost boost, int32_t durationMs) {
+ if (boost == Boost::INTERACTION) {
+ return sendPowerHint(V1_0::PowerHint::INTERACTION, durationMs);
+ } else {
+ ALOGV("Skipped setBoost %s because Power HAL AIDL not available", toString(boost).c_str());
+ return HalResult<void>::unsupported();
+ }
+}
+
+HalResult<void> HidlHalWrapperSeh::setMode(Mode mode, bool enabled) {
+ uint32_t data = enabled ? 1 : 0;
+ switch (mode) {
+ case Mode::LAUNCH:
+ return sendPowerHint(V1_0::PowerHint::LAUNCH, data);
+ case Mode::LOW_POWER:
+ return sendPowerHint(V1_0::PowerHint::LOW_POWER, data);
+ case Mode::SUSTAINED_PERFORMANCE:
+ return sendPowerHint(V1_0::PowerHint::SUSTAINED_PERFORMANCE, data);
+ case Mode::VR:
+ return sendPowerHint(V1_0::PowerHint::VR_MODE, data);
+ case Mode::INTERACTIVE:
+ return setInteractive(enabled);
+ case Mode::DOUBLE_TAP_TO_WAKE:
+ return setFeature(V1_0::Feature::POWER_FEATURE_DOUBLE_TAP_TO_WAKE, enabled);
+ default:
+ ALOGV("Skipped setMode %s because Power HAL AIDL not available",
+ toString(mode).c_str());
+ return HalResult<void>::unsupported();
+ }
+}
+
+HalResult<void> HidlHalWrapperSeh::sendPowerHint(V1_0::PowerHint hintId, uint32_t data) {
+ if(mHandle11 != nullptr) {
+ auto ret = mHandle11->powerHintAsync(hintId, data);
+ return HalResult<void>::fromReturn(ret);
+ } else {
+ auto ret = mHandle10->powerHint(hintId, data);
+ return HalResult<void>::fromReturn(ret);
+ }
+}
+
+HalResult<void> HidlHalWrapperSeh::setInteractive(bool enabled) {
+ if(mHandleSeh != nullptr) {
+ mHandleSeh->setInteractiveAsync(enabled, false);
+ }
+ auto ret = mHandle10->setInteractive(enabled);
+ return HalResult<void>::fromReturn(ret);
+}
+
+HalResult<void> HidlHalWrapperSeh::setFeature(V1_0::Feature feature, bool enabled) {
+ auto ret = mHandle10->setFeature(feature, enabled);
+ return HalResult<void>::fromReturn(ret);
+}
+
+HalResult<sp<Aidl::IPowerHintSession>> HidlHalWrapperSeh::createHintSession(
+ int32_t, int32_t, const std::vector<int32_t>& threadIds, int64_t) {
+ ALOGV("Skipped createHintSession(task num=%zu) because Power HAL not available",
+ threadIds.size());
+ return HalResult<sp<Aidl::IPowerHintSession>>::unsupported();
+}
+
+HalResult<int64_t> HidlHalWrapperSeh::getHintSessionPreferredRate() {
+ ALOGV("Skipped getHintSessionPreferredRate because Power HAL not available");
+ return HalResult<int64_t>::unsupported();
+}
+
// -------------------------------------------------------------------------------------------------
} // namespace power
--
2.34.1

View File

@ -0,0 +1,31 @@
From 430e53f071a6cbb8d1b2d700b081f5fbedf543ff Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Wed, 12 Jan 2022 04:07:34 -0500
Subject: [PATCH 07/10] Fix loading power hidl v1.0
Change-Id: Ife20a98d2a11c79c7b42f359f30c28e2dede1f25
---
services/powermanager/PowerHalLoader.cpp | 5 +++--
1 file changed, 3 insertions(+), 2 deletions(-)
diff --git a/services/powermanager/PowerHalLoader.cpp b/services/powermanager/PowerHalLoader.cpp
index 9b20e67f7a..cd7f2312e2 100644
--- a/services/powermanager/PowerHalLoader.cpp
+++ b/services/powermanager/PowerHalLoader.cpp
@@ -93,10 +93,11 @@ sp<vendor::samsung::hardware::miscpower::V2_0::ISehMiscPower> PowerHalLoader::lo
}
sp<V1_0::IPower> PowerHalLoader::loadHidlV1_0Locked() {
- static bool gHalExists = true;
+ static bool gSecHalExists = true;
static auto loadFnSec = []() { return V1_0::IPower::getService("power"); };
- auto hal = loadHal<V1_0::IPower>(gHalExists, gHalHidlV1_0, loadFnSec, "HIDL v1.0");
+ auto hal = loadHal<V1_0::IPower>(gSecHalExists, gHalHidlV1_0, loadFnSec, "HIDL v1.0");
+ static bool gHalExists = true;
static auto loadFn = []() { return V1_0::IPower::getService(); };
if(hal == nullptr)
hal = loadHal<V1_0::IPower>(gHalExists, gHalHidlV1_0, loadFn, "HIDL v1.0");
--
2.34.1

View File

@ -0,0 +1,30 @@
From b6a029560d93ce3e5535ab97e3cfbc7d1ca0f02c Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Fri, 25 Mar 2022 05:37:56 -0400
Subject: [PATCH 08/10] MIUI13 devices hide their vibrator HAL behind
non-default name: "vibratorfeature"
---
services/vibratorservice/VibratorHalController.cpp | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/services/vibratorservice/VibratorHalController.cpp b/services/vibratorservice/VibratorHalController.cpp
index c1795f5c32..345016efd6 100644
--- a/services/vibratorservice/VibratorHalController.cpp
+++ b/services/vibratorservice/VibratorHalController.cpp
@@ -59,6 +59,12 @@ std::shared_ptr<HalWrapper> connectHal(std::shared_ptr<CallbackScheduler> schedu
return std::make_shared<AidlHalWrapper>(std::move(scheduler), aidlHal);
}
+ aidlHal = waitForVintfService<Aidl::IVibrator>(String16("vibratorfeature"));
+ if (aidlHal) {
+ ALOGV("Successfully connected to Xiaomi Vibrator HAL AIDL service.");
+ return std::make_shared<AidlHalWrapper>(std::move(scheduler), aidlHal);
+ }
+
sp<V1_0::IVibrator> halV1_0 = V1_0::IVibrator::getService();
if (halV1_0 == nullptr) {
ALOGV("Vibrator HAL service not available.");
--
2.34.1

View File

@ -0,0 +1,282 @@
From 1093dcac13fc8c18e24e8b6394dc2beee6b5d309 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sun, 18 Dec 2022 18:17:30 -0500
Subject: [PATCH 09/10] FOD support for Samsung and Asus
---
libs/gui/BLASTBufferQueue.cpp | 20 ++++++++++++++--
libs/ui/Gralloc2.cpp | 1 -
libs/ui/Gralloc3.cpp | 1 -
libs/ui/Gralloc4.cpp | 1 -
services/surfaceflinger/BufferQueueLayer.cpp | 1 +
.../CompositionEngine/src/OutputLayer.cpp | 24 +++++++++++++++++++
.../DisplayHardware/AidlComposerHal.cpp | 7 ++++++
.../DisplayHardware/AidlComposerHal.h | 2 ++
.../DisplayHardware/ComposerHal.h | 3 +++
.../surfaceflinger/DisplayHardware/HWC2.cpp | 8 +++++++
.../surfaceflinger/DisplayHardware/HWC2.h | 5 ++++
.../DisplayHardware/HidlComposerHal.cpp | 7 ++++++
.../DisplayHardware/HidlComposerHal.h | 2 ++
13 files changed, 77 insertions(+), 5 deletions(-)
diff --git a/libs/gui/BLASTBufferQueue.cpp b/libs/gui/BLASTBufferQueue.cpp
index b8ea0808ab..f6b6752b01 100644
--- a/libs/gui/BLASTBufferQueue.cpp
+++ b/libs/gui/BLASTBufferQueue.cpp
@@ -33,11 +33,20 @@
#include <utils/Trace.h>
#include <private/gui/ComposerService.h>
+#include <cutils/properties.h>
#include <chrono>
using namespace std::chrono_literals;
+static bool sCheckedProps = false;
+static bool sSamsungFod = false;
+static void init_fod_props() {
+ if(sCheckedProps) return;
+ sCheckedProps = true;
+ sSamsungFod = property_get_bool("persist.sys.phh.fod.samsung", false);
+}
+
namespace {
inline const char* boolToString(bool b) {
return b ? "true" : "false";
@@ -147,9 +156,16 @@ BLASTBufferQueue::BLASTBufferQueue(const std::string& name, bool updateDestinati
// safe default, most producers are expected to override this
mProducer->setMaxDequeuedBufferCount(2);
+ uint64_t usage = GraphicBuffer::USAGE_HW_COMPOSER |
+ GraphicBuffer::USAGE_HW_TEXTURE;
+
+ init_fod_props();
+ if(sSamsungFod && name.find("SurfaceView[UdfpsControllerOverlay]") != std::string::npos) {
+ usage |= 0x400000000LL;
+ }
+
mBufferItemConsumer = new BLASTBufferItemConsumer(mConsumer,
- GraphicBuffer::USAGE_HW_COMPOSER |
- GraphicBuffer::USAGE_HW_TEXTURE,
+ usage,
1, false, this);
static int32_t id = 0;
mName = name + "#" + std::to_string(id);
diff --git a/libs/ui/Gralloc2.cpp b/libs/ui/Gralloc2.cpp
index 4e7fd7ca29..a358f78528 100644
--- a/libs/ui/Gralloc2.cpp
+++ b/libs/ui/Gralloc2.cpp
@@ -115,7 +115,6 @@ status_t Gralloc2Mapper::validateBufferDescriptorInfo(
if (descriptorInfo->usage & ~validUsageBits) {
ALOGE("buffer descriptor contains invalid usage bits 0x%" PRIx64,
descriptorInfo->usage & ~validUsageBits);
- return BAD_VALUE;
}
// Gralloc2 implementations never understand non-BLOB with GPU_DATA_BUFFER
diff --git a/libs/ui/Gralloc3.cpp b/libs/ui/Gralloc3.cpp
index 194cbdf161..661ecc62a2 100644
--- a/libs/ui/Gralloc3.cpp
+++ b/libs/ui/Gralloc3.cpp
@@ -106,7 +106,6 @@ status_t Gralloc3Mapper::validateBufferDescriptorInfo(
if (descriptorInfo->usage & ~validUsageBits) {
ALOGE("buffer descriptor contains invalid usage bits 0x%" PRIx64,
descriptorInfo->usage & ~validUsageBits);
- return BAD_VALUE;
}
// Gralloc3 implementations never understand non-BLOB with GPU_DATA_BUFFER
diff --git a/libs/ui/Gralloc4.cpp b/libs/ui/Gralloc4.cpp
index 63f7d31b05..562e383919 100644
--- a/libs/ui/Gralloc4.cpp
+++ b/libs/ui/Gralloc4.cpp
@@ -127,7 +127,6 @@ static status_t validateBufferDescriptorInfo(IMapper::BufferDescriptorInfo* desc
if (descriptorInfo->usage & ~validUsageBits) {
ALOGE("buffer descriptor contains invalid usage bits 0x%" PRIx64,
descriptorInfo->usage & ~validUsageBits);
- return BAD_VALUE;
}
// Combinations that are only allowed with gralloc 4.1.
diff --git a/services/surfaceflinger/BufferQueueLayer.cpp b/services/surfaceflinger/BufferQueueLayer.cpp
index bee4de32a6..4992b8374d 100644
--- a/services/surfaceflinger/BufferQueueLayer.cpp
+++ b/services/surfaceflinger/BufferQueueLayer.cpp
@@ -472,6 +472,7 @@ status_t BufferQueueLayer::setDefaultBufferProperties(uint32_t w, uint32_t h, Pi
setDefaultBufferSize(w, h);
mConsumer->setDefaultBufferFormat(format);
mConsumer->setConsumerUsageBits(getEffectiveUsage(0));
+ ALOGE("bufferqueuelayer -- name %s", mName.c_str());
return NO_ERROR;
}
diff --git a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
index 1bb9d0eb63..3960808d49 100644
--- a/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
+++ b/services/surfaceflinger/CompositionEngine/src/OutputLayer.cpp
@@ -27,6 +27,7 @@
#include "system/graphics-base-v1.0.h"
#include <ui/DataspaceUtils.h>
+#include <cutils/properties.h>
// TODO(b/129481165): remove the #pragma below and fix conversion issues
#pragma clang diagnostic push
@@ -37,6 +38,9 @@
// TODO(b/129481165): remove the #pragma below and fix conversion issues
#pragma clang diagnostic pop // ignored "-Wconversion"
+static bool sCheckedProps = false;
+static bool sAsusFod = false;
+
using aidl::android::hardware::graphics::composer3::Composition;
namespace android::compositionengine {
@@ -425,6 +429,26 @@ void OutputLayer::writeOutputDependentGeometryStateToHWC(HWC2::Layer* hwcLayer,
->getHeight()));
}
+ if(!sCheckedProps) {
+ sCheckedProps = true;
+ sAsusFod = property_get_bool("persist.sys.phh.fod.asus", false);
+ }
+
+ if (strstr(getLayerFE().getDebugName(), "UdfpsControllerOverlay#") != nullptr) {
+ if (sAsusFod) {
+ if (auto error = hwcLayer->setLayerClass(5); error != hal::Error::NONE) {
+ ALOGE("Failed setting Asus layer class");
+ }
+ }
+ }
+ if (strstr(getLayerFE().getDebugName(), "SurfaceView[UdfpsControllerOverlay](BLAST)#") != nullptr) {
+ if (sAsusFod) {
+ if (auto error = hwcLayer->setLayerClass(4); error != hal::Error::NONE) {
+ ALOGE("Failed setting Asus layer class");
+ }
+ }
+ }
+
ALOGV("Writing display frame [%d, %d, %d, %d]", displayFrame.left, displayFrame.top,
displayFrame.right, displayFrame.bottom);
diff --git a/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp b/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp
index 79dcd159d3..922bd8c364 100644
--- a/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp
+++ b/services/surfaceflinger/DisplayHardware/AidlComposerHal.cpp
@@ -1126,5 +1126,12 @@ Error AidlComposer::getPhysicalDisplayOrientation(Display displayId,
return Error::NONE;
}
+Error AidlComposer::setLayerClass(Display display, Layer layer, uint32_t layerClass) {
+ (void) display;
+ (void) layer;
+ (void) layerClass;
+ return Error::NONE;
+}
+
} // namespace Hwc2
} // namespace android
diff --git a/services/surfaceflinger/DisplayHardware/AidlComposerHal.h b/services/surfaceflinger/DisplayHardware/AidlComposerHal.h
index 18d2242c7e..8ebca826a4 100644
--- a/services/surfaceflinger/DisplayHardware/AidlComposerHal.h
+++ b/services/surfaceflinger/DisplayHardware/AidlComposerHal.h
@@ -227,6 +227,8 @@ public:
Error getPhysicalDisplayOrientation(Display displayId,
AidlTransform* outDisplayOrientation) override;
+ // Proprietary extensions
+ Error setLayerClass(Display display, Layer layer, uint32_t layerClass) override;
private:
// Many public functions above simply write a command into the command
// queue to batch the calls. validateDisplay and presentDisplay will call
diff --git a/services/surfaceflinger/DisplayHardware/ComposerHal.h b/services/surfaceflinger/DisplayHardware/ComposerHal.h
index d266d942fb..b81d01e6d8 100644
--- a/services/surfaceflinger/DisplayHardware/ComposerHal.h
+++ b/services/surfaceflinger/DisplayHardware/ComposerHal.h
@@ -281,6 +281,9 @@ public:
virtual Error setIdleTimerEnabled(Display displayId, std::chrono::milliseconds timeout) = 0;
virtual Error getPhysicalDisplayOrientation(Display displayId,
AidlTransform* outDisplayOrientation) = 0;
+
+ // Proprietary extensions
+ virtual Error setLayerClass(Display display, Layer layer, uint32_t layerClass) = 0;
};
} // namespace Hwc2
diff --git a/services/surfaceflinger/DisplayHardware/HWC2.cpp b/services/surfaceflinger/DisplayHardware/HWC2.cpp
index c52e96d146..82f60516ae 100644
--- a/services/surfaceflinger/DisplayHardware/HWC2.cpp
+++ b/services/surfaceflinger/DisplayHardware/HWC2.cpp
@@ -988,6 +988,14 @@ Error Layer::setBlockingRegion(const Region& region) {
return static_cast<Error>(intError);
}
+Error Layer::setLayerClass(uint32_t layerClass) {
+ if (CC_UNLIKELY(!mDisplay)) {
+ return Error::BAD_DISPLAY;
+ }
+ auto intError = mComposer.setLayerClass(mDisplay->getId(), mId, layerClass);
+ return static_cast<Error>(intError);
+}
+
} // namespace impl
} // namespace HWC2
} // namespace android
diff --git a/services/surfaceflinger/DisplayHardware/HWC2.h b/services/surfaceflinger/DisplayHardware/HWC2.h
index 24aef9b73c..138d14456c 100644
--- a/services/surfaceflinger/DisplayHardware/HWC2.h
+++ b/services/surfaceflinger/DisplayHardware/HWC2.h
@@ -333,6 +333,9 @@ public:
// AIDL HAL
[[nodiscard]] virtual hal::Error setBrightness(float brightness) = 0;
[[nodiscard]] virtual hal::Error setBlockingRegion(const android::Region& region) = 0;
+
+ // Proprietary HAL
+ [[nodiscard]] virtual hal::Error setLayerClass(uint32_t layerClass) = 0;
};
namespace impl {
@@ -382,6 +385,8 @@ public:
hal::Error setBrightness(float brightness) override;
hal::Error setBlockingRegion(const android::Region& region) override;
+ // Proprietary HAL
+ hal::Error setLayerClass(uint32_t layerClass) override;
private:
// These are references to data owned by HWC2::Device, which will outlive
// this HWC2::Layer, so these references are guaranteed to be valid for
diff --git a/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp b/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp
index 2597ae6091..12b36f321e 100644
--- a/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp
+++ b/services/surfaceflinger/DisplayHardware/HidlComposerHal.cpp
@@ -1345,6 +1345,13 @@ Error HidlComposer::getPhysicalDisplayOrientation(Display, AidlTransform*) {
"OptionalFeature::PhysicalDisplayOrientation is not supported on HIDL");
}
+Error HidlComposer::setLayerClass(Display display, Layer layer, uint32_t layerClass) {
+ mWriter.selectDisplay(display);
+ mWriter.selectLayer(layer);
+ mWriter.vendor800_1(layerClass);
+ return Error::NONE;
+}
+
void HidlComposer::registerCallback(ComposerCallback& callback) {
const bool vsyncSwitchingSupported =
isSupported(Hwc2::Composer::OptionalFeature::RefreshRateSwitching);
diff --git a/services/surfaceflinger/DisplayHardware/HidlComposerHal.h b/services/surfaceflinger/DisplayHardware/HidlComposerHal.h
index d0d3c2e6d7..c40986fae9 100644
--- a/services/surfaceflinger/DisplayHardware/HidlComposerHal.h
+++ b/services/surfaceflinger/DisplayHardware/HidlComposerHal.h
@@ -338,6 +338,8 @@ public:
Error getPhysicalDisplayOrientation(Display displayId,
AidlTransform* outDisplayOrientation) override;
+ // Proprietary extensions
+ Error setLayerClass(Display display, Layer layer, uint32_t layerClass) override;
private:
class CommandWriter : public CommandWriterBase {
public:
--
2.34.1

View File

@ -0,0 +1,36 @@
From 85eaba4f3b4e0c85411158807b677f135fd4331f Mon Sep 17 00:00:00 2001
From: Andy CrossGate Yan <GeForce8800Ultra@gmail.com>
Date: Tue, 18 Apr 2023 23:48:15 +0000
Subject: [PATCH 10/10] Fix light sensor crash on Xiaomi 13
SensorService expects a scalar, but Xiaomi HAL returns a pose6DOF vector encapsulation
Thanks @phhusson for the analysis
Change-Id: Ie358321d5328d01541f455d6af86944ff413c9c9
---
services/sensorservice/AidlSensorHalWrapper.cpp | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/services/sensorservice/AidlSensorHalWrapper.cpp b/services/sensorservice/AidlSensorHalWrapper.cpp
index f67c610550..32fd9240b3 100644
--- a/services/sensorservice/AidlSensorHalWrapper.cpp
+++ b/services/sensorservice/AidlSensorHalWrapper.cpp
@@ -171,7 +171,14 @@ void convertToSensorEvent(const Event &src, sensors_event_t *dst) {
case SensorType::MOTION_DETECT:
case SensorType::HEART_BEAT:
case SensorType::LOW_LATENCY_OFFBODY_DETECT: {
- dst->data[0] = src.payload.get<Event::EventPayload::scalar>();
+ if (src.payload.getTag() == Event::EventPayload::pose6DOF) {
+ auto d = src.payload.get<Event::EventPayload::pose6DOF>();
+ auto dstr = ::android::internal::ToString(d);
+ // ALOGE("Received 6DOF for expected scalar %s", dstr.c_str());
+ dst->data[0] = d.values[0];
+ } else {
+ dst->data[0] = src.payload.get<Event::EventPayload::scalar>();
+ }
break;
}
--
2.34.1

View File

@ -0,0 +1,34 @@
From 0e3acc4e47d5197132ca6a84c07d690a08536a16 Mon Sep 17 00:00:00 2001
From: Artem Borisov <dedsa2002@gmail.com>
Date: Sat, 10 Nov 2018 17:19:17 +0000
Subject: [PATCH 2/7] Telephony: Don not call onUssdRelease for Huawei RIL
Huawei RIL doesn't seem to work properly with USSD_MODE_NW_RELEASE,
always releasing USSD when it should be finished instead.
Let's explicitly call onUssdFinished in this case.
Change-Id: I69faed1c51d4582834879975d6ab13daf7f48ad4
---
src/java/com/android/internal/telephony/GsmCdmaPhone.java | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/java/com/android/internal/telephony/GsmCdmaPhone.java b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
index 76a8d57246..6094483229 100644
--- a/src/java/com/android/internal/telephony/GsmCdmaPhone.java
+++ b/src/java/com/android/internal/telephony/GsmCdmaPhone.java
@@ -2834,7 +2834,11 @@ public class GsmCdmaPhone extends Phone {
if (found != null) {
// Complete pending USSD
if (isUssdRelease) {
- found.onUssdRelease();
+ if (SystemProperties.getBoolean("persist.sys.radio.huawei", false)) {
+ found.onUssdFinished(ussdMessage, isUssdRequest);
+ } else {
+ found.onUssdRelease();
+ }
} else if (isUssdError) {
found.onUssdFinishedError();
} else {
--
2.34.1

View File

@ -0,0 +1,29 @@
From c45687629af2c00ae3ddc18dbcfdab461c328af5 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Mon, 21 Dec 2020 19:36:54 +0100
Subject: [PATCH] Let vendor have priority over NFC config file, rather than
GSI
Thanks @mikalovtch
Change-Id: Iaee468f3b8e5c8ec90ca7e856a6526d1cbcaa33e
---
src/adaptation/nfc_config.cc | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/adaptation/nfc_config.cc b/src/adaptation/nfc_config.cc
index 264968e4..92606979 100644
--- a/src/adaptation/nfc_config.cc
+++ b/src/adaptation/nfc_config.cc
@@ -30,7 +30,7 @@ using namespace ::android::base;
namespace {
std::string searchConfigPath(std::string file_name) {
const std::vector<std::string> search_path = {
- "/product/etc/", "/odm/etc/", "/vendor/etc/", "/system_ext/etc/", "/etc/",
+ "/odm/etc/", "/vendor/etc/", "/product/etc/", "/system_ext/etc/", "/etc/",
};
for (std::string path : search_path) {
path.append(file_name);
--
2.25.1

View File

@ -0,0 +1,38 @@
From 11766af32aece696f0390e41a5c574b4ca3de265 Mon Sep 17 00:00:00 2001
From: Pierre-Hugues Husson <phh@phh.me>
Date: Sat, 7 Mar 2020 14:49:09 +0100
Subject: [PATCH 2/5] Failing to create facedata shouldn't be fatal
Some Pie vendors create it on their own, so SELinux would deny that
Also not all devices have face unlock anyway
See https://github.com/phhusson/treble_experimentations/issues/1119
---
vold_prepare_subdirs.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/vold_prepare_subdirs.cpp b/vold_prepare_subdirs.cpp
index 94d7f15..671ae6f 100644
--- a/vold_prepare_subdirs.cpp
+++ b/vold_prepare_subdirs.cpp
@@ -198,7 +198,7 @@ static bool prepare_subdirs(const std::string& volume_uuid, int user_id, int fla
}
auto facedata_path = vendor_de_path + "/facedata";
if (!prepare_dir(sehandle, 0700, AID_SYSTEM, AID_SYSTEM, facedata_path)) {
- return false;
+ LOG(ERROR) << "Failed preparing folder for de facedata";
}
}
}
@@ -247,7 +247,7 @@ static bool prepare_subdirs(const std::string& volume_uuid, int user_id, int fla
auto vendor_ce_path = android::vold::BuildDataVendorCePath(user_id);
auto facedata_path = vendor_ce_path + "/facedata";
if (!prepare_dir(sehandle, 0700, AID_SYSTEM, AID_SYSTEM, facedata_path)) {
- return false;
+ LOG(ERROR) << "Failed preparing folder for de facedata";
}
}
}
--
2.25.1