From b06c31754a69b66c3f24ac5a05240796fda10421 Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 22 Mar 2019 10:29:29 +0000 Subject: [PATCH 01/41] Revert "OMS: handle target or overlay package disabled" This reverts commit 9bffddf47a9cfe124cf2b31a807144a64b3c61aa. Signed-off-by: sayan7848 --- core/java/android/content/om/OverlayInfo.java | 11 ----------- .../server/om/hosttest/InstallOverlayTests.java | 10 ---------- .../android/server/om/OverlayManagerServiceImpl.java | 9 --------- 3 files changed, 30 deletions(-) diff --git a/core/java/android/content/om/OverlayInfo.java b/core/java/android/content/om/OverlayInfo.java index 9f7abf679d5..edacbb0bb2b 100644 --- a/core/java/android/content/om/OverlayInfo.java +++ b/core/java/android/content/om/OverlayInfo.java @@ -41,7 +41,6 @@ public final class OverlayInfo implements Parcelable { STATE_ENABLED_STATIC, STATE_TARGET_UPGRADING, STATE_OVERLAY_UPGRADING, - STATE_OVERLAY_NOT_AVAILABLE, }) @Retention(RetentionPolicy.SOURCE) public @interface State {} @@ -98,13 +97,6 @@ public final class OverlayInfo implements Parcelable { */ public static final int STATE_ENABLED_STATIC = 6; - /** - * The overlay package is currently disabled by the package manager. For - * all intents and purposes, outside the package manager, it is like the - * overlay package simply was not installed. - */ - public static final int STATE_OVERLAY_NOT_AVAILABLE = 7; - /** * Overlay category: theme. *

@@ -215,7 +207,6 @@ private void ensureValidState() { case STATE_ENABLED_STATIC: case STATE_TARGET_UPGRADING: case STATE_OVERLAY_UPGRADING: - case STATE_OVERLAY_NOT_AVAILABLE: break; default: throw new IllegalArgumentException("State " + state + " is not a valid state"); @@ -294,8 +285,6 @@ public static String stateToString(@State int state) { return "STATE_TARGET_UPGRADING"; case STATE_OVERLAY_UPGRADING: return "STATE_OVERLAY_UPGRADING"; - case STATE_OVERLAY_NOT_AVAILABLE: - return "STATE_OVERLAY_NOT_AVAILABLE"; default: return ""; } diff --git a/core/tests/overlaytests/host/src/com/android/server/om/hosttest/InstallOverlayTests.java b/core/tests/overlaytests/host/src/com/android/server/om/hosttest/InstallOverlayTests.java index 9b1f95ce2a6..6d5276f2423 100644 --- a/core/tests/overlaytests/host/src/com/android/server/om/hosttest/InstallOverlayTests.java +++ b/core/tests/overlaytests/host/src/com/android/server/om/hosttest/InstallOverlayTests.java @@ -94,16 +94,6 @@ public void installPlatformSignedOverlay() throws Exception { assertTrue(overlayManagerContainsPackage(SIG_OVERLAY_PACKAGE_NAME)); } - @Test - public void installAndDisableOverlay() throws Exception { - final String pkgName = "com.android.server.om.hosttest.app_overlay"; - installPackage("OverlayHostTests_AppOverlayV1.apk"); - assertTrue(overlayManagerContainsPackage(pkgName)); - assertFalse(overlayManagerContainsPackage("--- " + pkgName)); - setPackageEnabled(pkgName, false); - assertTrue(overlayManagerContainsPackage("--- " + pkgName)); - } - @Test public void installPlatformSignedAppOverlayAndUpdate() throws Exception { assertTrue(runDeviceTests(DEVICE_TEST_PKG, DEVICE_TEST_CLS, "expectAppResource")); diff --git a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java index 380ba5cd0dc..4103e3421dd 100644 --- a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +++ b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java @@ -21,7 +21,6 @@ import static android.content.om.OverlayInfo.STATE_ENABLED_STATIC; import static android.content.om.OverlayInfo.STATE_MISSING_TARGET; import static android.content.om.OverlayInfo.STATE_NO_IDMAP; -import static android.content.om.OverlayInfo.STATE_OVERLAY_NOT_AVAILABLE; import static android.content.om.OverlayInfo.STATE_OVERLAY_UPGRADING; import static android.content.om.OverlayInfo.STATE_TARGET_UPGRADING; @@ -685,14 +684,6 @@ private boolean updateState(@NonNull final String targetPackageName, return STATE_MISSING_TARGET; } - if (!targetPackage.applicationInfo.enabled) { - return STATE_MISSING_TARGET; - } - - if (!overlayPackage.applicationInfo.enabled) { - return STATE_OVERLAY_NOT_AVAILABLE; - } - if (!mIdmapManager.idmapExists(overlayPackage, userId)) { return STATE_NO_IDMAP; } From 9bb3934d52f9b09018805eabbc6229b96ceb0b44 Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 22 Mar 2019 10:32:22 +0000 Subject: [PATCH 02/41] Revert "OMS: try harder not to update assets if nothing changed" This reverts commit d2ec68f9cf8e9a186af1348b893a8d456f20d0d7. Signed-off-by: sayan7848 --- .../java/com/android/server/om/OverlayManagerServiceImpl.java | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java index 4103e3421dd..112059daf95 100644 --- a/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java +++ b/services/core/java/com/android/server/om/OverlayManagerServiceImpl.java @@ -313,9 +313,7 @@ private boolean updateAllOverlaysForTarget(@NonNull final String targetPackageNa } // check for enabled framework overlays - if (!"android".equals(targetPackageName)) { - modified = modified || !getEnabledOverlayPackageNames("android", userId).isEmpty(); - } + modified = modified || !getEnabledOverlayPackageNames("android", userId).isEmpty(); return modified; } From 382b162f7bf4acb419a1b59d7b3013ca3b61a16a Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 22 Mar 2019 10:32:48 +0000 Subject: [PATCH 03/41] Revert "SubstratumService: Rewrite installation method for Pie InstallSession API" This reverts commit 1e5a05601740bef697b84c2ef2eca436bd40997f. Signed-off-by: sayan7848 --- .../substratum/ISubstratumHelperService.aidl | 1 - .../helper/SubstratumHelperService.java | 88 ------------------- .../server/substratum/SubstratumService.java | 80 +++++++++++++---- 3 files changed, 65 insertions(+), 104 deletions(-) diff --git a/core/java/com/android/internal/substratum/ISubstratumHelperService.aidl b/core/java/com/android/internal/substratum/ISubstratumHelperService.aidl index 48dc20b5c5f..d64e2f8c110 100644 --- a/core/java/com/android/internal/substratum/ISubstratumHelperService.aidl +++ b/core/java/com/android/internal/substratum/ISubstratumHelperService.aidl @@ -21,5 +21,4 @@ oneway interface ISubstratumHelperService { void applyBootAnimation(); void applyShutdownAnimation(); void applyProfile(in String name); - void installOverlay(in List paths); } diff --git a/packages/SubstratumHelperService/src/projekt/substratum/helper/SubstratumHelperService.java b/packages/SubstratumHelperService/src/projekt/substratum/helper/SubstratumHelperService.java index 1f31abe9f7c..09bb31d545b 100644 --- a/packages/SubstratumHelperService/src/projekt/substratum/helper/SubstratumHelperService.java +++ b/packages/SubstratumHelperService/src/projekt/substratum/helper/SubstratumHelperService.java @@ -17,14 +17,7 @@ import android.app.Service; import android.content.Intent; -import android.content.IIntentReceiver; -import android.content.IIntentSender; -import android.content.IntentSender; -import android.content.pm.PackageInstaller; -import android.content.pm.PackageInstaller.Session; -import android.content.pm.PackageInstaller.SessionParams; import android.os.Binder; -import android.os.Bundle; import android.os.Environment; import android.os.FileUtils; import android.os.IBinder; @@ -35,14 +28,6 @@ import com.android.internal.substratum.ISubstratumHelperService; import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.io.InputStream; -import java.io.IOException; -import java.io.OutputStream; -import java.util.List; -import java.util.concurrent.SynchronousQueue; -import java.util.concurrent.TimeUnit; public class SubstratumHelperService extends Service { private static final String TAG = "SubstratumHelperService"; @@ -123,51 +108,6 @@ public void applyProfile(String name) { } } - @Override - public void installOverlay(List paths) { - if (!isAuthorized(Binder.getCallingUid())) return; - LocalIntentReceiver receiver = new LocalIntentReceiver(); - for (String path : paths) { - //Settings.Global.putInt(mContext.getContentResolver(), - // Settings.Global.PACKAGE_VERIFIER_ENABLE, 0); - File apkFile = new File(path); - try { - //PackageParser.PackageLite pkg = PackageParser.parsePackageLite(apkFile, 0); - PackageInstaller installer = getPackageManager().getPackageInstaller(); - SessionParams params = new SessionParams(SessionParams.MODE_FULL_INSTALL); - int sessionId = installer.createSession(params); - try (PackageInstaller.Session session = installer.openSession(sessionId)) { - try (InputStream in = new FileInputStream(apkFile); - OutputStream apkStream = session.openWrite( - "base.apk", 0, apkFile.length())) { - byte[] buffer = new byte[32 * 1024]; - long size = apkFile.length(); - while (size > 0) { - long toRead = (buffer.length < size) ? buffer.length : size; - int didRead = in.read(buffer, 0, (int) toRead); - apkStream.write(buffer, 0, didRead); - size -= didRead; - } - } - session.commit(receiver.getIntentSender()); - } - } catch (IOException e) { - Log.e(TAG, "Install failed", e); - continue; - } - - Intent result = receiver.getResult(); - int status = result.getIntExtra(PackageInstaller.EXTRA_STATUS, - PackageInstaller.STATUS_FAILURE); - if (status == PackageInstaller.STATUS_SUCCESS) { - String installedPackageName = result.getStringExtra( - PackageInstaller.EXTRA_PACKAGE_NAME); - } else { - // ¯\_(ツ)_/¯ - } - } - } - private boolean isAuthorized(int uid) { return Process.SYSTEM_UID == uid; } @@ -197,32 +137,4 @@ private boolean copyDir(File src, File dst) { public IBinder onBind(Intent intent) { return mISubstratumHelperService.asBinder(); } - - private static class LocalIntentReceiver { - private final SynchronousQueue mResult = new SynchronousQueue<>(); - - private IIntentSender.Stub mLocalSender = new IIntentSender.Stub() { - @Override - public void send(int code, Intent intent, String resolvedType, IBinder whitelistToken, - IIntentReceiver finishedReceiver, String requiredPermission, Bundle options) { - try { - mResult.offer(intent, 5, TimeUnit.SECONDS); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - }; - - public IntentSender getIntentSender() { - return new IntentSender((IIntentSender) mLocalSender); - } - - public Intent getResult() { - try { - return mResult.take(); - } catch (InterruptedException e) { - throw new RuntimeException(e); - } - } - } } diff --git a/services/core/java/com/android/server/substratum/SubstratumService.java b/services/core/java/com/android/server/substratum/SubstratumService.java index 5c5634bbf57..c8b1214097e 100644 --- a/services/core/java/com/android/server/substratum/SubstratumService.java +++ b/services/core/java/com/android/server/substratum/SubstratumService.java @@ -76,7 +76,7 @@ public final class SubstratumService extends SystemService { private static final String TAG = "SubstratumService"; private static final String SUBSTRATUM_PACKAGE = "projekt.substratum"; - private static final boolean DEBUG = true; + private static final boolean DEBUG = false; private static final Signature SUBSTRATUM_SIGNATURE = new Signature("" + "308202eb308201d3a003020102020411c02f2f300d06092a864886f70d01010b050030263124302206" @@ -214,15 +214,7 @@ private void waitForHelperConnection() { Intent intent = new Intent("projekt.substratum.helper.SubstratumHelperService"); intent.setPackage("projekt.substratum.helper"); mContext.bindServiceAsUser(intent, mHelperConnection, - Context.BIND_AUTO_CREATE | Context.BIND_IMPORTANT_BACKGROUND, UserHandle.SYSTEM); - int retryCount = 1; - while (mHelperService == null && retryCount <= 30) { - try { - Thread.sleep(100); - } catch (InterruptedException ignored) { - } - retryCount++; - } + Context.BIND_AUTO_CREATE, UserHandle.SYSTEM); } } @@ -274,14 +266,72 @@ private void checkCallerAuthorization(int uid) { public void installOverlay(List paths) { checkCallerAuthorization(Binder.getCallingUid()); final long ident = Binder.clearCallingIdentity(); + final int packageVerifierEnable = Settings.Global.getInt( + mContext.getContentResolver(), + Settings.Global.PACKAGE_VERIFIER_ENABLE, 1); try { synchronized (mLock) { - waitForHelperConnection(); - mHelperService.installOverlay(paths); + PackageInstallObserver installObserver = new PackageInstallObserver(); + PackageDeleteObserver deleteObserver = new PackageDeleteObserver(); + for (String path : paths) { + mInstalledPackageName = null; + log("Installer - installing package from path \'" + path + "\'"); + mIsWaiting = true; + Settings.Global.putInt(mContext.getContentResolver(), + Settings.Global.PACKAGE_VERIFIER_ENABLE, 0); + try { + mPm.installExistingPackageAsUser( + mInstalledPackageName, + UserHandle.USER_SYSTEM, + PackageManager.INSTALL_REPLACE_EXISTING, + PackageManager.INSTALL_REASON_UNKNOWN); + + while (mIsWaiting) { + try { + Thread.sleep(1); + } catch (InterruptedException e) { + // Someone interrupted my sleep, ugh! + } + } + } catch (RemoteException e) { + logE("There is an exception when trying to install " + path, e); + continue; + } + + if (mInstalledPackageName != null) { + try { + PackageInfo pi = mPm.getPackageInfo(mInstalledPackageName, + 0, UserHandle.USER_SYSTEM); + if ((pi.applicationInfo.flags & ApplicationInfo.FLAG_HAS_CODE) != 0 || + pi.overlayTarget == null) { + mIsWaiting = true; + int versionCode = mPm.getPackageInfo( + mInstalledPackageName, 0, UserHandle.USER_SYSTEM) + .versionCode; + mPm.deletePackageAsUser( + mInstalledPackageName, + versionCode, + deleteObserver, + 0, + UserHandle.USER_SYSTEM); + + while (mIsWaiting) { + try { + Thread.sleep(1); + } catch (InterruptedException e) { + // Someone interrupted my sleep, ugh! + } + } + } + } catch (RemoteException e) { + // Probably won't happen but we need to keep quiet here + } + } + } } - } catch (RemoteException ignored) { - // ¯\_(ツ)_/¯ } finally { + Settings.Global.putInt(mContext.getContentResolver(), + Settings.Global.PACKAGE_VERIFIER_ENABLE, packageVerifierEnable); Binder.restoreCallingIdentity(ident); } } @@ -1035,7 +1085,7 @@ private void logE(String msg) { private void updateSettings() { synchronized (mLock) { mSigOverride = Settings.Secure.getIntForUser(mContext.getContentResolver(), - Settings.Secure.FORCE_AUTHORIZE_SUBSTRATUM_PACKAGES, 1, + Settings.Secure.FORCE_AUTHORIZE_SUBSTRATUM_PACKAGES, 0, UserHandle.USER_CURRENT) == 1; } } From cc1d664ced827667fd65513823ad7fb6e3857746 Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 22 Mar 2019 10:33:19 +0000 Subject: [PATCH 04/41] Revert "Unbreak public api by hiding substratum interfaces" This reverts commit 0985d217f7a1ed37242f5e380c0bd43c607eba57. Signed-off-by: sayan7848 --- core/java/android/content/substratum/ISubstratumService.aidl | 1 - .../android/internal/substratum/ISubstratumHelperService.aidl | 1 - 2 files changed, 2 deletions(-) diff --git a/core/java/android/content/substratum/ISubstratumService.aidl b/core/java/android/content/substratum/ISubstratumService.aidl index 13bd2113e9c..04b65262a32 100644 --- a/core/java/android/content/substratum/ISubstratumService.aidl +++ b/core/java/android/content/substratum/ISubstratumService.aidl @@ -16,7 +16,6 @@ package android.content.substratum; -/** {@hide} */ interface ISubstratumService { /** diff --git a/core/java/com/android/internal/substratum/ISubstratumHelperService.aidl b/core/java/com/android/internal/substratum/ISubstratumHelperService.aidl index d64e2f8c110..7d6ac0aa176 100644 --- a/core/java/com/android/internal/substratum/ISubstratumHelperService.aidl +++ b/core/java/com/android/internal/substratum/ISubstratumHelperService.aidl @@ -16,7 +16,6 @@ package com.android.internal.substratum; -/** {@hide} */ oneway interface ISubstratumHelperService { void applyBootAnimation(); void applyShutdownAnimation(); From e2363fbbbab239bca63fcab032d42b19ed133366 Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 22 Mar 2019 10:33:46 +0000 Subject: [PATCH 05/41] Revert "Pie OMS: allow non-system overlays from Substratum" This reverts commit a96bc59e627445d9013b9f3cdc92cb5bc3ffe4c3. Signed-off-by: sayan7848 --- .../java/com/android/server/SystemConfig.java | 16 ----------- data/etc/Android.mk | 10 +------ data/etc/substratum-sysconfig.xml | 22 --------------- .../server/pm/PackageManagerService.java | 28 ++++++------------- 4 files changed, 10 insertions(+), 66 deletions(-) delete mode 100644 data/etc/substratum-sysconfig.xml diff --git a/core/java/com/android/server/SystemConfig.java b/core/java/com/android/server/SystemConfig.java index f6450b6ef86..c5be8e4a3ab 100644 --- a/core/java/com/android/server/SystemConfig.java +++ b/core/java/com/android/server/SystemConfig.java @@ -142,9 +142,6 @@ public static final class PermissionEntry { // Package names that are exempted from private API blacklisting final ArraySet mHiddenApiPackageWhitelist = new ArraySet<>(); - // These are the packages that are whitelisted to be the signature check for a theme system - final ArraySet mThemeSystemSignatureWhitelistedApps = new ArraySet<>(); - // The list of carrier applications which should be disabled until used. // This function suppresses update notifications for these pre-installed apps. // In SubscriptionInfoUpdater, the listed applications are disabled until used when all of the @@ -247,10 +244,6 @@ public ArraySet getBackupTransportWhitelist() { return mBackupTransportWhitelist; } - public ArraySet getThemeSystemSignatureWhitelistedApps() { - return mThemeSystemSignatureWhitelistedApps; - } - public ArraySet getDisabledUntilUsedPreinstalledCarrierApps() { return mDisabledUntilUsedPreinstalledCarrierApps; } @@ -633,15 +626,6 @@ private void readPermissionsFromXml(File permFile, int permissionFlag) { } } XmlUtils.skipCurrentTag(parser); - } else if ("theme-system-signature-whitelisted-app".equals(name) && allowAppConfigs) { - String pkgname = parser.getAttributeValue(null, "package"); - if (pkgname == null) { - Slog.w(TAG, " without package in " + permFile - + " at " + parser.getPositionDescription()); - } else { - mThemeSystemSignatureWhitelistedApps.add(pkgname); - } - XmlUtils.skipCurrentTag(parser); } else if ("disabled-until-used-preinstalled-carrier-associated-app".equals(name) && allowAppConfigs) { String pkgname = parser.getAttributeValue(null, "package"); diff --git a/data/etc/Android.mk b/data/etc/Android.mk index f9ddefe178b..0bb34f8aa7a 100644 --- a/data/etc/Android.mk +++ b/data/etc/Android.mk @@ -55,12 +55,4 @@ LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_TAGS := optional LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/sysconfig LOCAL_SRC_FILES := $(LOCAL_MODULE) -include $(BUILD_PREBUILT) - -######################## -include $(CLEAR_VARS) -LOCAL_MODULE := substratum-sysconfig.xml -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/sysconfig -LOCAL_SRC_FILES := $(LOCAL_MODULE) -include $(BUILD_PREBUILT) +include $(BUILD_PREBUILT) \ No newline at end of file diff --git a/data/etc/substratum-sysconfig.xml b/data/etc/substratum-sysconfig.xml deleted file mode 100644 index 1d6a161b000..00000000000 --- a/data/etc/substratum-sysconfig.xml +++ /dev/null @@ -1,22 +0,0 @@ - - - - - - - - - \ No newline at end of file diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index 015f5d48cef..e772504ad9d 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -11403,26 +11403,16 @@ private void assertPackageIsValid(PackageParser.Package pkg, final @ParseFlags i } // The only case where we allow installation of a non-system overlay is when - // its signature is signed with a whitelisted OEM theme system certificate. - ArraySet wlSigApps = - SystemConfig.getInstance().getThemeSystemSignatureWhitelistedApps(); - boolean sigAllowed = false; - for (String pkgName : wlSigApps) { - PackageSetting platformPkgSetting = mSettings.getPackageLPr(pkgName); - sigAllowed = (platformPkgSetting.signatures.mSigningDetails - != PackageParser.SigningDetails.UNKNOWN) - && (compareSignatures( - platformPkgSetting.signatures.mSigningDetails.signatures, - pkg.mSigningDetails.signatures) - == PackageManager.SIGNATURE_MATCH); - if (sigAllowed) { - break; - } - } - - if (!sigAllowed) { + // its signature is signed with the platform certificate. + PackageSetting platformPkgSetting = mSettings.getPackageLPr("android"); + if ((platformPkgSetting.signatures.mSigningDetails + != PackageParser.SigningDetails.UNKNOWN) + && (compareSignatures( + platformPkgSetting.signatures.mSigningDetails.signatures, + pkg.mSigningDetails.signatures) + != PackageManager.SIGNATURE_MATCH)) { throw new PackageManagerException("Overlay " + pkg.packageName + - " must be signed with a whitelisted OEM theme system certificate."); + " must be signed with the platform certificate."); } } } From 3677332da06c0f52e202279eb4a6b96e3d795a4b Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 22 Mar 2019 10:34:33 +0000 Subject: [PATCH 06/41] Revert "SubstratumService: Refactor & cleanup according to AOSP conventions" This reverts commit 78f5ec499449774c257c17f8fd71cc207d9becbe. Signed-off-by: sayan7848 --- data/etc/Android.mk | 13 ++++++++--- data/etc/projekt.substratum.theme.xml | 23 +++++++++++++++++++ ...theme-feature.xml => substratum_theme.xml} | 4 ++-- .../Android.mk | 8 ++++--- .../AndroidManifest.xml | 12 +++++----- .../service}/SubstratumHelperService.java | 4 ++-- .../server/substratum/SubstratumService.java | 4 ++-- 7 files changed, 50 insertions(+), 18 deletions(-) create mode 100644 data/etc/projekt.substratum.theme.xml rename data/etc/{substratum-theme-feature.xml => substratum_theme.xml} (96%) rename packages/{SubstratumHelperService => SubstratumService}/Android.mk (87%) rename packages/{SubstratumHelperService => SubstratumService}/AndroidManifest.xml (80%) rename packages/{SubstratumHelperService/src/projekt/substratum/helper => SubstratumService/src/android/substratum/service}/SubstratumHelperService.java (98%) diff --git a/data/etc/Android.mk b/data/etc/Android.mk index 0bb34f8aa7a..f94ec844d8e 100644 --- a/data/etc/Android.mk +++ b/data/etc/Android.mk @@ -48,11 +48,18 @@ LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/sysconfig LOCAL_SRC_FILES := $(LOCAL_MODULE) include $(BUILD_PREBUILT) -######################## include $(CLEAR_VARS) -LOCAL_MODULE := substratum-theme-feature.xml +LOCAL_MODULE := projekt.substratum.theme.xml +LOCAL_MODULE_CLASS := ETC +LOCAL_MODULE_TAGS := optional +LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions +LOCAL_SRC_FILES := $(LOCAL_MODULE) +include $(BUILD_PREBUILT) + +include $(CLEAR_VARS) +LOCAL_MODULE := substratum_theme.xml LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_TAGS := optional LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/sysconfig LOCAL_SRC_FILES := $(LOCAL_MODULE) -include $(BUILD_PREBUILT) \ No newline at end of file +include $(BUILD_PREBUILT) diff --git a/data/etc/projekt.substratum.theme.xml b/data/etc/projekt.substratum.theme.xml new file mode 100644 index 00000000000..eb14a3d4e1c --- /dev/null +++ b/data/etc/projekt.substratum.theme.xml @@ -0,0 +1,23 @@ + + + + + + + + + diff --git a/data/etc/substratum-theme-feature.xml b/data/etc/substratum_theme.xml similarity index 96% rename from data/etc/substratum-theme-feature.xml rename to data/etc/substratum_theme.xml index b7d97fcd586..8ac5a9af302 100644 --- a/data/etc/substratum-theme-feature.xml +++ b/data/etc/substratum_theme.xml @@ -15,11 +15,11 @@ limitations under the License. --> - + - + diff --git a/packages/SubstratumHelperService/Android.mk b/packages/SubstratumService/Android.mk similarity index 87% rename from packages/SubstratumHelperService/Android.mk rename to packages/SubstratumService/Android.mk index 78908d9312d..28eeaf1acc1 100644 --- a/packages/SubstratumHelperService/Android.mk +++ b/packages/SubstratumService/Android.mk @@ -22,11 +22,13 @@ LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_PROGUARD_ENABLED := disabled LOCAL_REQUIRED_MODULES := \ - substratum-theme-feature.xml + projekt.substratum.theme.xml \ + substratum_theme.xml -LOCAL_PACKAGE_NAME := SubstratumHelperService +LOCAL_PACKAGE_NAME := SubstratumService LOCAL_PRIVATE_PLATFORM_APIS := true LOCAL_CERTIFICATE := platform LOCAL_PRIVILEGED_MODULE := true -include $(BUILD_PACKAGE) \ No newline at end of file +include $(BUILD_PACKAGE) + diff --git a/packages/SubstratumHelperService/AndroidManifest.xml b/packages/SubstratumService/AndroidManifest.xml similarity index 80% rename from packages/SubstratumHelperService/AndroidManifest.xml rename to packages/SubstratumService/AndroidManifest.xml index d28dbc68c2f..4a78d555d39 100644 --- a/packages/SubstratumHelperService/AndroidManifest.xml +++ b/packages/SubstratumService/AndroidManifest.xml @@ -19,26 +19,26 @@ - - + + + android:label="Substratum Service"> - - + diff --git a/packages/SubstratumHelperService/src/projekt/substratum/helper/SubstratumHelperService.java b/packages/SubstratumService/src/android/substratum/service/SubstratumHelperService.java similarity index 98% rename from packages/SubstratumHelperService/src/projekt/substratum/helper/SubstratumHelperService.java rename to packages/SubstratumService/src/android/substratum/service/SubstratumHelperService.java index 09bb31d545b..fe0b5542164 100644 --- a/packages/SubstratumHelperService/src/projekt/substratum/helper/SubstratumHelperService.java +++ b/packages/SubstratumService/src/android/substratum/service/SubstratumHelperService.java @@ -13,7 +13,7 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package projekt.substratum.helper; +package android.substratum.service; import android.app.Service; import android.content.Intent; @@ -30,7 +30,7 @@ import java.io.File; public class SubstratumHelperService extends Service { - private static final String TAG = "SubstratumHelperService"; + private static final String TAG = "SubstratumService"; private final File EXTERNAL_CACHE_DIR = new File(Environment.getExternalStorageDirectory(), ".substratum"); diff --git a/services/core/java/com/android/server/substratum/SubstratumService.java b/services/core/java/com/android/server/substratum/SubstratumService.java index c8b1214097e..5d3e1c61a26 100644 --- a/services/core/java/com/android/server/substratum/SubstratumService.java +++ b/services/core/java/com/android/server/substratum/SubstratumService.java @@ -211,8 +211,8 @@ public void onSwitchUser(final int newUserId) { private void waitForHelperConnection() { if (mHelperService == null) { - Intent intent = new Intent("projekt.substratum.helper.SubstratumHelperService"); - intent.setPackage("projekt.substratum.helper"); + Intent intent = new Intent("android.substratum.service.SubstratumHelperService"); + intent.setPackage("android.substratum.service"); mContext.bindServiceAsUser(intent, mHelperConnection, Context.BIND_AUTO_CREATE, UserHandle.SYSTEM); } From 996c90051a36fbf3f027f538f3aceda3a4d602ae Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 22 Mar 2019 10:34:59 +0000 Subject: [PATCH 07/41] Revert "base: modify/define custom overlay management" This reverts commit 005ac3b41c1994464af639eed01701a9fa68620d. Signed-off-by: sayan7848 --- .../substratum/ISubstratumService.aidl | 25 ------------------- core/jni/fd_utils.cpp | 4 +-- libs/androidfw/AssetManager.cpp | 3 +-- .../include/androidfw/AssetManager.h | 1 - .../SubstratumService/AndroidManifest.xml | 1 - .../server/om/OverlayManagerService.java | 2 ++ .../server/pm/PackageManagerService.java | 12 --------- .../server/substratum/SubstratumService.java | 21 +--------------- 8 files changed, 5 insertions(+), 64 deletions(-) diff --git a/core/java/android/content/substratum/ISubstratumService.aidl b/core/java/android/content/substratum/ISubstratumService.aidl index 04b65262a32..da71ba326db 100644 --- a/core/java/android/content/substratum/ISubstratumService.aidl +++ b/core/java/android/content/substratum/ISubstratumService.aidl @@ -140,30 +140,5 @@ interface ISubstratumService { * requested user, an empty map is returned. */ Map getAllOverlays(in int uid); - - /** - * Request that an overlay package be enabled or disabled when possible to - * do so. - * - * It is always possible to disable an overlay, but due to technical and - * security reasons it may not always be possible to enable an overlay. An - * example of the latter is when the related target package is not - * installed. If the technical obstacle is later overcome, the overlay is - * automatically enabled at that point in time. - * - * An enabled overlay is a part of target package's resources, i.e. it will - * be part of any lookups performed via {@link android.content.res.Resources} - * and {@link android.content.res.AssetManager}. A disabled overlay will no - * longer affect the resources of the target package. If the target is - * currently running, its outdated resources will be replaced by new ones. - * This happens the same way as when an application enters or exits split - * window mode. - * - * @param packageName The name of the overlay package. - * @param enable true to enable the overlay, false to disable it. - * @param userId The user for which to change the overlay. - * @return true if the system successfully registered the request, false otherwise. - */ - boolean setEnabled(in String packageName, in boolean enable, in int userId); } diff --git a/core/jni/fd_utils.cpp b/core/jni/fd_utils.cpp index ec07daa4c8c..c5904e0e9e5 100644 --- a/core/jni/fd_utils.cpp +++ b/core/jni/fd_utils.cpp @@ -87,15 +87,13 @@ bool FileDescriptorWhitelist::IsAllowed(const std::string& path) const { static const char* kOverlaySubdir = "/system/vendor/overlay-subdir/"; static const char* kSystemProductOverlayDir = "/system/product/overlay/"; static const char* kProductOverlayDir = "/product/overlay"; - static const char* kThemeOverlayDir = "/data/system/theme"; static const char* kApkSuffix = ".apk"; if ((android::base::StartsWith(path, kOverlayDir) || android::base::StartsWith(path, kOverlaySubdir) || android::base::StartsWith(path, kVendorOverlayDir) || android::base::StartsWith(path, kSystemProductOverlayDir) - || android::base::StartsWith(path, kProductOverlayDir) - || android::base::StartsWith(path, kThemeOverlayDir)) + || android::base::StartsWith(path, kProductOverlayDir)) && android::base::EndsWith(path, kApkSuffix) && path.find("/../") == std::string::npos) { return true; diff --git a/libs/androidfw/AssetManager.cpp b/libs/androidfw/AssetManager.cpp index 061e6c2a038..fc625bbaf72 100644 --- a/libs/androidfw/AssetManager.cpp +++ b/libs/androidfw/AssetManager.cpp @@ -73,9 +73,8 @@ static volatile int32_t gCount = 0; const char* AssetManager::RESOURCES_FILENAME = "resources.arsc"; const char* AssetManager::IDMAP_BIN = "/system/bin/idmap"; const char* AssetManager::OVERLAY_DIR = "/vendor/overlay"; -const char* AssetManager::THEME_OVERLAY_DIR = "/data/system/theme"; const char* AssetManager::PRODUCT_OVERLAY_DIR = "/product/overlay"; -const char* AssetManager::OVERLAY_THEME_DIR_PROPERTY = "../../data/system/theme"; +const char* AssetManager::OVERLAY_THEME_DIR_PROPERTY = "ro.boot.vendor.overlay.theme"; const char* AssetManager::TARGET_PACKAGE_NAME = "android"; const char* AssetManager::TARGET_APK_PATH = "/system/framework/framework-res.apk"; const char* AssetManager::IDMAP_DIR = "/data/resource-cache"; diff --git a/libs/androidfw/include/androidfw/AssetManager.h b/libs/androidfw/include/androidfw/AssetManager.h index 115ae0b735c..08da7319de8 100644 --- a/libs/androidfw/include/androidfw/AssetManager.h +++ b/libs/androidfw/include/androidfw/AssetManager.h @@ -60,7 +60,6 @@ class AssetManager : public AAssetManager { static const char* RESOURCES_FILENAME; static const char* IDMAP_BIN; static const char* OVERLAY_DIR; - static const char* THEME_OVERLAY_DIR; static const char* PRODUCT_OVERLAY_DIR; /* * If OVERLAY_THEME_DIR_PROPERTY is set, search for runtime resource overlay diff --git a/packages/SubstratumService/AndroidManifest.xml b/packages/SubstratumService/AndroidManifest.xml index 4a78d555d39..06341d2d0fc 100644 --- a/packages/SubstratumService/AndroidManifest.xml +++ b/packages/SubstratumService/AndroidManifest.xml @@ -26,7 +26,6 @@ - diff --git a/services/core/java/com/android/server/om/OverlayManagerService.java b/services/core/java/com/android/server/om/OverlayManagerService.java index 0a82f9349ba..c7387018900 100644 --- a/services/core/java/com/android/server/om/OverlayManagerService.java +++ b/services/core/java/com/android/server/om/OverlayManagerService.java @@ -539,6 +539,7 @@ public OverlayInfo getOverlayInfo(@Nullable final String packageName, @Override public boolean setEnabled(@Nullable final String packageName, final boolean enable, int userId) throws RemoteException { + enforceChangeOverlayPackagesPermission("setEnabled"); userId = handleIncomingUser(userId, "setEnabled"); if (packageName == null) { return false; @@ -557,6 +558,7 @@ public boolean setEnabled(@Nullable final String packageName, final boolean enab @Override public boolean setEnabledExclusive(@Nullable final String packageName, final boolean enable, int userId) throws RemoteException { + enforceChangeOverlayPackagesPermission("setEnabled"); userId = handleIncomingUser(userId, "setEnabled"); if (packageName == null || !enable) { return false; diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index e772504ad9d..95ad9c44724 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -476,7 +476,6 @@ public class PackageManagerService extends IPackageManager.Stub static final int SCAN_AS_OEM = 1<<19; static final int SCAN_AS_VENDOR = 1<<20; static final int SCAN_AS_PRODUCT = 1<<21; - static final int SCAN_AS_THEME = 1<<22; @IntDef(flag = true, prefix = { "SCAN_" }, value = { SCAN_NO_DEX, @@ -585,8 +584,6 @@ public class PackageManagerService extends IPackageManager.Stub private static final String PRODUCT_OVERLAY_DIR = "/product/overlay"; - private static final String THEME_OVERLAY_DIR = "/data/system/theme"; - /** Canonical intent used to identify what counts as a "web browser" app */ private static final Intent sBrowserIntent; static { @@ -2656,15 +2653,6 @@ public void onDefaultRuntimePermissionsGranted(int userId) { | SCAN_AS_SYSTEM | SCAN_AS_PRODUCT, 0); - scanDirTracedLI(new File(THEME_OVERLAY_DIR), - mDefParseFlags - | PackageParser.PARSE_IS_SYSTEM_DIR, - scanFlags - | SCAN_AS_SYSTEM - | SCAN_AS_PRODUCT - | SCAN_AS_THEME, - 0); - mParallelPackageParserCallback.findStaticOverlayPackages(); diff --git a/services/core/java/com/android/server/substratum/SubstratumService.java b/services/core/java/com/android/server/substratum/SubstratumService.java index 5d3e1c61a26..22444d86b4c 100644 --- a/services/core/java/com/android/server/substratum/SubstratumService.java +++ b/services/core/java/com/android/server/substratum/SubstratumService.java @@ -70,7 +70,6 @@ import java.util.Map; import java.util.zip.ZipEntry; import java.util.zip.ZipInputStream; -import static android.os.Binder.getCallingUid; public final class SubstratumService extends SystemService { @@ -634,25 +633,7 @@ public Map getAllOverlays(int uid) { return null; } } - - @Override - public boolean setEnabled(final String packageName, final boolean enable, - int userId) throws RemoteException { - userId = Binder.getCallingUid(); - if (packageName == null) { - return false; - } - log("setEnabled - File name = \'" + packageName + "\'"); - final long ident = Binder.clearCallingIdentity(); - try { - synchronized (mLock) { - return mOm.setEnabled(packageName, enable, UserHandle.USER_SYSTEM); - } - } finally { - Binder.restoreCallingIdentity(ident); - } - } - }; + }; private Context getAppContext(String packageName) { Context ctx = null; From 3a5de748f76d97943ab131cbac9daaaef349e062 Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 22 Mar 2019 10:35:24 +0000 Subject: [PATCH 08/41] Revert "SubstratumService: unify permissions" This reverts commit 6228e45cf18558e9c246ca9a011528df03ae8379. Signed-off-by: sayan7848 --- data/etc/Android.mk | 8 ------ data/etc/projekt.substratum.theme.xml | 8 +++--- data/etc/substratum_theme.xml | 25 ------------------- packages/SubstratumService/Android.mk | 5 +--- .../SubstratumService/AndroidManifest.xml | 1 - 5 files changed, 6 insertions(+), 41 deletions(-) delete mode 100644 data/etc/substratum_theme.xml diff --git a/data/etc/Android.mk b/data/etc/Android.mk index f94ec844d8e..89c10d92620 100644 --- a/data/etc/Android.mk +++ b/data/etc/Android.mk @@ -55,11 +55,3 @@ LOCAL_MODULE_TAGS := optional LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions LOCAL_SRC_FILES := $(LOCAL_MODULE) include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := substratum_theme.xml -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_TAGS := optional -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/sysconfig -LOCAL_SRC_FILES := $(LOCAL_MODULE) -include $(BUILD_PREBUILT) diff --git a/data/etc/projekt.substratum.theme.xml b/data/etc/projekt.substratum.theme.xml index eb14a3d4e1c..8ac5a9af302 100644 --- a/data/etc/projekt.substratum.theme.xml +++ b/data/etc/projekt.substratum.theme.xml @@ -16,8 +16,10 @@ --> - - - + + + + diff --git a/data/etc/substratum_theme.xml b/data/etc/substratum_theme.xml deleted file mode 100644 index 8ac5a9af302..00000000000 --- a/data/etc/substratum_theme.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - diff --git a/packages/SubstratumService/Android.mk b/packages/SubstratumService/Android.mk index 28eeaf1acc1..2271a46566f 100644 --- a/packages/SubstratumService/Android.mk +++ b/packages/SubstratumService/Android.mk @@ -21,10 +21,7 @@ LOCAL_MODULE_TAGS := optional LOCAL_SRC_FILES := $(call all-java-files-under, src) LOCAL_PROGUARD_ENABLED := disabled -LOCAL_REQUIRED_MODULES := \ - projekt.substratum.theme.xml \ - substratum_theme.xml - +LOCAL_REQUIRED_MODULES := projekt.substratum.theme.xml LOCAL_PACKAGE_NAME := SubstratumService LOCAL_PRIVATE_PLATFORM_APIS := true LOCAL_CERTIFICATE := platform diff --git a/packages/SubstratumService/AndroidManifest.xml b/packages/SubstratumService/AndroidManifest.xml index 06341d2d0fc..b2baf58d7f1 100644 --- a/packages/SubstratumService/AndroidManifest.xml +++ b/packages/SubstratumService/AndroidManifest.xml @@ -27,7 +27,6 @@ - Date: Fri, 22 Mar 2019 10:35:54 +0000 Subject: [PATCH 09/41] Revert "SubstratumService: allow CHANGE_OVERLAY_PACKAGES permission" This reverts commit db915695cfecce5dd99a832aeda174f28fc34996. Signed-off-by: sayan7848 --- packages/SubstratumService/AndroidManifest.xml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/SubstratumService/AndroidManifest.xml b/packages/SubstratumService/AndroidManifest.xml index b2baf58d7f1..d899e1d2168 100644 --- a/packages/SubstratumService/AndroidManifest.xml +++ b/packages/SubstratumService/AndroidManifest.xml @@ -21,12 +21,11 @@ + android:versionCode="1" + android:versionName="one" > - Date: Fri, 22 Mar 2019 10:38:38 +0000 Subject: [PATCH 10/41] Revert "base: Introduce SubstratumService" This reverts commit 5251d7b6b3e003f7fd23b683d947de14dcfc4d82. Signed-off-by: sayan7848 --- Android.bp | 2 - .../substratum/ISubstratumService.aidl | 144 --- core/java/android/provider/Settings.java | 7 - .../substratum/ISubstratumHelperService.aidl | 23 - core/res/AndroidManifest.xml | 3 - data/etc/Android.mk | 8 - data/etc/projekt.substratum.theme.xml | 25 - .../applications/ApplicationsState.java | 1 + packages/SubstratumService/Android.mk | 31 - .../SubstratumService/AndroidManifest.xml | 44 - .../service/SubstratumHelperService.java | 140 -- packages/SystemUI/AndroidManifest.xml | 10 - .../systemui/SoundRefreshReceiver.java | 34 - .../systemui/SysuiRestartReceiver.java | 9 +- .../keyguard/KeyguardViewMediator.java | 18 - .../android/server/substratum/SoundUtils.java | 229 ---- .../server/substratum/SubstratumService.java | 1132 ----------------- .../java/com/android/server/SystemServer.java | 6 - 18 files changed, 2 insertions(+), 1864 deletions(-) delete mode 100644 core/java/android/content/substratum/ISubstratumService.aidl delete mode 100644 core/java/com/android/internal/substratum/ISubstratumHelperService.aidl delete mode 100644 data/etc/projekt.substratum.theme.xml delete mode 100644 packages/SubstratumService/Android.mk delete mode 100644 packages/SubstratumService/AndroidManifest.xml delete mode 100644 packages/SubstratumService/src/android/substratum/service/SubstratumHelperService.java delete mode 100644 packages/SystemUI/src/com/android/systemui/SoundRefreshReceiver.java delete mode 100644 services/core/java/com/android/server/substratum/SoundUtils.java delete mode 100644 services/core/java/com/android/server/substratum/SubstratumService.java diff --git a/Android.bp b/Android.bp index 07c80efc891..f3e0428585c 100644 --- a/Android.bp +++ b/Android.bp @@ -146,7 +146,6 @@ java_library { "core/java/android/content/pm/dex/IArtManager.aidl", "core/java/android/content/pm/dex/ISnapshotRuntimeProfileCallback.aidl", "core/java/android/content/pm/permission/IRuntimePermissionPresenter.aidl", - "core/java/android/content/substratum/ISubstratumService.aidl", "core/java/android/database/IContentObserver.aidl", ":libcamera_client_aidl", ":libcamera_client_framework_aidl", @@ -394,7 +393,6 @@ java_library { "core/java/com/android/internal/os/IShellCallback.aidl", "core/java/com/android/internal/statusbar/IStatusBar.aidl", "core/java/com/android/internal/statusbar/IStatusBarService.aidl", - "core/java/com/android/internal/substratum/ISubstratumHelperService.aidl", "core/java/com/android/internal/textservice/ISpellCheckerService.aidl", "core/java/com/android/internal/textservice/ISpellCheckerServiceCallback.aidl", "core/java/com/android/internal/textservice/ISpellCheckerSession.aidl", diff --git a/core/java/android/content/substratum/ISubstratumService.aidl b/core/java/android/content/substratum/ISubstratumService.aidl deleted file mode 100644 index da71ba326db..00000000000 --- a/core/java/android/content/substratum/ISubstratumService.aidl +++ /dev/null @@ -1,144 +0,0 @@ -/* - * Copyright (C) 2018 Projekt Substratum - * - * 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 android.content.substratum; - -interface ISubstratumService { - - /** - * Install a list of specified overlay packages - * - * @param paths Filled in with a list of path names for packages to be installed from. - */ - void installOverlay(in List paths); - - /** - * Uninstall a list of specified overlay packages - * - * @param packages Filled in with a list of path names for packages to be installed from. - * @param restartUi Flag to automatically restart the SystemUI. - */ - void uninstallOverlay(in List packages, boolean restartUi); - - /** - * Switch the state of specified overlay packages - * - * @param packages Filled in with a list of package names to be switched. - * @param enable Whether to enable the specified overlays. - * @param restartUi Flag to automatically restart the SystemUI. - */ - void switchOverlay(in List packages, boolean enable, boolean restartUi); - - /** - * Change the priority of a specified list of overlays - * - * @param packages Filled in with a list of package names to be reordered. - * @param restartUi Flag to automatically restart the SystemUI. - */ - void setPriority(in List packages, boolean restartUi); - - /** - * Restart SystemUI - */ - void restartSystemUI(); - - /** - * Copy Method - * - * @param source Path of the source file. - * @param destination Path of the source file to be copied to. - */ - void copy(String source, String destination); - - /** - * Move Method - * - * @param source Path of the source file. - * @param destination Path of the source file to be moved to. - */ - void move(String source, String destination); - - /** - * Create Directory Method - * - * @param destination Path of the created destination folder. - */ - void mkdir(String destination); - - /** - * Delete Directory Method - * - * @param destination Path of the directory to be deleted. - * @param withParent Flag to automatically delete the folder encompassing the folder. - */ - void deleteDirectory(String directory, boolean withParent); - - /** - * Apply a specified bootanimation - * - * @param name Path to extract the bootanimation archive from. - */ - void applyBootanimation(String name); - - /** - * Apply a specified font pack - * - * @param name Path to extract the font archive from. - */ - void applyFonts(String pid, String fileName); - - /** - * Apply a specified sound pack - * - * @param name Path to extract the sounds archive from. - */ - void applySounds(String pid, String fileName); - - /** - * Profile Applicator - * - * @param enable Filled in with a list of package names to be enabled. - * @param disable Filled in with a list of package names to be disabled. - * @param name Name of the profile to be applied. - * @param restartUi Flag to automatically restart the SystemUI. - */ - void applyProfile(in List enable, in List disable, String name, - boolean restartUi); - - /** - * Apply a specified shutdownanimation - * - * @param name Path to extract the shutdown archive from. - * Use null to clear applied custom shutdown - */ - void applyShutdownAnimation(String name); - - /** - * Returns information about all installed overlay packages for the - * specified user. If there are no installed overlay packages for this user, - * an empty map is returned (i.e. null is never returned). The returned map is a - * mapping of target package names to lists of overlays. Each list for a - * given target package is sorted in priority order, with the overlay with - * the highest priority at the end of the list. - * - * @param uid The user to get the OverlayInfos for. - * @return A Map> with target package names - * mapped to lists of overlays; if no overlays exist for the - * requested user, an empty map is returned. - */ - Map getAllOverlays(in int uid); -} - diff --git a/core/java/android/provider/Settings.java b/core/java/android/provider/Settings.java index a37b7dea8e2..05bc6beca60 100644 --- a/core/java/android/provider/Settings.java +++ b/core/java/android/provider/Settings.java @@ -10610,13 +10610,6 @@ public boolean validate(@Nullable String value) { */ public static final String AMBIENT_VISUALIZER_ENABLED = "ambient_visualizer"; - /** - * Force authorize Substratum (or equivalent) frontend calling packages by ThemeInterfacer - * The value is boolean (1 or 0). - * @hide - */ - public static final String FORCE_AUTHORIZE_SUBSTRATUM_PACKAGES = "force_authorize_substratum_packages"; - /** * Hide lockscreen shortcuts on secure lock screens * diff --git a/core/java/com/android/internal/substratum/ISubstratumHelperService.aidl b/core/java/com/android/internal/substratum/ISubstratumHelperService.aidl deleted file mode 100644 index 7d6ac0aa176..00000000000 --- a/core/java/com/android/internal/substratum/ISubstratumHelperService.aidl +++ /dev/null @@ -1,23 +0,0 @@ -/* - * Copyright (C) 2018 Projekt Substratum - * - * 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.substratum; - -oneway interface ISubstratumHelperService { - void applyBootAnimation(); - void applyShutdownAnimation(); - void applyProfile(in String name); -} diff --git a/core/res/AndroidManifest.xml b/core/res/AndroidManifest.xml index fc968f848cb..420fffbb712 100644 --- a/core/res/AndroidManifest.xml +++ b/core/res/AndroidManifest.xml @@ -608,9 +608,6 @@ - - - diff --git a/data/etc/Android.mk b/data/etc/Android.mk index 89c10d92620..936ad22d4fc 100644 --- a/data/etc/Android.mk +++ b/data/etc/Android.mk @@ -47,11 +47,3 @@ LOCAL_MODULE_CLASS := ETC LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/sysconfig LOCAL_SRC_FILES := $(LOCAL_MODULE) include $(BUILD_PREBUILT) - -include $(CLEAR_VARS) -LOCAL_MODULE := projekt.substratum.theme.xml -LOCAL_MODULE_CLASS := ETC -LOCAL_MODULE_TAGS := optional -LOCAL_MODULE_PATH := $(TARGET_OUT_ETC)/permissions -LOCAL_SRC_FILES := $(LOCAL_MODULE) -include $(BUILD_PREBUILT) diff --git a/data/etc/projekt.substratum.theme.xml b/data/etc/projekt.substratum.theme.xml deleted file mode 100644 index 8ac5a9af302..00000000000 --- a/data/etc/projekt.substratum.theme.xml +++ /dev/null @@ -1,25 +0,0 @@ - - - - - - - - - - diff --git a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java index 9c94a574742..78d17dbe1de 100644 --- a/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java +++ b/packages/SettingsLib/src/com/android/settingslib/applications/ApplicationsState.java @@ -1631,6 +1631,7 @@ public boolean filterApp(AppEntry entry) { return false; } }; + public static final AppFilter FILTER_DISABLED = new AppFilter() { @Override public void init() { diff --git a/packages/SubstratumService/Android.mk b/packages/SubstratumService/Android.mk deleted file mode 100644 index 2271a46566f..00000000000 --- a/packages/SubstratumService/Android.mk +++ /dev/null @@ -1,31 +0,0 @@ -# -# Copyright (C) 2018 Projekt Substratum -# -# Licensed under the Apache License, Version 2.0 (the "License"); -# you may not use this file except in compliance with the License. -# You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. -# - -LOCAL_PATH := $(call my-dir) -include $(CLEAR_VARS) - -LOCAL_MODULE_TAGS := optional - -LOCAL_SRC_FILES := $(call all-java-files-under, src) -LOCAL_PROGUARD_ENABLED := disabled -LOCAL_REQUIRED_MODULES := projekt.substratum.theme.xml -LOCAL_PACKAGE_NAME := SubstratumService -LOCAL_PRIVATE_PLATFORM_APIS := true -LOCAL_CERTIFICATE := platform -LOCAL_PRIVILEGED_MODULE := true - -include $(BUILD_PACKAGE) - diff --git a/packages/SubstratumService/AndroidManifest.xml b/packages/SubstratumService/AndroidManifest.xml deleted file mode 100644 index d899e1d2168..00000000000 --- a/packages/SubstratumService/AndroidManifest.xml +++ /dev/null @@ -1,44 +0,0 @@ - - - - - - - - - - - - - - - - - - - - diff --git a/packages/SubstratumService/src/android/substratum/service/SubstratumHelperService.java b/packages/SubstratumService/src/android/substratum/service/SubstratumHelperService.java deleted file mode 100644 index fe0b5542164..00000000000 --- a/packages/SubstratumService/src/android/substratum/service/SubstratumHelperService.java +++ /dev/null @@ -1,140 +0,0 @@ -/* - * Copyright (C) 2018 Projekt Substratum - * - * 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 android.substratum.service; - -import android.app.Service; -import android.content.Intent; -import android.os.Binder; -import android.os.Environment; -import android.os.FileUtils; -import android.os.IBinder; -import android.os.Process; -import android.os.SELinux; -import android.util.Log; - -import com.android.internal.substratum.ISubstratumHelperService; - -import java.io.File; - -public class SubstratumHelperService extends Service { - private static final String TAG = "SubstratumService"; - - private final File EXTERNAL_CACHE_DIR = - new File(Environment.getExternalStorageDirectory(), ".substratum"); - private final File SYSTEM_THEME_DIR = new File(Environment.getDataSystemDirectory(), "theme"); - - ISubstratumHelperService mISubstratumHelperService = new ISubstratumHelperService.Stub() { - @Override - public void applyBootAnimation() { - if (!isAuthorized(Binder.getCallingUid())) return; - - File src = new File(EXTERNAL_CACHE_DIR, "bootanimation.zip"); - File dst = new File(SYSTEM_THEME_DIR, "bootanimation.zip"); - int perms = FileUtils.S_IRWXU | FileUtils.S_IRGRP | FileUtils.S_IROTH; - - if (dst.exists()) dst.delete(); - FileUtils.copyFile(src, dst); - FileUtils.setPermissions(dst, perms, -1, -1); - SELinux.restorecon(dst); - src.delete(); - } - - @Override - public void applyShutdownAnimation() { - if (!isAuthorized(Binder.getCallingUid())) return; - - File src = new File(EXTERNAL_CACHE_DIR, "shutdownanimation.zip"); - File dst = new File(SYSTEM_THEME_DIR, "shutdownanimation.zip"); - int perms = FileUtils.S_IRWXU | FileUtils.S_IRGRP | FileUtils.S_IROTH; - - if (dst.exists()) dst.delete(); - FileUtils.copyFile(src, dst); - FileUtils.setPermissions(dst, perms, -1, -1); - SELinux.restorecon(dst); - src.delete(); - } - - @Override - public void applyProfile(String name) { - if (!isAuthorized(Binder.getCallingUid())) return; - - FileUtils.deleteContents(SYSTEM_THEME_DIR); - - File profileDir = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + - "/substratum/profiles/" + name + "/theme"); - if (profileDir.exists()) { - File profileFonts = new File(profileDir, "fonts"); - if (profileFonts.exists()) { - File dst = new File(SYSTEM_THEME_DIR, "fonts"); - copyDir(profileFonts, dst); - } - - File profileSounds = new File(profileDir, "audio"); - if (profileSounds.exists()) { - File dst = new File(SYSTEM_THEME_DIR, "audio"); - copyDir(profileSounds, dst); - } - - File profileBootAnimation = new File(profileDir, "bootanimation.zip"); - if (profileBootAnimation.exists()) { - File dst = new File(SYSTEM_THEME_DIR, "bootanimation.zip"); - FileUtils.copyFile(profileBootAnimation, dst); - int perms = FileUtils.S_IRWXU | FileUtils.S_IRGRP | FileUtils.S_IROTH; - FileUtils.setPermissions(dst, perms, -1, -1); - } - - File profileShutdownAnimation = new File(profileDir, "shutdownanimation.zip"); - if (profileShutdownAnimation.exists()) { - File dst = new File(SYSTEM_THEME_DIR, "shutdownanimation.zip"); - FileUtils.copyFile(profileShutdownAnimation, dst); - int perms = FileUtils.S_IRWXU | FileUtils.S_IRGRP | FileUtils.S_IROTH; - FileUtils.setPermissions(dst, perms, -1, -1); - } - - SELinux.restorecon(SYSTEM_THEME_DIR); - } - } - - private boolean isAuthorized(int uid) { - return Process.SYSTEM_UID == uid; - } - - private boolean copyDir(File src, File dst) { - File[] files = src.listFiles(); - boolean success = true; - - if (files != null) { - for (File file : files) { - File newFile = new File(dst, file.getName()); - if (file.isDirectory()) { - success &= copyDir(file, newFile); - } else { - success &= FileUtils.copyFile(file, newFile); - } - } - } else { - // not a directory - success = false; - } - return success; - } - }; - - @Override - public IBinder onBind(Intent intent) { - return mISubstratumHelperService.asBinder(); - } -} diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 77caced598d..90ea2c1196f 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -318,16 +318,6 @@ - - - - - - - - - App Picker + Show battery percent + Force show battery percent in status bar on charging + diff --git a/packages/SystemUI/res/xml/lockscreen_settings.xml b/packages/SystemUI/res/xml/lockscreen_settings.xml index 1e7d266cc5c..bdd98c574bf 100644 --- a/packages/SystemUI/res/xml/lockscreen_settings.xml +++ b/packages/SystemUI/res/xml/lockscreen_settings.xml @@ -39,4 +39,10 @@ android:title="@string/lockscreen_unlock_right" sysui:defValue="true" /> + + 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 6722dfd9656..255929d28ea 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/KeyguardStatusBarView.java @@ -65,6 +65,7 @@ import com.android.systemui.statusbar.policy.UserInfoController.OnUserInfoChangedListener; import com.android.systemui.statusbar.policy.UserInfoControllerImpl; import com.android.systemui.statusbar.policy.UserSwitcherController; +import com.android.systemui.tuner.TunerService; /** * The header group on Keyguard. @@ -102,6 +103,11 @@ public class KeyguardStatusBarView extends RelativeLayout private ViewGroup mStatusIconArea; private int mLayoutState = LAYOUT_NONE; + private boolean mMultiSwitchEnabled; + + // tuner switch + private static final String KEYGUARD_SHOW_PERCENT_ON_CHARGING = "sysui_keyguard_battery_percent"; + /** * Draw this many pixels into the left/right side of the cutout to optimally use the space */ @@ -215,6 +221,10 @@ private void updateVisibilities() { mMultiUserSwitch.setVisibility(View.GONE); } } + + final boolean showPercentOnCharging = Dependency.get(TunerService.class) + .getValue(KEYGUARD_SHOW_PERCENT_ON_CHARGING, 1) == 1; + if (mCarrierLabel != null) { if (mShowCarrierLabel == 1 || mShowCarrierLabel == 3) { mCarrierLabel.setVisibility(mHideContents ? View.INVISIBLE : View.VISIBLE); @@ -224,7 +234,7 @@ private void updateVisibilities() { mCarrierLabel.setSelected(false); } } - mBatteryView.setForceShowPercent(mBatteryCharging && mShowPercentAvailable); + mBatteryView.setForceShowPercent(showPercentOnCharging && mBatteryCharging && mShowPercentAvailable); } private void updateSystemIconsLayoutParams() { From 51192f9a6715b3b04c0810bfb108403bcf417836 Mon Sep 17 00:00:00 2001 From: maxwen Date: Wed, 13 Feb 2019 00:13:13 +0100 Subject: [PATCH 19/41] base: SystemUI: tuner: keyguard show charging watt Change-Id: I80c0f6d0551cc6ae792e4b8238ca379fef697882 Signed-off-by: sayan7848 --- packages/SystemUI/res/values/custom_strings.xml | 3 +++ packages/SystemUI/res/xml/lockscreen_settings.xml | 6 ++++++ .../statusbar/KeyguardIndicationController.java | 14 ++++++++++++-- 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/res/values/custom_strings.xml b/packages/SystemUI/res/values/custom_strings.xml index 0e64ba20468..cdefe553526 100644 --- a/packages/SystemUI/res/values/custom_strings.xml +++ b/packages/SystemUI/res/values/custom_strings.xml @@ -414,4 +414,7 @@ Show battery percent Force show battery percent in status bar on charging + Show charging watt + Show charging watt value in mW + diff --git a/packages/SystemUI/res/xml/lockscreen_settings.xml b/packages/SystemUI/res/xml/lockscreen_settings.xml index bdd98c574bf..3c77965046a 100644 --- a/packages/SystemUI/res/xml/lockscreen_settings.xml +++ b/packages/SystemUI/res/xml/lockscreen_settings.xml @@ -45,4 +45,10 @@ android:summary="@string/tuner_keyguard_battery_percent_summary" sysui:defValue="true" /> + + diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 9fbab5d64f6..435f2d1bdb9 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -54,6 +54,7 @@ import com.android.systemui.statusbar.phone.LockIcon; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; import com.android.systemui.statusbar.policy.UserInfoController; +import com.android.systemui.tuner.TunerService; import com.android.systemui.util.wakelock.SettableWakeLock; import com.android.systemui.util.wakelock.WakeLock; @@ -70,7 +71,6 @@ public class KeyguardIndicationController { private static final String TAG = "KeyguardIndication"; - private static final boolean DEBUG_CHARGING_SPEED = false; private static final int MSG_HIDE_TRANSIENT = 1; private static final int MSG_CLEAR_FP_MSG = 2; @@ -113,6 +113,9 @@ public class KeyguardIndicationController { private final DevicePolicyManager mDevicePolicyManager; private boolean mDozing; + // omni additions + private static final String KEYGUARD_SHOW_WATT_ON_CHARGING = "sysui_keyguard_show_watt"; + /** * Creates a new KeyguardIndicationController and registers callbacks. */ @@ -321,6 +324,11 @@ protected final void updateIndication(boolean animate) { mTextView.switchIndication(mTransientIndication); } else if (mPowerPluggedIn) { String indication = computePowerIndication(); + final boolean showWattOnCharging = Dependency.get(TunerService.class) + .getValue(KEYGUARD_SHOW_WATT_ON_CHARGING, 0) == 1; + if (showWattOnCharging) { + indication += ", " + (mChargingWattage / 1000) + " mW"; + } if (animate) { animateText(mTextView, indication); } else { @@ -363,7 +371,9 @@ protected final void updateIndication(boolean animate) { mTextView.setTextColor(mInitialTextColor); } else if (mPowerPluggedIn) { String indication = computePowerIndication(); - if (DEBUG_CHARGING_SPEED) { + final boolean showWattOnCharging = Dependency.get(TunerService.class) + .getValue(KEYGUARD_SHOW_WATT_ON_CHARGING, 0) == 1; + if (showWattOnCharging) { indication += ", " + (mChargingWattage / 1000) + " mW"; } mTextView.setTextColor(mInitialTextColor); From b7f4366b42069756239dab13fc0c6898b3c2874e Mon Sep 17 00:00:00 2001 From: maxwen Date: Wed, 13 Feb 2019 15:10:00 +0100 Subject: [PATCH 20/41] base: SystemUI: keyguard battery bar in aod on charging or always with a tuner switch Change-Id: Iaec202d98f117b7d745e44b5302367d9a8189fea Signed-off-by: sayan7848 --- .../res/drawable/battery_bar_view_bg.xml | 6 ++ .../res/drawable/battery_bar_view_fg.xml | 6 ++ .../res/layout/keyguard_bottom_area.xml | 17 ++++ .../SystemUI/res/values/custom_dimens.xml | 1 + .../SystemUI/res/values/custom_strings.xml | 10 +- .../SystemUI/res/xml/lockscreen_settings.xml | 15 ++- .../android/systemui/omni/BatteryBarView.java | 96 +++++++++++++++++++ .../KeyguardIndicationController.java | 30 +++++- 8 files changed, 174 insertions(+), 7 deletions(-) create mode 100644 packages/SystemUI/res/drawable/battery_bar_view_bg.xml create mode 100644 packages/SystemUI/res/drawable/battery_bar_view_fg.xml create mode 100644 packages/SystemUI/src/com/android/systemui/omni/BatteryBarView.java diff --git a/packages/SystemUI/res/drawable/battery_bar_view_bg.xml b/packages/SystemUI/res/drawable/battery_bar_view_bg.xml new file mode 100644 index 00000000000..22781a008f3 --- /dev/null +++ b/packages/SystemUI/res/drawable/battery_bar_view_bg.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/packages/SystemUI/res/drawable/battery_bar_view_fg.xml b/packages/SystemUI/res/drawable/battery_bar_view_fg.xml new file mode 100644 index 00000000000..6eaa7f27c75 --- /dev/null +++ b/packages/SystemUI/res/drawable/battery_bar_view_fg.xml @@ -0,0 +1,6 @@ + + + + + diff --git a/packages/SystemUI/res/layout/keyguard_bottom_area.xml b/packages/SystemUI/res/layout/keyguard_bottom_area.xml index 88137870262..93314a682b7 100644 --- a/packages/SystemUI/res/layout/keyguard_bottom_area.xml +++ b/packages/SystemUI/res/layout/keyguard_bottom_area.xml @@ -56,6 +56,23 @@ android:textAppearance="?android:attr/textAppearanceSmall" android:visibility="gone" /> + + + + + 20dp + 6dp diff --git a/packages/SystemUI/res/values/custom_strings.xml b/packages/SystemUI/res/values/custom_strings.xml index cdefe553526..ea909ccafb9 100644 --- a/packages/SystemUI/res/values/custom_strings.xml +++ b/packages/SystemUI/res/values/custom_strings.xml @@ -414,7 +414,13 @@ Show battery percent Force show battery percent in status bar on charging - Show charging watt - Show charging watt value in mW + Show battery percent + Always show battery percent in status bar on charging + Show charging watts + Show current charging watts value in mW + Show battery bar + Show battery bar on charging in always on display + Always show battery bar + Always show battery bar on charging diff --git a/packages/SystemUI/res/xml/lockscreen_settings.xml b/packages/SystemUI/res/xml/lockscreen_settings.xml index 3c77965046a..840bcd87523 100644 --- a/packages/SystemUI/res/xml/lockscreen_settings.xml +++ b/packages/SystemUI/res/xml/lockscreen_settings.xml @@ -49,6 +49,19 @@ android:key="sysui_keyguard_show_watt" android:title="@string/tuner_keyguard_show_watt_title" android:summary="@string/tuner_keyguard_show_watt_summary" - sysui:defValue="false" /> + sysui:defValue="true" /> + + + + diff --git a/packages/SystemUI/src/com/android/systemui/omni/BatteryBarView.java b/packages/SystemUI/src/com/android/systemui/omni/BatteryBarView.java new file mode 100644 index 00000000000..c6d645d21f1 --- /dev/null +++ b/packages/SystemUI/src/com/android/systemui/omni/BatteryBarView.java @@ -0,0 +1,96 @@ +/* +* Copyright (C) 2019 The OmniROM Project +* +* This program is free software: you can redistribute it and/or modify +* it under the terms of the GNU General Public License as published by +* the Free Software Foundation, either version 2 of the License, or +* (at your option) any later version. +* +* This program is distributed in the hope that it will be useful, +* but WITHOUT ANY WARRANTY; without even the implied warranty of +* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +* GNU General Public License for more details. +* +* You should have received a copy of the GNU General Public License +* along with this program. If not, see . +* +*/ +package com.android.systemui.omni; + +import android.content.Context; +import android.graphics.Canvas; +import android.graphics.drawable.GradientDrawable; +import android.util.AttributeSet; +import android.util.Log; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.LinearLayout; + +import com.android.systemui.R; + +public class BatteryBarView extends LinearLayout { + private ImageView mBarForground; + private int mMaxWidth; + private int mCurrentWidth; + private boolean mInitDone; + private int mPercent; + + private Runnable mBarUpdate = new Runnable() { + @Override + public void run() { + mCurrentWidth = (mMaxWidth / 100) * mPercent; + ViewGroup.LayoutParams barParams = mBarForground.getLayoutParams(); + barParams.width = mCurrentWidth; + mBarForground.setLayoutParams(barParams); + } + }; + public BatteryBarView(Context context) { + this(context, null); + } + + public BatteryBarView(Context context, AttributeSet attrs) { + this(context, attrs, 0); + } + + public BatteryBarView(Context context, AttributeSet attrs, int defStyleAttr) { + this(context, attrs, defStyleAttr, 0); + } + + public BatteryBarView(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { + super(context, attrs, defStyleAttr, defStyleRes); + } + + @Override + protected void onFinishInflate() { + super.onFinishInflate(); + mBarForground = findViewById(R.id.battery_bar_view_fg); + mInitDone = false; + } + + public void setBatteryPercent(int percent) { + mPercent = percent; + if (mMaxWidth != 0) { + mInitDone = true; + post(mBarUpdate); + } + } + + public void setBarColor(int color) { + GradientDrawable fg = (GradientDrawable) mBarForground.getDrawable(); + fg.setColor(color); + GradientDrawable bg = (GradientDrawable) getBackground(); + bg.setColor(color); + bg.setAlpha(128); + } + + @Override + public void draw(Canvas canvas) { + super.draw(canvas); + mMaxWidth = getWidth(); + if (!mInitDone) { + mInitDone = true; + post(mBarUpdate); + } + } +} diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index 435f2d1bdb9..d5c5eb1352c 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -50,6 +50,7 @@ import com.android.systemui.Dependency; import com.android.systemui.Interpolators; import com.android.systemui.R; +import com.android.systemui.omni.BatteryBarView; import com.android.systemui.statusbar.phone.KeyguardIndicationTextView; import com.android.systemui.statusbar.phone.LockIcon; import com.android.systemui.statusbar.phone.StatusBarKeyguardViewManager; @@ -115,6 +116,11 @@ public class KeyguardIndicationController { // omni additions private static final String KEYGUARD_SHOW_WATT_ON_CHARGING = "sysui_keyguard_show_watt"; + private static final String KEYGUARD_SHOW_BATTERY_BAR = "sysui_keyguard_show_battery_bar"; + private static final String KEYGUARD_SHOW_BATTERY_BAR_ALWAYS = "sysui_keyguard_show_battery_bar_always"; + + private BatteryBarView mBatteryBar; + /** * Creates a new KeyguardIndicationController and registers callbacks. @@ -154,6 +160,8 @@ public KeyguardIndicationController(Context context, ViewGroup indicationArea, mDevicePolicyManager = (DevicePolicyManager) context.getSystemService( Context.DEVICE_POLICY_SERVICE); + mBatteryBar = indicationArea.findViewById(R.id.battery_bar_view); + updateDisclosure(); } @@ -314,8 +322,16 @@ protected final void updateIndication(boolean animate) { } if (isReallyVisible()) { + final boolean showWattOnCharging = Dependency.get(TunerService.class) + .getValue(KEYGUARD_SHOW_WATT_ON_CHARGING, 0) == 1; + final boolean showBatteryBar = Dependency.get(TunerService.class) + .getValue(KEYGUARD_SHOW_BATTERY_BAR, 1) == 1; + final boolean showBatteryBarAlways = Dependency.get(TunerService.class) + .getValue(KEYGUARD_SHOW_BATTERY_BAR_ALWAYS, 0) == 1; + // Walk down a precedence-ordered list of what indication // should be shown based on user or device state + mBatteryBar.setVisibility(View.GONE); if (mDozing) { mTextView.setTextColor(Color.WHITE); if (!TextUtils.isEmpty(mTransientIndication)) { @@ -324,8 +340,6 @@ protected final void updateIndication(boolean animate) { mTextView.switchIndication(mTransientIndication); } else if (mPowerPluggedIn) { String indication = computePowerIndication(); - final boolean showWattOnCharging = Dependency.get(TunerService.class) - .getValue(KEYGUARD_SHOW_WATT_ON_CHARGING, 0) == 1; if (showWattOnCharging) { indication += ", " + (mChargingWattage / 1000) + " mW"; } @@ -334,6 +348,11 @@ protected final void updateIndication(boolean animate) { } else { mTextView.switchIndication(indication); } + if (showBatteryBar) { + mBatteryBar.setVisibility(View.VISIBLE); + mBatteryBar.setBatteryPercent(mBatteryLevel); + mBatteryBar.setBarColor(Color.WHITE); + } } else { // Use the high voltage symbol ⚡ (u26A1 unicode) but prevent the system // to load its emoji colored variant with the uFE0E flag @@ -371,8 +390,6 @@ protected final void updateIndication(boolean animate) { mTextView.setTextColor(mInitialTextColor); } else if (mPowerPluggedIn) { String indication = computePowerIndication(); - final boolean showWattOnCharging = Dependency.get(TunerService.class) - .getValue(KEYGUARD_SHOW_WATT_ON_CHARGING, 0) == 1; if (showWattOnCharging) { indication += ", " + (mChargingWattage / 1000) + " mW"; } @@ -382,6 +399,11 @@ protected final void updateIndication(boolean animate) { } else { mTextView.switchIndication(indication); } + if (showBatteryBar && showBatteryBarAlways) { + mBatteryBar.setVisibility(View.VISIBLE); + mBatteryBar.setBatteryPercent(mBatteryLevel); + mBatteryBar.setBarColor(mInitialTextColor); + } } else if (!TextUtils.isEmpty(trustManagedIndication) && updateMonitor.getUserTrustIsManaged(userId) && !updateMonitor.getUserHasTrust(userId)) { From cd687f8d8a8dd6eac79b78e4e1fc4a720507226f Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Sun, 17 Feb 2019 17:25:22 +0000 Subject: [PATCH 21/41] Tuner : Keep the additional settings disabled by default Change-Id: I588e971adaa3bd3c0a7547de9c2b54304ba8f7e8 Signed-off-by: sayan7848 --- packages/SystemUI/res/xml/lockscreen_settings.xml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/SystemUI/res/xml/lockscreen_settings.xml b/packages/SystemUI/res/xml/lockscreen_settings.xml index 840bcd87523..19d36ea5c8c 100644 --- a/packages/SystemUI/res/xml/lockscreen_settings.xml +++ b/packages/SystemUI/res/xml/lockscreen_settings.xml @@ -49,19 +49,19 @@ android:key="sysui_keyguard_show_watt" android:title="@string/tuner_keyguard_show_watt_title" android:summary="@string/tuner_keyguard_show_watt_summary" - sysui:defValue="true" /> + sysui:defValue="false" /> + sysui:defValue="false" /> + sysui:defValue="false" /> From 6b0f100e2e4ab163fc3b094f23965ec1420a84f6 Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 22 Mar 2019 22:17:08 +0000 Subject: [PATCH 22/41] Remove duplicate string declarations Signed-off-by: sayan7848 --- packages/SystemUI/res/values/custom_strings.xml | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/SystemUI/res/values/custom_strings.xml b/packages/SystemUI/res/values/custom_strings.xml index ea909ccafb9..eb02d7a5754 100644 --- a/packages/SystemUI/res/values/custom_strings.xml +++ b/packages/SystemUI/res/values/custom_strings.xml @@ -411,9 +411,6 @@ App Picker - Show battery percent - Force show battery percent in status bar on charging - Show battery percent Always show battery percent in status bar on charging Show charging watts From 58cf0a79b522f375780d0949dfc206ee4ea53ae7 Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 22 Mar 2019 22:17:36 +0000 Subject: [PATCH 23/41] Make SystemUI Tuner appear in Settings>System Signed-off-by: sayan7848 --- packages/SystemUI/AndroidManifest.xml | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 90ea2c1196f..04bbf35d02d 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -330,7 +330,7 @@ android:permission="android.permission.BIND_WALLPAPER" android:exported="true" /> - + --> + + + + + + + Date: Fri, 22 Mar 2019 22:52:06 +0000 Subject: [PATCH 24/41] Make power menu items follow accent Signed-off-by: sayan7848 --- core/res/res/drawable/ic_lock_bugreport.xml | 2 +- core/res/res/drawable/ic_lock_idle_alarm.xml | 2 +- core/res/res/drawable/ic_lock_lockdown.xml | 2 +- core/res/res/drawable/ic_lock_onthego.xml | 2 +- core/res/res/drawable/ic_lock_power_off.xml | 2 +- core/res/res/drawable/ic_lock_screenrecord.xml | 2 +- core/res/res/drawable/ic_restart.xml | 2 +- packages/SystemUI/res/drawable/ic_lock_lock.xml | 2 +- packages/SystemUI/res/drawable/ic_lock_settings.xml | 2 +- packages/SystemUI/res/drawable/ic_lock_torch.xml | 2 +- packages/SystemUI/res/drawable/ic_restart_advanced.xml | 2 +- packages/SystemUI/res/drawable/ic_restart_bootloader.xml | 2 +- packages/SystemUI/res/drawable/ic_restart_hot.xml | 2 +- packages/SystemUI/res/drawable/ic_restart_recovery.xml | 2 +- packages/SystemUI/res/drawable/ic_restart_ui.xml | 2 +- 15 files changed, 15 insertions(+), 15 deletions(-) diff --git a/core/res/res/drawable/ic_lock_bugreport.xml b/core/res/res/drawable/ic_lock_bugreport.xml index ebeb5320c34..3f9ed1f190d 100644 --- a/core/res/res/drawable/ic_lock_bugreport.xml +++ b/core/res/res/drawable/ic_lock_bugreport.xml @@ -18,7 +18,7 @@ android:height="24.0dp" android:viewportWidth="24.0" android:viewportHeight="24.0" - android:tint="?attr/colorControlNormal"> + android:tint="@*android:color/accent_device_default_light"> diff --git a/core/res/res/drawable/ic_lock_idle_alarm.xml b/core/res/res/drawable/ic_lock_idle_alarm.xml index e8189bd111d..f1bc0e53d29 100644 --- a/core/res/res/drawable/ic_lock_idle_alarm.xml +++ b/core/res/res/drawable/ic_lock_idle_alarm.xml @@ -16,4 +16,4 @@ + android:tint="@*android:color/accent_device_default_light" /> diff --git a/core/res/res/drawable/ic_lock_lockdown.xml b/core/res/res/drawable/ic_lock_lockdown.xml index b9685d3e7cc..73ba1086b90 100644 --- a/core/res/res/drawable/ic_lock_lockdown.xml +++ b/core/res/res/drawable/ic_lock_lockdown.xml @@ -18,7 +18,7 @@ Copyright (C) 2018 The Android Open Source Project android:height="24.0dp" android:viewportWidth="24.0" android:viewportHeight="24.0" - android:tint="?attr/colorControlNormal"> + android:tint="@*android:color/accent_device_default_light"> diff --git a/core/res/res/drawable/ic_lock_power_off.xml b/core/res/res/drawable/ic_lock_power_off.xml index cf778c77654..62a5955f3a4 100644 --- a/core/res/res/drawable/ic_lock_power_off.xml +++ b/core/res/res/drawable/ic_lock_power_off.xml @@ -18,7 +18,7 @@ android:height="24.0dp" android:viewportWidth="24.0" android:viewportHeight="24.0" - android:tint="?attr/colorControlNormal"> + android:tint="@*android:color/accent_device_default_light"> diff --git a/core/res/res/drawable/ic_lock_screenrecord.xml b/core/res/res/drawable/ic_lock_screenrecord.xml index 3435cbbddb6..86f34cf4781 100644 --- a/core/res/res/drawable/ic_lock_screenrecord.xml +++ b/core/res/res/drawable/ic_lock_screenrecord.xml @@ -19,7 +19,7 @@ android:height="24dp" android:viewportWidth="96" android:viewportHeight="96" - android:tint="?attr/colorControlNormal"> + android:tint="@*android:color/accent_device_default_light"> + android:tint="@*android:color/accent_device_default_light"> diff --git a/packages/SystemUI/res/drawable/ic_lock_lock.xml b/packages/SystemUI/res/drawable/ic_lock_lock.xml index c35edaac6dd..e45b8a03178 100644 --- a/packages/SystemUI/res/drawable/ic_lock_lock.xml +++ b/packages/SystemUI/res/drawable/ic_lock_lock.xml @@ -3,7 +3,7 @@ android:height="24dp" android:viewportWidth="24.0" android:viewportHeight="24.0" - android:tint="?android:attr/colorControlNormal"> + android:tint="@*android:color/accent_device_default_light"> diff --git a/packages/SystemUI/res/drawable/ic_lock_settings.xml b/packages/SystemUI/res/drawable/ic_lock_settings.xml index 9f3be2a4558..13280ee0071 100644 --- a/packages/SystemUI/res/drawable/ic_lock_settings.xml +++ b/packages/SystemUI/res/drawable/ic_lock_settings.xml @@ -3,7 +3,7 @@ android:height="24dp" android:viewportWidth="24.0" android:viewportHeight="24.0" - android:tint="?android:attr/colorControlNormal"> + android:tint="@*android:color/accent_device_default_light"> diff --git a/packages/SystemUI/res/drawable/ic_lock_torch.xml b/packages/SystemUI/res/drawable/ic_lock_torch.xml index 371df080984..dd0d240c9a3 100644 --- a/packages/SystemUI/res/drawable/ic_lock_torch.xml +++ b/packages/SystemUI/res/drawable/ic_lock_torch.xml @@ -19,7 +19,7 @@ android:height="32dp" android:viewportWidth="48" android:viewportHeight="48" - android:tint="?android:attr/colorControlNormal"> + android:tint="@*android:color/accent_device_default_light"> + android:tint="@*android:color/accent_device_default_light"> diff --git a/packages/SystemUI/res/drawable/ic_restart_bootloader.xml b/packages/SystemUI/res/drawable/ic_restart_bootloader.xml index 8f44419f725..9a29fa919c2 100644 --- a/packages/SystemUI/res/drawable/ic_restart_bootloader.xml +++ b/packages/SystemUI/res/drawable/ic_restart_bootloader.xml @@ -19,7 +19,7 @@ android:height="24.000000dp" android:viewportWidth="512.000000" android:viewportHeight="512.000000" - android:tint="?android:attr/colorControlNormal"> + android:tint="@*android:color/accent_device_default_light"> + android:tint="@*android:color/accent_device_default_light"> + android:tint="@*android:color/accent_device_default_light"> + android:tint="@*android:color/accent_device_default_light"> From 5f5499f9f156973c9167b32fe030803e7630ccd5 Mon Sep 17 00:00:00 2001 From: ElDainosor Date: Thu, 23 Aug 2018 01:18:35 +0000 Subject: [PATCH 25/41] base: Actually fix the padding on StatusBar Android P gets a new QS layout that looks good but it has some issues on smaller screens devices, like the rounded buttons clipping with the borders and the date not looking really good. LineageOS suggested a fix (https://review.lineageos.org/224021) but it's circumventing it because it adds padding and some people doesn't like the padding, so, instead let's apply the 8dp spacing over the affected headers and the small qs tile. Change-Id: I4c01945bfb3d9f58f10cd7deb392a2d40bc50289 Signed-off-by: VenkatVishalV Signed-off-by: sayan7848 --- .../res/layout/quick_status_bar_expanded_header.xml | 6 ++++-- packages/SystemUI/res/values/custom_dimens.xml | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml index 8e992385fa4..f4a9d4d974c 100644 --- a/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml +++ b/packages/SystemUI/res/layout/quick_status_bar_expanded_header.xml @@ -22,8 +22,8 @@ android:layout_width="match_parent" android:layout_height="@*android:dimen/quick_qs_total_height" android:layout_gravity="@integer/notification_panel_layout_gravity" - android:layout_marginStart="@dimen/quick_status_bar_margin" - android:layout_marginEnd="@dimen/quick_status_bar_margin" + android:layout_marginStart="@dimen/qs_items_padding" + android:layout_marginEnd="@dimen/qs_items_padding" android:background="@android:color/transparent" android:baselineAligned="false" android:clickable="false" @@ -47,6 +47,8 @@ android:layout_width="match_parent" android:layout_height="48dp" android:layout_below="@id/quick_qs_status_icons" + android:paddingLeft="@dimen/qs_items_padding" + android:paddingRight="@dimen/qs_items_padding" android:accessibilityTraversalAfter="@+id/date_time_group" android:accessibilityTraversalBefore="@id/expand_indicator" android:clipChildren="false" diff --git a/packages/SystemUI/res/values/custom_dimens.xml b/packages/SystemUI/res/values/custom_dimens.xml index dba9effb1b1..1c2d55eeead 100644 --- a/packages/SystemUI/res/values/custom_dimens.xml +++ b/packages/SystemUI/res/values/custom_dimens.xml @@ -126,4 +126,8 @@ 20dp 6dp + + + 8dp + From 5a1fc986430a0d061c71fc8e44141265f14be910 Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Sat, 23 Mar 2019 15:59:41 +0000 Subject: [PATCH 26/41] Revert "Make SystemUI Tuner appear in Settings>System" This reverts commit 258d168ed2dd4fb20f49484380cb3c2cc70d7332. Signed-off-by: sayan7848 --- packages/SystemUI/AndroidManifest.xml | 18 +----------------- 1 file changed, 1 insertion(+), 17 deletions(-) diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 04bbf35d02d..90ea2c1196f 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -330,7 +330,7 @@ android:permission="android.permission.BIND_WALLPAPER" android:exported="true" /> - - - - - - - - Date: Sat, 23 Mar 2019 19:08:18 +0000 Subject: [PATCH 27/41] Remove non-existent preference from tuner Signed-off-by: sayan7848 --- packages/SystemUI/res/xml/tuner_prefs.xml | 5 ----- 1 file changed, 5 deletions(-) diff --git a/packages/SystemUI/res/xml/tuner_prefs.xml b/packages/SystemUI/res/xml/tuner_prefs.xml index fb2aa9192c6..c4ba2442ab2 100644 --- a/packages/SystemUI/res/xml/tuner_prefs.xml +++ b/packages/SystemUI/res/xml/tuner_prefs.xml @@ -88,11 +88,6 @@ - - Date: Sat, 23 Mar 2019 20:32:12 +0000 Subject: [PATCH 28/41] Tuner : Add it to Settings>System Signed-off-by: sayan7848 --- packages/SystemUI/AndroidManifest.xml | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/packages/SystemUI/AndroidManifest.xml b/packages/SystemUI/AndroidManifest.xml index 90ea2c1196f..9e2e3d38192 100644 --- a/packages/SystemUI/AndroidManifest.xml +++ b/packages/SystemUI/AndroidManifest.xml @@ -337,12 +337,12 @@ android:process=":tuner" android:exported="true"> - - - - - + + + Date: Sat, 13 Apr 2019 10:25:57 +0000 Subject: [PATCH 29/41] Revert "base: SystemUI: tuner: keyguard battery percent on charging" This reverts commit 1c50f8b0f326c54d923a2f06dff5e5023f126633. Signed-off-by: sayan7848 --- packages/SystemUI/res/values/custom_strings.xml | 2 -- packages/SystemUI/res/xml/lockscreen_settings.xml | 6 ------ .../statusbar/phone/KeyguardStatusBarView.java | 12 +----------- 3 files changed, 1 insertion(+), 19 deletions(-) diff --git a/packages/SystemUI/res/values/custom_strings.xml b/packages/SystemUI/res/values/custom_strings.xml index eb02d7a5754..cd93a16b6d2 100644 --- a/packages/SystemUI/res/values/custom_strings.xml +++ b/packages/SystemUI/res/values/custom_strings.xml @@ -411,8 +411,6 @@ App Picker - Show battery percent - Always show battery percent in status bar on charging Show charging watts Show current charging watts value in mW Show battery bar diff --git a/packages/SystemUI/res/xml/lockscreen_settings.xml b/packages/SystemUI/res/xml/lockscreen_settings.xml index 19d36ea5c8c..a8bd2a5a15b 100644 --- a/packages/SystemUI/res/xml/lockscreen_settings.xml +++ b/packages/SystemUI/res/xml/lockscreen_settings.xml @@ -39,12 +39,6 @@ android:title="@string/lockscreen_unlock_right" sysui:defValue="true" /> - - Date: Thu, 28 Mar 2019 13:22:52 +0000 Subject: [PATCH 30/41] Keep battery-bar on ambient disabled by default [Test] Change-Id: I1e8802e25128fddc6dcd6e3854e8bcdc795980f4 Signed-off-by: sayan7848 --- .../systemui/statusbar/KeyguardIndicationController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java index d5c5eb1352c..0c277d85697 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/KeyguardIndicationController.java @@ -325,7 +325,7 @@ protected final void updateIndication(boolean animate) { final boolean showWattOnCharging = Dependency.get(TunerService.class) .getValue(KEYGUARD_SHOW_WATT_ON_CHARGING, 0) == 1; final boolean showBatteryBar = Dependency.get(TunerService.class) - .getValue(KEYGUARD_SHOW_BATTERY_BAR, 1) == 1; + .getValue(KEYGUARD_SHOW_BATTERY_BAR, 0) == 1; final boolean showBatteryBarAlways = Dependency.get(TunerService.class) .getValue(KEYGUARD_SHOW_BATTERY_BAR_ALWAYS, 0) == 1; From 28f82a42fcc79667846ba914d61810bf4405de0d Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Sat, 13 Apr 2019 10:58:22 +0000 Subject: [PATCH 31/41] Doze: Set Always On Display to off by default Change-Id: Ib1a2a384dc4d0061236793ecaa604f0f47bb10fc Signed-off-by: mydongistiny Signed-off-by: DennySPB Signed-off-by: sayan7848 --- .../internal/hardware/AmbientDisplayConfiguration.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java b/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java index d2ad3ab99b9..8c6772b32e5 100644 --- a/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java +++ b/core/java/com/android/internal/hardware/AmbientDisplayConfiguration.java @@ -114,8 +114,11 @@ private boolean pulseOnLongPressAvailable() { } public boolean alwaysOnEnabled(int user) { - return boolSetting(Settings.Secure.DOZE_ALWAYS_ON, user, mAlwaysOnByDefault ? 1 : 0) - && alwaysOnAvailable() && !accessibilityInversionEnabled(user); + final boolean aodEnabledDefault = false; + final boolean aodEnabled = Settings.Secure.getIntForUser(mContext.getContentResolver(), + Settings.Secure.DOZE_ALWAYS_ON, aodEnabledDefault ? 1 : 0, user) != 0; + return aodEnabled && alwaysOnAvailable() + && !accessibilityInversionEnabled(user); } public boolean isDozeEnabled() { From cb16e8bc4fc2f02a345e22a0d45b086d28486d60 Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Sat, 13 Apr 2019 14:50:53 +0000 Subject: [PATCH 32/41] Tuner : Disable AOD by default Signed-off-by: sayan7848 --- packages/SystemUI/res/xml/tuner_prefs.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/SystemUI/res/xml/tuner_prefs.xml b/packages/SystemUI/res/xml/tuner_prefs.xml index c4ba2442ab2..9659fb7aaf8 100644 --- a/packages/SystemUI/res/xml/tuner_prefs.xml +++ b/packages/SystemUI/res/xml/tuner_prefs.xml @@ -111,7 +111,7 @@ + sysui:defValue="false" /> From 3b775a59cd16dd1f61098184c8c3c97fa36a023d Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Sat, 13 Apr 2019 22:55:53 +0000 Subject: [PATCH 33/41] Match screenshot icon with accent Signed-off-by: sayan7848 --- core/res/res/drawable/ic_screenshot.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/res/res/drawable/ic_screenshot.xml b/core/res/res/drawable/ic_screenshot.xml index 8c8b2ceba6d..0b19e145e90 100644 --- a/core/res/res/drawable/ic_screenshot.xml +++ b/core/res/res/drawable/ic_screenshot.xml @@ -18,7 +18,7 @@ Copyright (C) 2018 The Android Open Source Project android:height="24.0dp" android:viewportWidth="24.0" android:viewportHeight="24.0" - android:tint="?attr/colorControlNormal"> + android:tint="@*android:color/accent_device_default_light"> From 741db337358da5a3f8fe3e8927418e28d40ecd7c Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 10 May 2019 21:05:40 +0000 Subject: [PATCH 34/41] Revert "FOD: dont show FP icons if FOD is in use" This reverts commit 6aa6203b5fd135fdbc04f21781f302fa35f0dd87. Signed-off-by: sayan7848 --- .../com/android/systemui/statusbar/phone/LockIcon.java | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java index de2c6ee1c6c..e0fee8d6c5a 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/LockIcon.java @@ -58,8 +58,6 @@ public class LockIcon extends KeyguardAffordanceView implements OnUserInfoChange private boolean mHasFaceUnlockIcon; private int mDensity; - private boolean mDisplayFODView; - private final Runnable mDrawOffTimeout = () -> update(true /* forceUpdate */); public LockIcon(Context context, AttributeSet attrs) { @@ -67,9 +65,6 @@ public LockIcon(Context context, AttributeSet attrs) { mTrustDrawable = new TrustDrawable(context); setBackground(mTrustDrawable); mUnlockMethodCache = UnlockMethodCache.getInstance(context); - mDisplayFODView = context.getResources() - .getBoolean(com.android.internal.R.bool.config_needCustomFODView); - } @Override @@ -307,13 +302,13 @@ private int getState() { KeyguardUpdateMonitor updateMonitor = KeyguardUpdateMonitor.getInstance(mContext); boolean fingerprintRunning = updateMonitor.isFingerprintDetectionRunning(); boolean unlockingAllowed = updateMonitor.isUnlockingWithFingerprintAllowed(); - if (mTransientFpError && !mDisplayFODView) { + if (mTransientFpError) { return STATE_FINGERPRINT_ERROR; } else if (mUnlockMethodCache.canSkipBouncer()) { return STATE_LOCK_OPEN; } else if (mUnlockMethodCache.isFaceUnlockRunning()) { return STATE_FACE_UNLOCK; - } else if (fingerprintRunning && unlockingAllowed && !mDisplayFODView) { + } else if (fingerprintRunning && unlockingAllowed) { return STATE_FINGERPRINT; } else { return STATE_LOCKED; From f5beed062979b7a0059850ed10d27d64990cdecc Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 10 May 2019 21:05:43 +0000 Subject: [PATCH 35/41] Revert "fod: prevent reapplying modes if theres no changes" This reverts commit d7687ca9fc0634a6cdb2700d1af716a597d8937b. Signed-off-by: sayan7848 --- .../systemui/fingerprint/FODCircleView.java | 24 ++++--------------- 1 file changed, 5 insertions(+), 19 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleView.java b/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleView.java index cdc24155bd8..2da1a524c76 100644 --- a/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleView.java +++ b/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleView.java @@ -71,7 +71,6 @@ public class FODCircleView extends ImageView implements OnTouchListener { private boolean mIsDreaming; private boolean mIsPulsing; private boolean mIsScreenOn; - private boolean mChange; public boolean viewAdded; private boolean mIsEnrolling; @@ -99,20 +98,17 @@ public void onPulsing(boolean pulsing) { public void onScreenTurnedOff() { super.onScreenTurnedOff(); mInsideCircle = false; - mChange = true; } @Override public void onStartedGoingToSleep(int why) { super.onStartedGoingToSleep(why); mInsideCircle = false; - mChange = true; } @Override public void onFinishedGoingToSleep(int why) { super.onFinishedGoingToSleep(why); - mChange = true; } @Override @@ -122,7 +118,6 @@ public void onStartedWakingUp() { mDisplayDaemon.setMode(DISPLAY_AOD_MODE, 0); } catch (RemoteException e) {} super.onStartedWakingUp(); - mChange = true; } @Override @@ -130,14 +125,12 @@ public void onScreenTurnedOn() { super.onScreenTurnedOn(); mIsScreenOn = true; mInsideCircle = false; - mChange = true; } @Override public void onKeyguardVisibilityChanged(boolean showing) { super.onKeyguardVisibilityChanged(showing); mInsideCircle = false; - mChange = true; } @Override @@ -147,13 +140,11 @@ public void onKeyguardBouncerChanged(boolean isBouncer) { } else if (!viewAdded) { show(); } - mChange = true; } @Override public void onStrongAuthStateChanged(int userId) { super.onStrongAuthStateChanged(userId); - mChange = true; } @Override @@ -164,7 +155,6 @@ public void onFingerprintAuthenticated(int userId) { mDisplayDaemon.setMode(DISPLAY_AOD_MODE, 0); mDisplayDaemon.setMode(DISPLAY_NOTIFY_PRESS, 0); } catch (RemoteException e) {} - mChange = true; } }; @@ -208,15 +198,12 @@ protected void onDraw(Canvas canvas) { mDisplayDaemon.setMode(DISPLAY_NOTIFY_PRESS, 1); } catch (RemoteException e) {} } else { - if (mChange) { - try { - mDisplayDaemon.setMode(DISPLAY_AOD_MODE, 0); - mDisplayDaemon.setMode(DISPLAY_NOTIFY_PRESS, 0); - //canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintShow); - } catch (RemoteException e) {} - } + try { + mDisplayDaemon.setMode(DISPLAY_AOD_MODE, 0); + mDisplayDaemon.setMode(DISPLAY_NOTIFY_PRESS, 0); + //canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintShow); + } catch (RemoteException e) {} } - mChange = false; } @Override @@ -295,7 +282,6 @@ public void show(boolean isEnrolling) { mParams.gravity = Gravity.TOP | Gravity.LEFT; mWM.addView(this, mParams); viewAdded = true; - mChange = true; } public void hide() { From 9c7af8c3da037b7ca4e1366ab32b836df0f4c737 Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 10 May 2019 21:05:46 +0000 Subject: [PATCH 36/41] Revert "fod: differentiate dreaming and pulse" This reverts commit 471195f1d20600770bdc05fd3dc7befc37054539. Signed-off-by: sayan7848 --- .../keyguard/KeyguardUpdateMonitor.java | 13 ----------- .../KeyguardUpdateMonitorCallback.java | 5 ----- .../systemui/fingerprint/FODCircleView.java | 22 +++++-------------- .../systemui/statusbar/phone/StatusBar.java | 4 ++-- 4 files changed, 8 insertions(+), 36 deletions(-) diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java index 29bd183e516..bf897ab4bee 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitor.java @@ -215,7 +215,6 @@ public class KeyguardUpdateMonitor implements TrustManager.TrustListener { private boolean mKeyguardOccluded; @VisibleForTesting protected boolean mTelephonyCapable; - protected boolean mPulsing; // Device provisioning state private boolean mDeviceProvisioned; @@ -1880,7 +1879,6 @@ private void sendUpdates(KeyguardUpdateMonitorCallback callback) { callback.onClockVisibilityChanged(); callback.onKeyguardVisibilityChangedRaw(mKeyguardIsVisible); callback.onTelephonyCapable(mTelephonyCapable); - callback.onPulsing(mPulsing); for (Entry data : mSimDatas.entrySet()) { final SimData state = data.getValue(); callback.onSimStateChanged(state.subId, state.slotId, state.simState); @@ -2192,15 +2190,4 @@ public void dump(FileDescriptor fd, PrintWriter pw, String[] args) { pw.println(" trustManaged=" + getUserTrustIsManaged(userId)); } } - - public boolean setPulsing(boolean pulsing) { - mPulsing = pulsing; - for (int i = 0; i < mCallbacks.size(); i++) { - KeyguardUpdateMonitorCallback cb = mCallbacks.get(i).get(); - if (cb != null) { - cb.onPulsing(mPulsing); - } - } - return mPulsing; - } } diff --git a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java index 3e9a87d00d2..2cdd4a5886c 100644 --- a/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java +++ b/packages/SystemUI/src/com/android/keyguard/KeyguardUpdateMonitorCallback.java @@ -296,9 +296,4 @@ public void onTrustAgentErrorMessage(CharSequence message) { } */ public void onLogoutEnabledChanged() { } - /** - * Called when a pulsing is received. - */ - public void onPulsing(boolean pulsing) { } - } diff --git a/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleView.java b/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleView.java index 2da1a524c76..e02a8f19587 100644 --- a/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleView.java +++ b/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleView.java @@ -78,21 +78,12 @@ public class FODCircleView extends ImageView implements OnTouchListener { KeyguardUpdateMonitor mUpdateMonitor; KeyguardUpdateMonitorCallback mMonitorCallback = new KeyguardUpdateMonitorCallback() { - @Override - public void onDreamingStateChanged(boolean dreaming) { - super.onDreamingStateChanged(dreaming); - mIsDreaming = dreaming; - mInsideCircle = false; - mChange = true; - } - - @Override - public void onPulsing(boolean pulsing) { - super.onPulsing(pulsing); - mIsPulsing = pulsing; - mInsideCircle = false; - mChange = true; - } + @Override + public void onDreamingStateChanged(boolean dreaming) { + super.onDreamingStateChanged(dreaming); + mIsDreaming = dreaming; + mInsideCircle = false; + } @Override public void onScreenTurnedOff() { @@ -188,7 +179,6 @@ public void onFingerprintAuthenticated(int userId) { protected void onDraw(Canvas canvas) { super.onDraw(canvas); //TODO w!=h? - if(mInsideCircle) { canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintFingerprint); try { diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java index a25e79f3d78..1719585ed41 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/StatusBar.java @@ -6120,14 +6120,14 @@ public void onPulseStarted() { // Otherwise just show the always-on screen. setPulsing(true); } - KeyguardUpdateMonitor.getInstance(mContext).setPulsing(true); + setOnPulseEvent(reason, true); } @Override public void onPulseFinished() { callback.onPulseFinished(); setPulsing(false); - KeyguardUpdateMonitor.getInstance(mContext).setPulsing(false); + setOnPulseEvent(-1, false); } private void setPulsing(boolean pulsing) { From 16705bd41e41790d14554a6e5ab8332434d5843e Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Fri, 10 May 2019 21:05:49 +0000 Subject: [PATCH 37/41] Revert "Initial support for OnePlus in-display fingerprint sensor" This reverts commit 339db83e8e07fcd986f1538c6145b749e7f75288. Signed-off-by: sayan7848 --- .../internal/statusbar/IStatusBar.aidl | 1 - .../internal/statusbar/IStatusBarService.aidl | 1 - core/res/res/values/custom_config.xml | 5 - core/res/res/values/custom_symbols.xml | 3 - packages/SystemUI/Android.mk | 4 +- .../res/drawable-xxhdpi/fod_icon_default.png | Bin 22493 -> 0 bytes .../res/drawable-xxhdpi/fod_icon_empty.png | Bin 137 -> 0 bytes packages/SystemUI/res/values/config.xml | 1 - .../systemui/fingerprint/FODCircleView.java | 293 ------------------ .../fingerprint/FODCircleViewImpl.java | 50 --- .../systemui/statusbar/CommandQueue.java | 21 -- services/core/Android.bp | 2 - .../fingerprint/AuthenticationClient.java | 52 +--- .../server/fingerprint/EnrollClient.java | 39 +-- .../fingerprint/FingerprintService.java | 10 +- .../statusbar/StatusBarManagerService.java | 9 - 16 files changed, 5 insertions(+), 486 deletions(-) delete mode 100644 packages/SystemUI/res/drawable-xxhdpi/fod_icon_default.png delete mode 100644 packages/SystemUI/res/drawable-xxhdpi/fod_icon_empty.png delete mode 100644 packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleView.java delete mode 100644 packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleViewImpl.java diff --git a/core/java/com/android/internal/statusbar/IStatusBar.aidl b/core/java/com/android/internal/statusbar/IStatusBar.aidl index 8d4bc0662af..2a250faaf05 100644 --- a/core/java/com/android/internal/statusbar/IStatusBar.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBar.aidl @@ -146,7 +146,6 @@ oneway interface IStatusBar void onFingerprintError(String error); // Used to hide the fingerprint dialog when the authenticationclient is stopped void hideFingerprintDialog(); - void handleInDisplayFingerprintView(boolean show, boolean isEnrolling); /** * LIQUID diff --git a/core/java/com/android/internal/statusbar/IStatusBarService.aidl b/core/java/com/android/internal/statusbar/IStatusBarService.aidl index 36d355248f7..71135b976da 100644 --- a/core/java/com/android/internal/statusbar/IStatusBarService.aidl +++ b/core/java/com/android/internal/statusbar/IStatusBarService.aidl @@ -102,7 +102,6 @@ interface IStatusBarService void onFingerprintError(String error); // Used to hide the fingerprint dialog when the authenticationclient is stopped void hideFingerprintDialog(); - void handleInDisplayFingerprintView(boolean show, boolean isEnrolling); /** * LIQUID diff --git a/core/res/res/values/custom_config.xml b/core/res/res/values/custom_config.xml index 1734ef41449..c8ee8ff1ed8 100644 --- a/core/res/res/values/custom_config.xml +++ b/core/res/res/values/custom_config.xml @@ -204,9 +204,4 @@ false - - false - - false - diff --git a/core/res/res/values/custom_symbols.xml b/core/res/res/values/custom_symbols.xml index 6d48aa4c47a..71b989b48b2 100644 --- a/core/res/res/values/custom_symbols.xml +++ b/core/res/res/values/custom_symbols.xml @@ -289,7 +289,4 @@ - - - diff --git a/packages/SystemUI/Android.mk b/packages/SystemUI/Android.mk index 4d4069861ff..2963d49daad 100644 --- a/packages/SystemUI/Android.mk +++ b/packages/SystemUI/Android.mk @@ -60,9 +60,7 @@ LOCAL_STATIC_JAVA_LIBRARIES := \ SystemUI-proto \ trail-drawing \ rebound \ - guava \ - vendor.oneplus.fingerprint.extension-V1.0-java \ - vendor.oneplus.hardware.display-V1.0-java + guava LOCAL_JAVA_LIBRARIES := telephony-common \ android.car \ diff --git a/packages/SystemUI/res/drawable-xxhdpi/fod_icon_default.png b/packages/SystemUI/res/drawable-xxhdpi/fod_icon_default.png deleted file mode 100644 index 885e348337e2be8ed5ecec0fe1a0fc9172cac444..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22493 zcmV)^K!CrAP)U;#m}fC@+z zkS?&hu&|Bo(hefy`P0<0EL z*#J**dOQyKA`gl&ev^r3=HNc=F045tIsG${&jZ=tY2}*Z!Xe{we@)`QMR< zT;lKiASd4+W9-3p_hDag#ct=(Gk@eh^v-T5Dsl$^%Tr%zApg$-82yg|wkoi40Ki#$ zc8JTE{@_qkc0agYpfG%U!#MUV{UOke@NEyoL*>n*INb!|4 ztw^?}Dho^gUgoZ9T7c#Mm$)zv0A8jO(oKM|;-(>ijEVR3TVa`6NXIV-m3&d@2HOui zR~0<^=HCGe?9~AA{{(>1{}5nB&Z-MM^-VUvH^9`X`NOQ$)ImfgX{Kjyh8*uD4jSU`LOC( zm6whNJhnLxx{hWoJA3n_4NzY0)&OxZ0OS9FTeE;glo}veS1=k4jW^C1W@+E#Va9A| zE>nTPj!k>_itU*E8B;Fy`r6Ol+uV3n`%bz#$(@qCf{n1i-XI+KvIj4^f~>4IU;*^a zew#PS)UnCqpyM)u*y>S`t&~;^u!im`c!i6;+`=EqzyIUgyyq4i4Wglj3ffTgNQ z0bM~>mZbrkF>_*@T6Yh4jg2#R1H#uPUn_qa#QP_HCX_q(+Wz=^dCs_Lzk=YWol&+VQqATl{GZ|b6+J(9%}c008=gdxm7xpZ?%XCehjl zYx>g&v?E_wp~*`0fyd>}eJAIf>hs9w#8#+ra3L?Q&ZL@;HB^vN;l*_Gw!v7Qb|s~lAffCXQPbH{-f@&-P*DPVc&wIOqa@&9Mw(tMUBxU2yHj4ckX zc*4}Y&O`x#MXCS+D1;%5$um+%!$1J1ZReqBS^b|}Ls%6LR3BBkQY1n;YN$_m^p1MT zPv83ln^9{h5FtN0q)dbXfzK=YG-tqsX>jI@jRG*aM*k{!*?)QQX=)$=Hh$cox-B-n zw@6nvWfTBnlr~h1+M@ukMa1PqKqj^zQJ;0XPZ!Pp@`2p@-u?{$oYV#3HMYYm;h~j` zPG*Vu+Hb? z|5q$74O-FC8Ueu6>G#?I6w#x!iv%?W@cxtg z(eVyejXc==JFmy;9|EAYc-$-4e!+ zu3!G~x^3Wg|G$yLg42V91WTKPOW$GB6Gj3BR7A;H-U}D^l&sjeChfVguVDrZw8$=6 z4By$pPmi^{WqY$mFHIzmmvAhOakw^n1Cz~2<|Lg^(e(fcTo$=2)1Ac7(v*8g+t+H+!M_5*LP zZMI|K9L8d-ugEh*!!WN)JE{yXhBK5)8J(5lP`;8`fQ|8}nWq5=QiSIv_x*%4{%? zFXm00eV^;k!^M>36)9-x&?-x9v1AT~p5W{HDxNxxCr5lGGr_95F=EYurJKdM>GvYu z=KRTWZP%WdW0MiRnTV=`QQsh8%+MC)%hqfGw_6B8dC-++amj6yysM1>U}|-2)l2$@ zX%CVaU9>YGI9zAW-aYM+iVZu+Uxnw*Rob z1OS+3+veY8>fY*cI&oTj?LBdB;faoS&k8J_OGBp($HHm}`0~?g)zw}2e0Nj3rahSS zv~Fyip*2Q~89=)}Oe-Ij=8Ooy>2tWxLWS*wCns-r#hNWU%jbQb8#sP4=_l0E^GL22 zOZyk-hC$1cpl$N&+}kWywSHIB zY30y@%xeX^`*ilb)5qJs|E(ARz<5>Lq^4VDe~VZq9yEFw2zK|eqjiUk1dqoNu(mWs zh*a-XWL?!>F}1t(+D--DvFEW*oAb+RFcl6bG)|TS03#AwO2E zItE401@Sx)A{vhPd?mi~7dP5|+WB44#5WFrGSNMh((_22HUj_{pi!gv20K1m2=Vb( z)5k9zFJP~Ip4r8%Rg4yjzf zEl*>SaEMlxBh>+Y<4jBaweLKnYtmpWW>LJB1+A)nO}&$-Ehq_6HQ-6$gQBmPDj4AA z^SsASEzf^&%9q|FCo3rc^BNpDTFYzH^}D84?Jwu8LMCHV6`vQ|P}rP@&UG1fE9B-@ z)MW67sUcn~iP|j=E`O3qF!#h7Rtp0F_CaO-yI(z4`R%rRG6JJ()xg9ysy#xyfLOd> zfsb+>&skBqe%nO|J(R0?F~plI^NShRH`>4Qd#-uIM=^`y5yee`a0qEf1yh!k_#Y3( z*ohbu&%2UeN0;fpaki&W)pF zwQyxJfp7>t0O0ceyra1I^*Iv|? z>(?dSbj>FifK_jq02mOqZQT7>)`;gf2Np*NypN&rPjl}u_iXo?mQ@mXp(1NI zwfk6p<)%N%p|q42|4i4Vy~)_Bo<*0LY0+h-BON4G-gu*MlC+GGDS7s*o#P%Hy#fQ66nvN1 zB^=xLOt?5;?D{Hv4}3WQmk#He67CsNxBdrDY(P3DU6Ts}fam174^MO$H#@MU@PR+j z0f4b}(Z)55)!16A2d!WJy6b%auv79E4zjC|yj$808vgmoI8(buk72}El|8v=HGuk= z!+qR)zVHv%?jzgsCe8dSP{tlip2ARdGY|#@G3Svr5lR3w!#8t zRF{cRE>zuZ7=(Sf1#1f@zx%H9+s#D~o7`hW(JCVVm@+nfIzoSK*XarlB(|mi03-;- z7oUD}u;Zi8a)VI0e-*e|(w7kc%b$h6CM~4+sk#z7B z70f)JZ(qCR*}{9D`xCSiz#{=KOI>4Aonybe%GIwkhQ2)|hr8UiEw@gWafE@1nM4)~ z;HtKgroYa)#e7wpdBL0)?B;XMjC^U7R^T0*Iu0e)hFfizc>fVUbNwK zw5e_e1>MeHq%>^G%xBxg4ZD5}mzjQ(fRPTUK#a0LG_Ym}eEiAm`MDj3%_l6cCyIz7 z>CpQ9gXCmuy`x)JA*-c5*&0>qEQt`f_a1qs@VXIS5Jn~@`Os{vt*y0Zhvd}Bqn99- zwQBa46~I|Ecl85hOTWt|P6QKMxgq_{2~!Zq#LHc}W!(%Da@ z%r9p2O@83!C7|bO%h~>FECu589{xnmvfMGRJX!eMtj+E{hcAMh+Z(K$T?@>?29eNV zT>Aedeb%{odtuoJD}VJAlzeAw-JC%Q=H>`7I%OMFq^Jr3Kn#x)-e1mRA0N zR_<-6Bce3(6+HWomY2_8x!ryI%o|021C8L8+-T1JZyLG z+*hd*L&CRuie1G0=RTXU-?gP|X6=6R4Mb?q3}Z4}(>1+v_L422-5oNbU7v{oO^`s6 zF>_)Yef`>Z10h|BP6P%3U!`mRseX@rNr6Bht)%6K9s?9YKOqBo&*c38!Mh8BhCb`R znf875sJ>0(XAnlL%$sG2OS*!*P~`k=|8plZ`j0D`w&+-3dvg$xAP-dCG$fJ-4OlWS z!5jEYcfi4M0)XAQcFXy*%?G|*xpeiNU~?UowrEOi!U6Jw_4)?MuRgpg`MsAq5ptQ1 z;H@akVqY-r}X-zeaH_fw=1!0AShLY1b${ds)x4{j}#t2;LfqR5v8hHr%oNUR|q( zPhd)OrOl47sO*<>L!KCVcF?1117LL$xevj5FH}XLA}!mYK}-YK6*w+O(POXg$x81r z%6s7Wn*d0vry-p@`#XlkjdrxN1KhmqcVB8BL-2Y5z*E?F)aSU;en_G1VtJR-wQKn#G-_le)`5)bp-Vv( z6kdDNb+6y*Z>o#{5F?Ax0RTFF`D?oOz(19son$Nl!PLG*C(_d=2X=VR7VN5mS1RPM zx}Uz@&Dy)mJAe_Zodb(O@OaM^zw^nRxx*)I3;>qSX!2rDmmA*-?QH1r)Nu?S2+g2udgypT>SVu7AHLWXcJ=l=3+n@ypAfBLHQw42nYcv{+ZJUh8M0A04$oS&&ty#mL-K-J8Q8{_K zjO6yJ_BN`z^Z7;VmC-%?X506rjK5g&n|t4h?+Zpv{EZ4|1nWr~YQ6|rbz)3i_u)X(fa_)fAWp5s z24uz)r)KAM89JY!OmqTxC_6V94z{Ep+ct%(mwBgh#6e&u^>}kHH0s_5%F8RM>lt!1 zjR^y^s?^0Mo97N-&Bo^BRwN%EgG*QaxI`nugtgw&bmO&&z(Tyj3l_IGyDJ;2FVmK` zE%)Bz9{@svm;xDy*p-)m_QL}K&}#8nTtz5b3S=Zd`%v>n*<0quKRD`Zwto5;q|?`- z8}Dh;HX>1+WfQsd)M1tzdwtY6fBR>t3t#IIpb$oC+h#+&Mq2u+3jkb2!yn%4-tpIK zfDo1?|G=6A4pY~v*~FBOXI>qpzN@gh<(ucY$#f|nPa2w^)w0DuyPTvJcxVOUWeBa}O`sR&b57tWhA@ZrtQ zt^4o84)-p>>pP1}%Qsz|xpGAQglT&~nPwM^&#J=3`p#{W8lBiMHD$_!8`!kuL0G`Z zf9_bBUMO)KIaQV9cw}BN1^^sq?P?u+%NGrEw#~CXbZ5iB?qks4z2Qh_B7ocg;4HXd z%vatc$7U(=c>^ovZ|ICU%ZR}8t1K}#nM851Yo)v*5NMPIU+>33m-bYg#5 z@kyRLD1$DbTpu|gfQWMiK!9o`4M?3ad3EZCuXiKBtB3HD!AbB+PFr5L;fsZWqD_i& zAw=Y+b6iI1!f8)xSo}z}U9WB7%H;?#KGH#!mdIl65V!E%4mAl}Etv0LJuX z)2^!Z)?;6T$=DKz7M$WvBUx23pF-pK$*JhdhH_Z?e+&S?>C!BB5C0@%%Zd>}z>C5J zuOetsF#3s?!R5}8b^{CwwSldlc}K$R*V==2`v+w}qf@7%KW6HMfukT*7ymO2DFceX}wlSBsGhO6J|1st1B-mPNxm*Di| zWRHAtbC5)o;0Izh8fEQIv}6HL*uAz8Gn%yG{Co(tRafC!yt z2>^g?juYPFr{|Zwzhe05xGq!#}T001BWNklps}S?G-XD+-nE{bA9pq6@zVdPhgr7SaEGIVDF-TIMxo?k@q{(+L zzziGjw~$D3!btuKZtofArr)19lh$+ixh}WPEq-P8p@3v(2LK!K+HPO;`KjD%?^u>y zr`J7|OIDA83fo@g5Iv>!1&mqKjn};w|LVkMF-nLLcOXxGzcI_P!+k<=17i8c)OTwA zAS5RnV-!*2y(dqv!C1a2$!s>ZS>quDT?o0Tk_p4wG62Bodv=J^r6l&pWGa%}4xBIe zVD$zK&{hXJgc*iY@IC495D2`Frxqrb4^^wEj1_NA2ZNz8>3m5;J}>}c80T z{cgT6;_;0Eo!Sm^8l;nYI>^7d`1tF)vua;+x9hjvFM%W(DOCu-0GMUslb*bP0c2#D zBaCd(R?rV#o6TikxAApA2+Jx5kyXZVb!&aKXe1?#g=2L|2azwEHv1cdz^f|50sxd? z?Wr3&Fp-krV#0A1;&$frhldIXOmZ1DBV_^kO6|KUKi^ac>J-2b5k$MXpc)HRL!g!9 zuZ&NpU(M7??k`u?65A+3fB`%0o3}r6uJg!QV6)jNpptpJ9)e@L$%Gj3nK$VEugjNw zbuW0mg)$WZ<#wvqH?H%|g0WO+INbO?NuRs`;3<9R`MrE@{yJL05x?p?x49pz)@Uug z002Jk#-B=r;?kW6F|uKj)|Am%pP4u~T%OB>OB3{sYxk8)M3jD(>*$#cpl%5imT3UV zfzb?K*MzlIIAxZBy(Wu1TXLGP-(CqSqb%+M<5Ast2uz@<;Tv9I{; zg%5xaSBhJyKt#3>LZEBaY01RFr_tO99POGW#bdNLBP8P<(N%x;fo8mKvb0hGS8#i z>DQ38C20azchg5Vg2mKMGoKUyyoXNC%D-dMFNF0BmQ6+{k<*baFKLM@-&u6RvHsU* z05Lw&36y}uvB_z3UwtsbtvjgdVxPa_9DkwkdrWX#OyGrU(`s}CQ9Lat&1ZXk=1&Y@ zx1zjWq+tmOS3zp3A)G{`a5yfTKJS?}z@lVH0wT(yg$n0B$L_-wk%N{ASIe?%nhZ4$c+s|Ef`!Z10pV8ss;O$A}i=mRK0Kipv=i^)XlR2MaDxVn# zEECtL-W`yUVblnbLWJP;Tip*=EdqpiMNczvapJ9=EYCdFFcP_n2CsMf?h3xFaxY+I zkO})&%^JVp-R|MskW7f6WdMMQ>)GKNQhY~ZOCf~7dp7?MP}hTnjUxn%A_|3Zje=I9 zKymksNJDX!_GH}@!Q+LB6>HuHW!Vu;hg9vSKs#*_5nCxqA3TMVUR%frLYbm+R~%u= zF!8nCfBBk7BTYea8oc&d3$lg$;w`FbiNIT1#ta)C#On{2F8F*o=l%c!uq1x;ZCm#a zhmtVi@LOGa^3`M;C9*cG{D(ibMMD!5nkHfG{GY|v6mX^UOL$;pf55;16-@#_AmkNp zDt>YHQP3Xlrx_-;jJY{I{^%jd+KxSZzJ|OGNXKO+Et}OPT)9ds{OovZb{6n_p0vJ5_9YmrxeYXGWCUf)tcaX5 zh1JcR_f&geP#kIM#fdDqwBjJdsI|MIbN8j;xc(&ecuNN{q)Rjg0OS*Fh0nbECj>8x zS2RUQdf}lDz-s9&iR}h`E6eRemgooeO$2q~iYn4%`($k%uCyIi^q&>&x{k}RK7L=_ z2)6919W{@K_np14LFrq_RV-YmcGt#&=K_Erl$0NkawMeiIRZe8KH<$5I)v&3GNEpz z#tzN9l1-|lgb{?mn^$}gV$x@T%CJ()VKriP^(`71F~cN~I;ObnzT%2~aQ?gts;=~9 z0Dwz;>CpyYF<+(7qyYiuxH>6MkGnRAW2K7n2^R`>$QBCjPxE5d6lxl!t)pM_KUayGP@3A;99oo4C+Zk5jkg)*=7^tnkt2OIlIWd z@A!e}LCYv=)d0w@gf&VPkZEYYbTa%YS^*3IKBx0MwfH#LuB30*q9J+wBwuH0B{m4c z6IB=2TU?PR{zjP(0>ITyOM}>qj#6;l%9r0cfqA}&K7NcbFmaalx{e*qp>E?gzB6QDN$Z1DJ_uxJ;1v~`G~2Nk_zfc zmeF!uzojoO->tp=j4tk_iCv>qGXww-Y%@MMi81z)99OdO7E_B*KZB`azgB=38}$vP zm6Rq9V!#ep4iuDnASRPvWZ_*-m8|iQFG97Fl0^kW+3f~_P;M`U(55>wATS71-NU8h z7bveMn5Y7Ph5W)2gk+10LFV4bY)pv(Xf=ZbeAd}rWWAqw{1^b3=1n_8WSzy8>Ow(* z2Rq%_62B#Kx>>Wau^}~8i%X-3EUsnXwegIOt0jj&<+d8w?mh#t8yH6%rrdw320`mz z1jI0yxM9fOV!)w{okCj2?|1T~T!2sqRAZk2f|6?!qojP1HP8qJyv_|j?@}8P|M7G2 z@r}a?$yR0EaYf}xDH9OMRUiUJdT#Q>1~HSv;z!@m6k|k$KV{3rmzHNijHVq*?e>A} zKUMQofkc5qRR91+){v_|FF`?7xMm;6TjBq6z>Y*k>&`hXrtw zQlxbJ7E2?Dyce3n>f*BUGh`+p8Kh)dwrl`VP~*hCJhfWx}b^38)~&WUmCrp*Ki5(wDg${|$@skq!^ zs2`=8AsIHlu;{#0Zzt_D{`F_mQ!^oiCLtl|xLk_037PavM$X*X`RA%|T*6YRF;?~- zQZF?2Yx73(iX(-31cKJ{qbD5!#L zadY!>{Xay?u8tUhv0CdvjIzTRWU-_JmV3#PMvy;ot_Wf>IgpWS{i&PdQazAru328Kjgm(oju-Rsxk!R+gpc`$c@NzGJI8QOa-_0I+B0o?P+bB9c}C0%VD!<-U+D zuDZ7?0~R$h{V8x2-~3z@E2j)o+ajG*UQ-W&juzoi=xA`*$~%Xwzz8_pD~y!0eU%ed zY7D@*+)<3l?k-5a9&DV|8VlgMRvJDoN4Nvq>7Cfx@x4avdwjS*ZC4{!8o= zD!f_e-L#w&xr|F}9SGG_@FD1mDvSA0G$%rj!VLQc^#427aL$+-1+L(6+vP@iSb081 z3Ao|j)k@25v-z;sSBWT^00;r%bcqnNL~@3;$eNxk(+gg2Da3HVFeaQ4($)0UIBXf! zT^Gs8_<%b8D0U0ED~_@tZ<894W^I`mVyP&aA9Rkb3*OA+)Gc$QPaLMOH%&Ne~N% z6i~Qz9Y*_$LY%QJ|s0c2R97Y6Jlui*7(P_wgFjDpv3-gVXy+?3Otp--z!6faG zqJTK6NjZuSM1lu^npNRflk}l{1{cyLWf%)qOg{G$FG0ZWST7$Am?_!nUK$4tDZ09- z2WE$3B^AAJ6(fkkSqfReP&PN_Uit)~e1?<(jQ3b@r&f;RmuYQY>6uEg@ z>`*1pRu7_)q@uWLC>j}#Rq|WKt{Tal809nI)m)<67$}7W#r{LIXe`D;%zz8ne|I1% zBnph&S1T5NJ*M+v)zT%Z$%{qi8ANkiVoVRQMq%r?^t4E&zK4a4}%yQPlZ^lq{-?*;*kasMQ21?29fLctJTtIU=sCI{t7&zATVU zNf6YyqM%ZCWC>a}j4`$Kh}DZ#-HNpnz#huKbD^OMyg(%;`EN#~j}lCBXy3!TfvEl@ z!^^D6WV#eukUs!|6`&O&cq4Ltg_Mqq!@Y$NQEPkYKq~;%VII>2I7+=y(!G!YlWQho z%f~w)gn$-P4WRr_ug^h`Cq;k&47xZ_i*bHEw)LngV-$1R zqSz;BT2?bWvkIOLiUhS-J7M|1)zpKHoBrVuvdo5>M)r&g4Kgq!ciw^dvIy&u8-iih-wGL#LVhq zoi0hb_=HA{1#E{9VggJE+c?G^Uzu_cN8sw}ba7y{vJl$O=KN)LoJ9w#*oieX~&r4iSpgfSfx6vnguSF$QD5@nFs+# zSSxYOBH-MJaG2l{rg)N$Cd7^^_y^V8GBj1WLlJd#UTgz(G!{q3aUHHgtk_QF@@@0g z9W!GAT=)Lt=OrE|m0I~viAhLo1nLClm;u-a(P+2Y@+1QPRx9b=IQ;h^3pd5}7cM1m zF;Yl-v7!lVi)N|x5JpK&a@YzXl+g>JPz7&=Fo0Xq=@ zHS7-ovYHx#vPneESY0A&7R|OyrsGDEU*IE@1t9A0E|tL*$ZSl|)YBsYt@xE;>Nlt- zFS#M+Lr7ncfc_b9@BB$pp>DfznqS+``elj&- zago@oi%5)-@?pbNCp3>gqKk|anPEs3QLI6RKpsDe*>cN0Ix;dEsYYrAtS^5iE2OIN zP%N(CKALq_vLs@{Z(#di6B8PPx_e+G4TlAx(w#)XK4<~&WDju1q=X!ufldl?EFGo9n($MiT$f$MHk2{C;@~r#grNFhrXVtN<^vSQ?S7yrebf z`6Br7#|ltS5e-XKkSw9QsEEf7SC+hxAPuWS7E?n=PuEAua|HkpJSTJZlLPF?`Zj%o zx>rGDjn}IEe0;I2M3DnbOcX*1)}#=369F+|KLqvh3(E7YiUR^lNQ?tT1*}{VBDme5 z3@eNg*_Rb$awcIEpk*LEU60J>28zy@;;!OyAw6L5& z<6GpVh~<2tSP}q0Oj>dx;R(yfg8{(isDS9Jj6%YiVmeNAA0&a-^vZK>0FWM0of-iE zz~w#z>Q-J6hkOM95PYSj$3?1uiOJi50W4Rw?-ZdWRJ7*t9ysFgRXPp=F}g(JcAPFX zaoXe-pq~30v85Fk$i9AS0Vuj;%lW9tXslZW6;iB|`|rcqTK#1)2EZjHIS}fU&AN4) zli_bNrx#aN7C|iAT?LimFqI(}6Pmzsow{_??9_-D5X#F>gR&7{#B!L_TFGrMS`B7hq^@SZr~0v?ys{c$k{Kq*OGpl)3w z1fK{ajbXCAIVT6~jz8%DEf)9-74OXd9YPygh}opXrs_lo|BdC`{OeJW2d3Z}!Y$Bc zTCo5v0I*DYMhAIQLW-M{KXh;pgxIb&lyHs!0KWW}790eGJPM~nOt?u-=tvw~q*m7l z0K9wOkv}l?8B%BL26cvjUQbTjj+QRSt%q!t2jw}!n4C9jO?vlbnqSlH@Wtczlue)a zm{4i|O|rIb?=i>c-`wx{`S)^APwAok3jeVfI3um%V1Eyoi>~=gFF;H>V+M;k_{U8m zYPN7>nH#E+1q_pv)KP4v2ZZHC7*{yQKXNEUIu(+|^*^(+Twrq^kw`lc3PgHc?W7kU zZUm9dCs0`3i}$^-kMZ!iSlJ-f@0f60My;jq_N0ItjeaaOQ}&$6{e_I3lO-$0?j47L zJnu_uEU7d>$1!Ws`Mlcg?z;HUv+c{L%oT z%lV3mw}5iuPs}YY!VLC1lX6E+>8lV?+)kRaVVL@IQ>@ozkVT|YSiGWQAGqCo$aE@1 zj_cpXi!1k%JeN%Vu-w$=I*7gvr4Imno}6>*>F}%QD44G4Jc0mFG;~36ew9l;{|OjI zkSGGdPnp_jgA(3;sSU`ZpXj+|~!x} zR?Ll`DfYs&%vs~vtZZ$TKHNWwAc11etmp8FFBHixMCJ`!C+#N7qxaO)uzZp9vyv?R#X)!d zfNjpd74(EiF5=p^elqEc53dLR&^>YRp4KsFrR1Ry0vV*$md2$L*4rB@2aJg%M%3$L z99Dg?iY8dzcApt@s~gQkaZG~6v1RK_Ddmo+uk)uSV%9Wt;Csp6 zesWU)xTYWgCM7%i$yK3FV9Hv12oQ&2xuX`r$Qzc-Cq{?~H>;i@&X?1*X*EQ$=SZ0` zC*3DbvDw_7{YRIm#)Ae< zhpm$_JZaJNuArQi%R=~yhQiX9jeUHlP+ayCqIx3`UrmPoz1~gR_tPZsmlT-;0471K zr=Ij&-(Wk1%1}^%t>M4}fnie17SBI)=ZxgG95;G&8cs~=LAETFnx+7D+FyKeeYiIz z6Q))2+1LMCCY0N@YYF56fG+8!M{b75h8EKo%$qmr(Y3&P&yxwEQWO+pWEnna3Rta1 z0uYhpFkl6@1aMy*_r&vp+jB-Uu_RF5%(ZCxP)63CZxh!p8yoVSch#mmU`p#{W>;ATC7e)|=h`79XM)uFXz3bxmmv;hyop35b zbtuTsGJ?Tish6|kYZPZ`iz!a+msJ>7<=ka=mc20jAOJWc^t?qY!3Dsi2LMy@=ZpK8 zZtDM`0HD_@GFB7>i!{b3RAR5U2)kWH0EkC=eFo?aslc)E(vdL8%m00HO7T_Ke@aMZ zkxE>2zH6|lmBH3ReJZ z!;n-XNA!Z=*f?Y|Hbx1FJ($GAo?tRH0hW!IA%*}8SjV<)@w)Y$*P2Bs=OM}o(h;0m zABO580iHEkEvhOG$>O>kP<3XS>Ufy$UGI~P4e_2BKqx3!4{o=*0YwKdy;{CWNalD=uvDgeeEX z?mkE-JO?Zj8#iI}IKujI5m;Tx(+2=|(S(<0W3Mk?A%ha2U{jL@W$f87p7QLuD8MU5 zz?`nRi?fOcjk(>Io3|2BpgktpeMOlvCx2D+mnGZAqd>(j6RE>R(l>EiHW}ZT+A{g< ziNz_U7yd{oIJ-J-{n{G>zY8W$(z-H(tO*(9@k_f3Aix*$s~S{;2xUhH06Ja&>+dI< zTFZVB0CqSIxF=0I8mTrNm2~7ja^hn#GoBtL#n#IhVZCQWh6Y^-H{H<-03Pqw?In(N zKRgQz!;4i07%RnWu62t^saw9hjqu!c5vm)Cn+5=!p8fkv3tL`2wet1ZLwtqBn*jW! zI8xrOG*O-?=a%FjEKg_@y>u)%o!@QP4B^iK)C8^dqxsz|k55<&NlAl%=+2Eo=}E~|-;Ylx`+#A4M8ziHFCAi$-S1f5~pv=%6(Rxh9>I9c?9X3YcA7fTc0hUd`KsL++zz)}e()4=6 zh_&E}^+$^931CSqy6_`1ni?n^?m*gMSweF6z_lbDDXem+0nBkHPri#XGKNV>>0}2; zr|U#zdg@>Ruo1Wj%Q+3ZHI~BamY2I-r*oFeTPDf(0NBj*TdfnuW>O9l6Q@lSvsc~QX z($7ZlXL1$@MI}GtO50z8+ntLLxG*4$eS!nL`~{)Ba=S10!V1@KJ0}(ly|Z@!wAH0L zYDJ<*&>9UdKHb7J{()t{vI&}VA`H6v5ZdTl2GY~@U^3NJz)|s|aN)95U{S zCmNtSbq4$Y2&;S`{_vrNR5UPbH3dcRx8mJp005J|UGt|hvUzZ^!m3G zQX#qa3@Ke1-k93n^yCxY%KtB4cA=IX&6)v_oN^t}M@#M*3 zMx3*t7xBXFPkx3xo;<9Gb4z8_$U1z`3xvgtKB5NTw$A}x7oq5wbK3sVs__iQ71C*7 zI@XRr*Q(i*>8Jjjq3h5gi2`uA(LGfJ5!6{+PU7jHzIPEkvpT0lOP>`jn#sE6i@~NR zA6o@_eWtSK8BsNY7@zO=?a$f9-oGaZ9Z_X)vGwZpP=xXc?D0nq|E2LBjDp{G>=>u( z+xK~;5s^WQz202=t;4^L#wm-2FL6Aq$D zzzOipvS(gDRJmruV*uEtY7&R#wPiEXhSmD%i#2g?ztn*MuTkSh3KhWg%}WB=OVASX z845k19YQjoU;+Sh;$J%+Hw^4Q2Q!RSU6&_SCu7g9T~jLt5BrYzY}zSC6!l>sDY=Vc z{)43BB9HU6X@@m{rZ`T^C!aiyIb9tx4ON`_jsd{;_uq4&sK^PD&Us=+(%$?f)an;!uI%l&l$h`T*tg^b2VagW{qdCKqW z?;#Rlj8z0JBC1lRp1j7-v>Y)SL^{gKnswJ-pPHC`d_LQ>*`pW>NKv7Hr>Vyy8?p6hW$$Z*K6VyY=?4kk75$hvHzszwzd^0j( z&8qcGO7it|p0J{uH^$&Qabiy8wbw7FXi1fz1pv;_xBo!8Pnchy2Eh3RJ1C$b%3;>) z$BvyM2m*(x^$!>^FTZN#6l&***xE*8aW$=O$(Sd13q@t$D*lKFDzT}_{Zco7HZn*~ zLAX&hMRdzHdFp}kH|E@l-R>OaTrff+5)+uM=CfRXsnA=r4;HAAjuFjEb&3=WB3jp&FXN zGL7mF0eZ&@SX|F9zig(c1_@e&dCQhNP+UT%VAJP?bLT#BPo8`vR@PR`41y>w0{t5C zg%=N)ZtQz2Vi=S9@*-gC*1pQ;5;lAP+@sap3`c1B0RXUf=bj2*)`cJSeXnkfjD~t- ze_2EZD^Os>pf#?IdHCSb#=Az<5qKVZVUIW0*}wn$8UY7A02uVsrnTjU-#QB+MyKf2DxS8N&$Hio+aqx9oK0f~fJng` zs~k{8DqGsNwRaf1wtiQZRX{OnN~o|OI^U+>olsI@(}?H@QGC8sage(Ir$@OKO&x%-x*MC)~mBny!5Wd3a4XL+rzd!3Mq=&)=g;3cz8hN7}m zVZEq)S^&T<_bEOrYrSLfC*Ql4e0pBP`NE*xO$G;9-(Xgk0|3_a{`B^yVK?0i8EO3i zV-5ugCMavc0ED9ApUdvN`&sz&&r-q>3ub9)Yij@iGdFZ-ZOh6}e*%^+MduF5RzV>!$Yt zv$=)xq7zmtaC{_~ks#Q-M~-|@c}<_?psWD)Le)*<=-dyBb^qR{*k;WqC?-jYr8{=} z(aPGjM-taYw6;d`{sWWPrp+ecAdtddzQFU;V?(?vR-C6IWHBlBj1_P}gEE+EZC*9h zbWPWVfYga5f$h&}Tk_dGzXGHV(@ zX1qeB?KC(X*|@ASo6j%I_MJJMgL5yGx$_Df{NWQe*tgFq9Z^ye#|`SAVC>#CgK5|x zldYfG6eT6KM9Ilrfn^euj*vEwC7oP^5cmoTH`(8w`8L0F>3K@-s?O=5t*r@q_Dqdm z|NYOvaq;4OHq!a?{ke0BW59qf0-qy@*4Fg(x`FJ#0dwV6>qK`)|Mx!chVSq8jJ|DK zkn0MU18}RN45m7#x4*@tr;btlDVaUx^%a%AI%Bkb?$Rvc&Wwf!F&eRbKY$GeeezFh z@6xwx^DySv6i~%VlzA4kQzWUS2x$zO4p>VD2}ls!7=XorKCtR>XUg1NtTNE@%`Jh! zRV_|r7UonwEaf*M{8{#{j)j+DV=-TmhyOv~0!lJb{yllXiU71vzd7mgjP2;3C@ z`i>V~Xl8l-#V-WJ#L>qucB%CJb8?QeONaM0Xkg5$lw&zdfu;=p1!~+lq3+IaRwJva zJvr4z@$pXgslrYzmnYs%8ucW|v+j>9^xHlo3aWFFXy&oVY>?Dvn~LnQ3*Q2-V+sGAA&dUITM_8Jry*Gla$ zV_fQK@ggapCiv)hj1f{T0jLx*r~|%vnSZ+F3JXVtIb$-Ekqh2*L7iAZ z!5T-ihLb7Ti?0c1>{0@^D)1U1Gc&ICu8m7jf~7YmG(bAk2|izuZTaVq+May*fJQ7n z*1cj;70;@YYam46(k+py%6*8&5ml%z<|I*6qDAsj!p&e6T=JpG4@ zx*P7e^F_?EaSG*w4v>_U{9MUSx4^T(doiU*BaM_FFJ1|0w`Kvo6Ts@9SY2L}ri$AbE>l=Nkc`{&dw$jBHh zMaM*)TGU?ct{nSy*F0%jykrE^rR!Y?`;)3su*vVGCBN8j8vFVuIA%G|DZXG}4Sy=NqNDx=I3oZU zEW39<%Cv0#IIiL_g})E2M@^e|K_*jetU(JTYJen1>}?J8;F5y&QUg~@iXznpQ`*t( z&oK2f9|6jHmGAw)*5$)?&#pahl@1uW2IMMRZxnjxmHN<1Dl!0o(Yo)ir%|(J4=Us? z%G4ttb^wD|jF17Uq6P>sK7RZyN4HKNfwDW$zXDo-=qezheWH$IOKxhWi{x39I)igZv?&GWIcRr8Z>Np7YfR1 zkeCpp1B5tbkOZg^bJ)xOx$8Ms@2fur?ecp3Zx{&lFD^XI%cKPG_%D}TYZ}n^1Ek|p z$O(^Fv2_I&+J`Iny$5EM^ta5PWt5{vQFYD)$&VbV#s%^UX|@l6t)|G_8#0 zDRU-pa2R;Kh2G7ZCV58R_B*Icf_(qxnzEO{g;06h?ytW+FL=Eh_1!ynLwbF>vil*G ziG`4X$*j}I{MdxvOw&eLo((@<1a+Mlgy{WWNmf?TbHVW1Ypu<5K3EFz30<^A5oNem zZMzit^cVna<=Y+4J$;Ywm6r}f)g?jr-&%}+`(gm7dkXk##~L?|tF?Lc%WOv4STdDR z8dn9%bVS53SjaD2Z+m~i9M}9s=b-A0s;J7N|3$xmE@RglH*X%vb-(&$#4slR$q?|= z$OjI}W&OYO2`5j^b9U)4CkUUd@!-Oh09+cp2-MXJhJ=l41{tsE_7-ND6w&J?bw)a$ z6an`5a`V2nPk(=rYsIQO0=!sp*(M6)SLxuGkrKnS{8$T4goTe-nj| z2(Zh0Hg~OK@rvc{IrDQsopmKZ@FbRhV;j_p*3tbJbO4|?|MJUdu2YvMFv}&VQG`@H z4AJ#<^rO6NtNrEYC&P*r`GisvOe4pa3t%oc@FI;1W&i*~;;%o9G<0tNqQIbJbwW3$ zI@d@X!Y33K{p|kfmrv~DAKyz+2hy7OK%FO0Q$Yi*b4H*pJyImU>*vnztRFSyNv%lrnuP>(52OiW3Fja+UAph@Il6d(#7$ssQaHAeb$FFtqn6UT%1&4TUQ%Rt#bm|lm=&JVa;J#3^Q z{m|aD-ulU+9;N~PU&R(vTSXD0rWFENRtwCA6H1DA3dc`vEPs9aPq2M^1%#GbC{$yG zaW&@yAp({It5s)Sy0kBQZLe_<7vD9Qv!xYasM5;XD)+coeKN%-w?)!QT)M2C*UMQN zs>=E*0GzOO(`~x;Z5{)iE|ccD>Z$~w96JOEu-jK&u~*2+`NOqg^EUTe?_`0p2}o5b zhd4~&R+q@m>fe65m0{>jw?N&@8!^Y$QYWda?*$x0F`%5UT;cBnbBV5r9u3ZaxjL&? z3~;NnzRJSKMvbhAUw%A>ZQlGL#Ik9agr$ahi8bFoP-V;e@_Z#F2XJ2Ae(&yme>rEo zcM=K;JRyP?hY4B+x_6H=PoCTjwQ6-Wla_upn9NPdCe6~&6VSG_iYf~YiU4kRmT>g& zV&|>HzYg@L4F=dNMIyXn#CWZX&ruR0<8YMssj!HIBW;_ zzy4b29z0;PhDuOXA`-sRfN&*(w>khzAU4l`znx*=fIFGg)FGH*;#68E)lE_n*QdpM zaylYeC5sS{DS^uBbvdtC4w4{^LP{W{ysC9s)ur=#3UERGdiRe%tntYc8|kRw6%W`e z8MvVWSY3MFxwAF?|Jply*C>K8j6buxxsTj>oSGAh2st5Wf{;`x)XFMFuoL_XEKC{; zA%!5=*w|V57YH^sHo?L|P7y_;U}bXHMvMuodmmwEUW=I9-PxJlT(HURJk7GRunRLk zUfz9Y=9xzi7wzfk>#R|~Li=EcuaM!2M&eI<~n zzoFjJp0!h$@-pao1X#E2+=*SA&2sI@;|2S|%vE;k@zHGofhEZ7Ooscj90brM#O@}QnPulbIEq373 z7d5jWEgY-{-1I(3GyKRh133)1y66j}n}krx`(VH|Vj0m{*ER~cx`>%JAwXtm47mTZ sua4S>G-A7vk&%&+k&%&+kx`EI7kX&ed@opI2mk;807*qoM6N<$f&@fL;{X5v diff --git a/packages/SystemUI/res/drawable-xxhdpi/fod_icon_empty.png b/packages/SystemUI/res/drawable-xxhdpi/fod_icon_empty.png deleted file mode 100644 index 9b223ed2b2ee4f003daf99e5fff75f229268f6f9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^>p+-;8A#5!bnFh0Vh->LaRt)Lt88xpDaMi@zhDN3 zXE)M-91~9$$B>F!Zx1r^0(plPeD{C*hEW8_#0~B+lzjpka`!qDNR6kfpUXO@geCx1 CW*+DO diff --git a/packages/SystemUI/res/values/config.xml b/packages/SystemUI/res/values/config.xml index f977bb9baf1..e787d25fcfa 100644 --- a/packages/SystemUI/res/values/config.xml +++ b/packages/SystemUI/res/values/config.xml @@ -349,7 +349,6 @@ com.android.systemui.globalactions.GlobalActionsComponent com.android.systemui.ScreenDecorations com.android.systemui.fingerprint.FingerprintDialogImpl - com.android.systemui.fingerprint.FODCircleViewImpl com.android.systemui.SliceBroadcastRelayHandler diff --git a/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleView.java b/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleView.java deleted file mode 100644 index e02a8f19587..00000000000 --- a/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleView.java +++ /dev/null @@ -1,293 +0,0 @@ -/** - * Copyright (C) 2019 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.systemui.fingerprint; - -import android.app.KeyguardManager; -import android.graphics.Canvas; -import android.graphics.Color; -import android.graphics.Paint; -import android.graphics.PixelFormat; -import android.content.Context; -import android.hardware.display.DisplayManager; -import android.os.PowerManager; -import android.os.RemoteException; -import android.os.ServiceManager; -import android.view.Display; -import android.view.Gravity; -import android.view.View.OnTouchListener; -import android.view.View; -import android.widget.ImageView; -import android.view.MotionEvent; -import android.view.WindowManager; -import android.util.Log; -import android.util.Slog; - -import com.android.keyguard.KeyguardUpdateMonitor; -import com.android.keyguard.KeyguardUpdateMonitorCallback; -import com.android.internal.telephony.IccCardConstants.State; -import com.android.systemui.R; - -import java.io.PrintWriter; - -import vendor.oneplus.hardware.display.V1_0.IOneplusDisplay; - -public class FODCircleView extends ImageView implements OnTouchListener { - private final int mX, mY, mW, mH; - private final Paint mPaintFingerprint = new Paint(); - private final Paint mPaintShow = new Paint(); - private IOneplusDisplay mDisplayDaemon = null; - private boolean mInsideCircle = false; - private final WindowManager.LayoutParams mParams = new WindowManager.LayoutParams(); - - private final static float UNTOUCHED_DIM = .1f; - private final static float UNTOUCHED_DOZE_DIM = .4f; - private final static float TOUCHED_DIM = .9f; - - private final int DISPLAY_AOD_MODE = 8; - private final int DISPLAY_APPLY_HIDE_AOD = 11; - private final int DISPLAY_NOTIFY_PRESS = 9; - private final int DISPLAY_SET_DIM = 10; - - private final WindowManager mWM; - - private final int mCircleX = 444; - private final int mCircleY = 1966; - private final int mCircleSize = 190; - - private boolean mIsDreaming; - private boolean mIsPulsing; - private boolean mIsScreenOn; - - public boolean viewAdded; - private boolean mIsEnrolling; - - KeyguardUpdateMonitor mUpdateMonitor; - - KeyguardUpdateMonitorCallback mMonitorCallback = new KeyguardUpdateMonitorCallback() { - @Override - public void onDreamingStateChanged(boolean dreaming) { - super.onDreamingStateChanged(dreaming); - mIsDreaming = dreaming; - mInsideCircle = false; - } - - @Override - public void onScreenTurnedOff() { - super.onScreenTurnedOff(); - mInsideCircle = false; - } - - @Override - public void onStartedGoingToSleep(int why) { - super.onStartedGoingToSleep(why); - mInsideCircle = false; - } - - @Override - public void onFinishedGoingToSleep(int why) { - super.onFinishedGoingToSleep(why); - } - - @Override - public void onStartedWakingUp() { - try { - mDisplayDaemon.setMode(DISPLAY_NOTIFY_PRESS, 0); - mDisplayDaemon.setMode(DISPLAY_AOD_MODE, 0); - } catch (RemoteException e) {} - super.onStartedWakingUp(); - } - - @Override - public void onScreenTurnedOn() { - super.onScreenTurnedOn(); - mIsScreenOn = true; - mInsideCircle = false; - } - - @Override - public void onKeyguardVisibilityChanged(boolean showing) { - super.onKeyguardVisibilityChanged(showing); - mInsideCircle = false; - } - - @Override - public void onKeyguardBouncerChanged(boolean isBouncer) { - if (viewAdded && isBouncer) { - hide(); - } else if (!viewAdded) { - show(); - } - } - - @Override - public void onStrongAuthStateChanged(int userId) { - super.onStrongAuthStateChanged(userId); - } - - @Override - public void onFingerprintAuthenticated(int userId) { - super.onFingerprintAuthenticated(userId); - mInsideCircle = false; - try { - mDisplayDaemon.setMode(DISPLAY_AOD_MODE, 0); - mDisplayDaemon.setMode(DISPLAY_NOTIFY_PRESS, 0); - } catch (RemoteException e) {} - } - }; - - FODCircleView(Context context) { - super(context); - - mX = mCircleX; - mY = mCircleY; - mW = mCircleSize; - mH = mCircleSize; - - mPaintFingerprint.setAntiAlias(true); - mPaintFingerprint.setColor(Color.GREEN); - - setImageResource(R.drawable.fod_icon_default); - - mPaintShow.setAntiAlias(true); - mPaintShow.setColor(Color.argb(0x18, 0x00, 0xff, 0x00)); - setOnTouchListener(this); - mWM = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE); - - try { - mDisplayDaemon = IOneplusDisplay.getService(); - } catch (Exception e) {} - - mUpdateMonitor = KeyguardUpdateMonitor.getInstance(context); - mUpdateMonitor.registerCallback(mMonitorCallback); - } - - @Override - protected void onDraw(Canvas canvas) { - super.onDraw(canvas); - //TODO w!=h? - if(mInsideCircle) { - canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintFingerprint); - try { - //if (mIsDreaming) { - mDisplayDaemon.setMode(DISPLAY_AOD_MODE, 2); - //} - mDisplayDaemon.setMode(DISPLAY_NOTIFY_PRESS, 1); - } catch (RemoteException e) {} - } else { - try { - mDisplayDaemon.setMode(DISPLAY_AOD_MODE, 0); - mDisplayDaemon.setMode(DISPLAY_NOTIFY_PRESS, 0); - //canvas.drawCircle(mW/2, mH/2, (float) (mW/2.0f), this.mPaintShow); - } catch (RemoteException e) {} - } - } - - @Override - public boolean onTouch(View v, MotionEvent event) { - float x = event.getAxisValue(MotionEvent.AXIS_X); - float y = event.getAxisValue(MotionEvent.AXIS_Y); - - boolean newInside = (x > 0 && x < mW) && (y > 0 && y < mW); - - if(event.getAction() == MotionEvent.ACTION_UP) { - newInside = false; - try { - setImageResource(R.drawable.fod_icon_default); - mDisplayDaemon.setMode(DISPLAY_AOD_MODE, 0); - mDisplayDaemon.setMode(DISPLAY_NOTIFY_PRESS, 0); - } catch (RemoteException e) {} - } - - if(newInside == mInsideCircle) return mInsideCircle; - - mInsideCircle = newInside; - - invalidate(); - - if(!mInsideCircle) { - //mParams.screenBrightness = .0f; - setImageResource(R.drawable.fod_icon_default); - mParams.dimAmount = mIsDreaming ? UNTOUCHED_DOZE_DIM : UNTOUCHED_DIM; - mWM.updateViewLayout(this, mParams); - return false; - } - if (event.getAction() == MotionEvent.ACTION_DOWN) { - setImageResource(R.drawable.fod_icon_empty); - mParams.dimAmount = TOUCHED_DIM; - //mParams.screenBrightness = 1.0f; - mWM.updateViewLayout(this, mParams); - } - return true; - } - - public void show() { - show(false); - } - - public void show(boolean isEnrolling) { - if (!isEnrolling && (!mUpdateMonitor.isUnlockWithFingerprintPossible(KeyguardUpdateMonitor.getCurrentUser()) || - !mUpdateMonitor.isUnlockingWithFingerprintAllowed())) { - return; - } - if(mX == -1 || mY == -1 || mW == -1 || mH == -1) return; - - mParams.x = mX; - mParams.y = mY; - - mParams.height = mW; - mParams.width = mH; - mParams.format = PixelFormat.TRANSLUCENT; - - mParams.type = WindowManager.LayoutParams.TYPE_VOLUME_OVERLAY; - mParams.setTitle("Fingerprint on display"); - mParams.flags = WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | - WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | - WindowManager.LayoutParams.FLAG_DIM_BEHIND | - WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN; - mParams.dimAmount = UNTOUCHED_DIM; - - mParams.packageName = "android"; - - setImageResource(R.drawable.fod_icon_default); - mIsEnrolling = isEnrolling; - if (mIsEnrolling) { - try { - mDisplayDaemon.setMode(DISPLAY_SET_DIM, 1); - } catch (RemoteException e) {} - } - mParams.gravity = Gravity.TOP | Gravity.LEFT; - mWM.addView(this, mParams); - viewAdded = true; - } - - public void hide() { - if(mX == -1 || mY == -1 || mW == -1 || mH == -1) return; - - try { - mDisplayDaemon.setMode(DISPLAY_AOD_MODE, 0); - mDisplayDaemon.setMode(DISPLAY_NOTIFY_PRESS, 0); - } catch (RemoteException e) {} - if (mIsEnrolling) { - try { - mDisplayDaemon.setMode(DISPLAY_SET_DIM, 0); - } catch (RemoteException e) {} - } - mInsideCircle = false; - mWM.removeView(this); - viewAdded = false; - } -} diff --git a/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleViewImpl.java b/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleViewImpl.java deleted file mode 100644 index c432d3c0266..00000000000 --- a/packages/SystemUI/src/com/android/systemui/fingerprint/FODCircleViewImpl.java +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Copyright (C) 2019 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.systemui.fingerprint; - -import android.content.pm.PackageManager; -import android.util.Log; -import android.view.View; - -import com.android.systemui.SystemUI; -import com.android.systemui.statusbar.CommandQueue; -import com.android.systemui.statusbar.CommandQueue.Callbacks; - -public class FODCircleViewImpl extends SystemUI implements CommandQueue.Callbacks { - private static final String TAG = "FODCircleViewImpl"; - private FODCircleView mfodCircleView; - - - @Override - public void start() { - if (!mContext.getPackageManager().hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)) { - return; - } - getComponent(CommandQueue.class).addCallbacks(this); - } - - @Override - public void handleInDisplayFingerprintView(boolean show, boolean isEnrolling) { - if (mfodCircleView == null) - mfodCircleView = new FODCircleView(mContext); - if (!mfodCircleView.viewAdded && show) - mfodCircleView.show(isEnrolling); - else if (mfodCircleView.viewAdded) - mfodCircleView.hide(); - } -} - diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java index 7457ab82407..20c4d2c6534 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/CommandQueue.java @@ -103,7 +103,6 @@ public class CommandQueue extends IStatusBar.Stub { private static final int MSG_TOGGLE_FLASHLIGHT = 53 << MSG_SHIFT; private static final int MSG_TOGGLE_NAVIGATION_EDITOR = 54 << MSG_SHIFT; private static final int MSG_DISPATCH_NAVIGATION_EDITOR_RESULTS = 55 << MSG_SHIFT; - private static final int MSG_IN_DISPLAY_FINGERPRINT = 56 << MSG_SHIFT; public static final int FLAG_EXCLUDE_NONE = 0; public static final int FLAG_EXCLUDE_SEARCH_PANEL = 1 << 0; @@ -176,7 +175,6 @@ default void onFingerprintAuthenticated() { } default void onFingerprintHelp(String message) { } default void onFingerprintError(String error) { } default void hideFingerprintDialog() { } - default void handleInDisplayFingerprintView(boolean show, boolean isEnrolling) { } default void toggleCameraFlash() { } default void setAutoRotate(boolean enabled) { } default void restartUI() { } @@ -617,17 +615,6 @@ public void hideFingerprintDialog() { } } - @Override - public void handleInDisplayFingerprintView(boolean show, boolean isEnrolling) { - synchronized (mLock) { - SomeArgs args = SomeArgs.obtain(); - args.arg1 = show; - args.arg2 = isEnrolling; - mHandler.obtainMessage(MSG_IN_DISPLAY_FINGERPRINT, args) - .sendToTarget(); - } - } - @Override public void toggleCameraFlash() { synchronized (mLock) { @@ -882,14 +869,6 @@ public void handleMessage(Message msg) { for (int i = 0; i < mCallbacks.size(); i++) { mCallbacks.get(i).hideFingerprintDialog(); } - break; - case MSG_IN_DISPLAY_FINGERPRINT: - for (int i = 0; i < mCallbacks.size(); i++) { - mCallbacks.get(i).handleInDisplayFingerprintView( - (boolean)((SomeArgs)msg.obj).arg1, - (boolean)((SomeArgs)msg.obj).arg2); - } - break; case MSG_SHOW_CHARGING_ANIMATION: for (int i = 0; i < mCallbacks.size(); i++) { diff --git a/services/core/Android.bp b/services/core/Android.bp index dd7996d3065..d6cde0353bd 100644 --- a/services/core/Android.bp +++ b/services/core/Android.bp @@ -44,8 +44,6 @@ java_library_static { "android.hardware.vibrator-V1.0-java", "android.hardware.configstore-V1.0-java", "android.hardware.contexthub-V1.0-java", - "vendor.oneplus.fingerprint.extension-V1.0-java", - "vendor.oneplus.hardware.display-V1.0-java", ], } diff --git a/services/core/java/com/android/server/fingerprint/AuthenticationClient.java b/services/core/java/com/android/server/fingerprint/AuthenticationClient.java index b9e376271fa..afd1a94bf50 100644 --- a/services/core/java/com/android/server/fingerprint/AuthenticationClient.java +++ b/services/core/java/com/android/server/fingerprint/AuthenticationClient.java @@ -17,8 +17,6 @@ package com.android.server.fingerprint; import android.content.Context; -import android.content.ComponentName; -import android.content.res.Resources; import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint; import android.hardware.biometrics.BiometricPrompt; import android.hardware.biometrics.IBiometricPromptReceiver; @@ -28,15 +26,12 @@ import android.os.Bundle; import android.os.IBinder; import android.os.RemoteException; -import android.content.pm.PackageManager; import android.util.Slog; import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; import com.android.internal.statusbar.IStatusBarService; -import vendor.oneplus.fingerprint.extension.V1_0.IVendorFingerprintExtensions; - /** * A class to keep track of the authentication state for a given client. */ @@ -59,12 +54,6 @@ public abstract class AuthenticationClient extends ClientMonitor { private final FingerprintManager mFingerprintManager; protected boolean mDialogDismissed; - private boolean mDisplayFODView; - private IVendorFingerprintExtensions mExtDaemon = null; - private final String mKeyguardPackage; - private static final int DISABLE_FP_LONGPRESS = 4; - private static final int ENABLE_FP_LONGPRESS = 3; - // Receives events from SystemUI and handles them before forwarding them to FingerprintDialog protected IBiometricPromptReceiver mDialogReceiver = new IBiometricPromptReceiver.Stub() { @Override // binder call @@ -107,9 +96,6 @@ public AuthenticationClient(Context context, long halDeviceId, IBinder token, mStatusBarService = statusBarService; mFingerprintManager = (FingerprintManager) getContext() .getSystemService(Context.FINGERPRINT_SERVICE); - mDisplayFODView = context.getResources().getBoolean(com.android.internal.R.bool.config_needCustomFODView); - mKeyguardPackage = ComponentName.unflattenFromString(context.getResources().getString( - com.android.internal.R.string.config_keyguardComponent)).getPackageName(); } @Override @@ -247,11 +233,6 @@ public boolean onAuthenticated(int fingerId, int groupId) { resetFailedAttempts(); onStop(); } - if(result == true && mDisplayFODView) { - try { - mStatusBarService.handleInDisplayFingerprintView(false, false); - } catch (RemoteException e) {} - } return result; } @@ -265,21 +246,6 @@ public int start() { Slog.w(TAG, "start authentication: no fingerprint HAL!"); return ERROR_ESRCH; } - - if (mDisplayFODView) { - try { - mExtDaemon = IVendorFingerprintExtensions.getService(); - Slog.w(TAG, "getOwnerString : " + isKeyguard(getOwnerString())); - - if (isKeyguard(getOwnerString())) { - mExtDaemon.updateStatus(ENABLE_FP_LONGPRESS); - } else { - mExtDaemon.updateStatus(DISABLE_FP_LONGPRESS); - } - - mStatusBarService.handleInDisplayFingerprintView(true, false); - } catch (RemoteException e) {} - } onStart(); try { final int result = daemon.authenticate(mOpId, getGroupId()); @@ -292,7 +258,7 @@ public int start() { if (DEBUG) Slog.w(TAG, "client " + getOwnerString() + " is authenticating..."); // If authenticating with system dialog, show the dialog - if (!mDisplayFODView && mBundle != null) { + if (mBundle != null) { try { mStatusBarService.showFingerprintDialog(mBundle, mDialogReceiver); } catch (RemoteException e) { @@ -306,14 +272,6 @@ public int start() { return 0; // success } - /** - * @param clientPackage - * @return true if this is keyguard package - */ - private boolean isKeyguard(String clientPackage) { - return mKeyguardPackage.equals(clientPackage); - } - @Override public int stop(boolean initiatedByClient) { if (mAlreadyCancelled) { @@ -321,12 +279,6 @@ public int stop(boolean initiatedByClient) { return 0; } - if (mDisplayFODView) { - try { - mStatusBarService.handleInDisplayFingerprintView(false, false); - } catch (RemoteException e) {} - } - onStop(); IBiometricsFingerprint daemon = getFingerprintDaemon(); if (daemon == null) { @@ -348,7 +300,7 @@ public int stop(boolean initiatedByClient) { // dialog, we do not need to hide it since it's already hidden. // If the device is in lockout, don't hide the dialog - it will automatically hide // after BiometricPrompt.HIDE_DIALOG_DELAY - if (!mDisplayFODView && mBundle != null && !mDialogDismissed && !mInLockout) { + if (mBundle != null && !mDialogDismissed && !mInLockout) { try { mStatusBarService.hideFingerprintDialog(); } catch (RemoteException e) { diff --git a/services/core/java/com/android/server/fingerprint/EnrollClient.java b/services/core/java/com/android/server/fingerprint/EnrollClient.java index 6b78a9ff67b..c9efcf2fd68 100644 --- a/services/core/java/com/android/server/fingerprint/EnrollClient.java +++ b/services/core/java/com/android/server/fingerprint/EnrollClient.java @@ -17,7 +17,6 @@ package com.android.server.fingerprint; import android.content.Context; -import android.content.res.Resources; import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint; import android.hardware.fingerprint.FingerprintManager; import android.hardware.fingerprint.IFingerprintServiceReceiver; @@ -27,12 +26,9 @@ import com.android.internal.logging.MetricsLogger; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; -import com.android.internal.statusbar.IStatusBarService; import java.util.Arrays; -import vendor.oneplus.fingerprint.extension.V1_0.IVendorFingerprintExtensions; - /** * A class to keep track of the enrollment state for a given client. */ @@ -40,20 +36,12 @@ public abstract class EnrollClient extends ClientMonitor { private static final long MS_PER_SEC = 1000; private static final int ENROLLMENT_TIMEOUT_MS = 60 * 1000; // 1 minute private byte[] mCryptoToken; - private boolean mDisplayFODView; - private IStatusBarService mStatusBarService; - private IVendorFingerprintExtensions mExtDaemon = null; - private static final int DISABLE_FP_LONGPRESS = 4; - private static final int RESUME_FP_ENROLL = 8; - private static final int FINISH_FP_ENROLL = 10; public EnrollClient(Context context, long halDeviceId, IBinder token, IFingerprintServiceReceiver receiver, int userId, int groupId, byte [] cryptoToken, - boolean restricted, String owner, IStatusBarService statusBarService) { + boolean restricted, String owner) { super(context, halDeviceId, token, receiver, userId, groupId, restricted, owner); mCryptoToken = Arrays.copyOf(cryptoToken, cryptoToken.length); - mDisplayFODView = context.getResources().getBoolean(com.android.internal.R.bool.config_needCustomFODView); - mStatusBarService = statusBarService; } @Override @@ -81,13 +69,6 @@ private boolean sendEnrollResult(int fpId, int groupId, int remaining) { MetricsLogger.action(getContext(), MetricsEvent.ACTION_FINGERPRINT_ENROLL); try { receiver.onEnrollResult(getHalDeviceId(), fpId, groupId, remaining); - if(remaining == 0 && mDisplayFODView) { - try { - mExtDaemon = IVendorFingerprintExtensions.getService(); - mExtDaemon.updateStatus(FINISH_FP_ENROLL); - mStatusBarService.handleInDisplayFingerprintView(false, true); - } catch (RemoteException e) {} - } return remaining == 0; } catch (RemoteException e) { Slog.w(TAG, "Failed to notify EnrollResult:", e); @@ -102,17 +83,6 @@ public int start() { Slog.w(TAG, "enroll: no fingerprint HAL!"); return ERROR_ESRCH; } - Slog.w(TAG, "Starting enroll"); - - if (mDisplayFODView) { - try { - mExtDaemon = IVendorFingerprintExtensions.getService(); - mExtDaemon.updateStatus(RESUME_FP_ENROLL); - mStatusBarService.handleInDisplayFingerprintView(true, true); - mExtDaemon.updateStatus(DISABLE_FP_LONGPRESS); - } catch (RemoteException e) {} - } - final int timeout = (int) (ENROLLMENT_TIMEOUT_MS / MS_PER_SEC); try { final int result = daemon.enroll(mCryptoToken, getGroupId(), timeout); @@ -134,13 +104,6 @@ public int stop(boolean initiatedByClient) { Slog.w(TAG, "stopEnroll: already cancelled!"); return 0; } - - if (mDisplayFODView) { - try { - mStatusBarService.handleInDisplayFingerprintView(false, true); - } catch (RemoteException e) {} - } - IBiometricsFingerprint daemon = getFingerprintDaemon(); if (daemon == null) { Slog.w(TAG, "stopEnrollment: no fingerprint HAL!"); diff --git a/services/core/java/com/android/server/fingerprint/FingerprintService.java b/services/core/java/com/android/server/fingerprint/FingerprintService.java index 9a2a284a66f..b4e137783ec 100644 --- a/services/core/java/com/android/server/fingerprint/FingerprintService.java +++ b/services/core/java/com/android/server/fingerprint/FingerprintService.java @@ -38,7 +38,6 @@ import android.content.IntentFilter; import android.content.pm.PackageManager; import android.content.pm.UserInfo; -import android.content.res.Resources; import android.hardware.biometrics.IBiometricPromptReceiver; import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprint; import android.hardware.biometrics.fingerprint.V2_1.IBiometricsFingerprintClientCallback; @@ -152,8 +151,6 @@ private class PerformanceStats { private IBinder mToken = new Binder(); // used for internal FingerprintService enumeration private ArrayList mUnknownFingerprints = new ArrayList<>(); // hw fingerprints - private boolean mUsesOnePlusFOD; - private class UserFingerprint { Fingerprint f; int userId; @@ -269,7 +266,6 @@ public FingerprintService(Context context) { com.android.internal.R.bool.config_notifyClientOnFingerprintCancelSuccess); mCleanupUnusedFingerprints = mContext.getResources().getBoolean( com.android.internal.R.bool.config_cleanupUnusedFingerprints); - mUsesOnePlusFOD = context.getResources().getBoolean(com.android.internal.R.bool.config_usesOnePlusFOD); } @Override @@ -401,10 +397,6 @@ protected void handleEnumerate(long deviceId, int fingerId, int groupId, int rem } protected void handleError(long deviceId, int error, int vendorCode) { - - if (mUsesOnePlusFOD && error == 8) - return; - ClientMonitor client = mCurrentClient; if (client instanceof InternalRemovalClient || client instanceof InternalEnumerateClient) { clearEnumerateState(); @@ -963,7 +955,7 @@ private void startEnrollment(IBinder token, byte [] cryptoToken, int userId, final int groupId = userId; // default group for fingerprint enrollment EnrollClient client = new EnrollClient(getContext(), mHalDeviceId, token, receiver, - userId, groupId, cryptoToken, restricted, opPackageName, mStatusBarService) { + userId, groupId, cryptoToken, restricted, opPackageName) { @Override public IBiometricsFingerprint getFingerprintDaemon() { diff --git a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java index 9e82de52711..c1e64899a5c 100644 --- a/services/core/java/com/android/server/statusbar/StatusBarManagerService.java +++ b/services/core/java/com/android/server/statusbar/StatusBarManagerService.java @@ -754,15 +754,6 @@ public void hideFingerprintDialog() { } } - @Override - public void handleInDisplayFingerprintView(boolean show, boolean isEnrolling) { - if (mBar != null) { - try { - mBar.handleInDisplayFingerprintView(show, isEnrolling); - } catch (RemoteException ex) {} - } - } - @Override public void toggleCameraFlash() { if (mBar != null) { From 8ef9e84c31275021e539b21f1c0daab1a408e55e Mon Sep 17 00:00:00 2001 From: sayan7848 Date: Thu, 3 Oct 2019 08:03:43 +0000 Subject: [PATCH 38/41] Avoid a rogue SystemUI crash A nullpointer exception occured when opening LiquidLounge>StatusBar or LiquidLounge>Notifications for the first time after a clean flash. This is a stopgap fix until we figure out the real reason behind the exception. Signed-off-by: sayan7848 --- .../systemui/statusbar/phone/CollapsedStatusBarFragment.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java index 0eae8ce29d7..5b3940dbf0b 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CollapsedStatusBarFragment.java @@ -443,6 +443,8 @@ private void setCarrierLabel(boolean animate) { } public void updateLogoSettings(boolean animate) { + if (getContext() == null) + return; mShowLogo = Settings.System.getIntForUser( getContext().getContentResolver(), Settings.System.STATUS_BAR_LOGO, 0, UserHandle.USER_CURRENT) == 1; From c8e80669cd019976605667068babf10508be6307 Mon Sep 17 00:00:00 2001 From: Mihai Popa Date: Tue, 25 Jun 2019 11:15:18 +0100 Subject: [PATCH 39/41] Fix Layout.primaryIsTrailingPreviousAllLineOffsets The CL fixes a crash in Layout.primaryIsTrailingPreviousAllLineOffsets. The crash was happening when the method was called for a line beginning with an empty bidi run. This could happen, for example, for empty text - I was unable to find any other case. The CL improves the existing test for the method with this case, which was previously crashing. The CL also fixes a potential crash in getLineHorizontals. However, this bug could never happen as in the current code path clamped is always false (and kept as parameter for parity with getHorizontal). Bug: 135444178 Bug: 78464361 Test: atest FrameworksCoreTests:android.text.LayoutTest\#testPrimaryIsTrailingPrevious Change-Id: I47157abe1d74675884734e3810628a566e40c1b4 (cherry picked from commit 7ad499d00716f45fffdf7331493ed21d1b8d9b77) (cherry picked from commit 9109ce6b0af6fc94b79cf855a10d85e107c768c2) --- core/java/android/text/Layout.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/core/java/android/text/Layout.java b/core/java/android/text/Layout.java index c6f73cb4757..c02f7ef65a7 100644 --- a/core/java/android/text/Layout.java +++ b/core/java/android/text/Layout.java @@ -1099,6 +1099,9 @@ private boolean[] primaryIsTrailingPreviousAllLineOffsets(int line) { if (limit > lineEnd) { limit = lineEnd; } + if (limit == start) { + continue; + } level[limit - lineStart - 1] = (byte) ((runs[i + 1] >>> RUN_LEVEL_SHIFT) & RUN_LEVEL_MASK); } @@ -1194,8 +1197,8 @@ private float getHorizontal(int offset, boolean trailing, int line, boolean clam } /** - * Computes in linear time the results of calling - * #getHorizontal for all offsets on a line. + * Computes in linear time the results of calling #getHorizontal for all offsets on a line. + * * @param line The line giving the offsets we compute information for * @param clamped Whether to clamp the results to the width of the layout * @param primary Whether the results should be the primary or the secondary horizontal @@ -1230,7 +1233,7 @@ private float[] getLineHorizontals(int line, boolean clamped, boolean primary) { TextLine.recycle(tl); if (clamped) { - for (int offset = 0; offset <= wid.length; ++offset) { + for (int offset = 0; offset < wid.length; ++offset) { if (wid[offset] > mWidth) { wid[offset] = mWidth; } From 0a43e322932e3a79cd3f73df41509748243e9fe1 Mon Sep 17 00:00:00 2001 From: Chienyuan Date: Tue, 9 Jul 2019 15:09:56 +0800 Subject: [PATCH 40/41] HidProfile: sync isPreferred() with HidHostService HidHostService allow to connect when priority is PRIORITY_UNDEFINED. HidProfile should return ture when priority is PRIORITY_UNDEFINED. Otherwise, the "Input device" toggle in off state when HID device connected. Bug: 132456322 Test: manual Change-Id: Id7bae694c57aec17e019d591c0a677e3cb64f845 (cherry picked from commit 830217f277e31e63d9ab8acd21ee2a8f81ee1c8f) --- .../src/com/android/settingslib/bluetooth/HidProfile.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidProfile.java b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidProfile.java index 93e56217939..505e019a654 100644 --- a/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidProfile.java +++ b/packages/SettingsLib/src/com/android/settingslib/bluetooth/HidProfile.java @@ -126,7 +126,7 @@ public int getConnectionStatus(BluetoothDevice device) { public boolean isPreferred(BluetoothDevice device) { if (mService == null) return false; - return mService.getPriority(device) > BluetoothProfile.PRIORITY_OFF; + return mService.getPriority(device) != BluetoothProfile.PRIORITY_OFF; } public int getPreferred(BluetoothDevice device) { From 26facb3388b5b1c91b7480292001238adedc3b59 Mon Sep 17 00:00:00 2001 From: Bryan Ferris Date: Thu, 27 Jun 2019 14:39:46 -0700 Subject: [PATCH 41/41] Correct argument order in permission check The function 'checkAccess' recieves the uid and pid in that order and forwards them to checkSlicePermission in the same order. However, checkSlicePermission expects them in the opposite order. Bug: 135551349 Test: atest FrameworksUiServicesTests Change-Id: I6e49efeab08f0e2a29d9830e6f81905598ae410c (cherry picked from commit d2432fc3e35eacb308b620174849b29aa74eee05) --- .../core/java/com/android/server/slice/SliceManagerService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/slice/SliceManagerService.java b/services/core/java/com/android/server/slice/SliceManagerService.java index e8f255f4dfc..f5947ee35ea 100644 --- a/services/core/java/com/android/server/slice/SliceManagerService.java +++ b/services/core/java/com/android/server/slice/SliceManagerService.java @@ -390,7 +390,7 @@ public Handler getHandler() { } protected int checkAccess(String pkg, Uri uri, int uid, int pid) { - return checkSlicePermission(uri, pkg, uid, pid, null); + return checkSlicePermission(uri, pkg, pid, uid, null); } private String getProviderPkg(Uri uri, int user) {