Loading PREUPLOAD.cfg +5 −2 Original line number Diff line number Diff line [Builtin Hooks] clang_format = true bpfmt = true ktfmt = true [Builtin Hooks Options] # Only turn on clang-format check for the following subfolders. Loading @@ -17,6 +18,7 @@ clang_format = --commit ${PREUPLOAD_COMMIT} --style file --extensions c,h,cc,cpp tests/ tools/ bpfmt = -d ktfmt = --kotlinlang-style --include-dirs=services/permission,packages/SystemUI [Hook Scripts] checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --sha ${PREUPLOAD_COMMIT} Loading @@ -25,9 +27,10 @@ hidden_api_txt_checksorted_hook = ${REPO_ROOT}/tools/platform-compat/hiddenapi/c hidden_api_txt_exclude_hook = ${REPO_ROOT}/frameworks/base/tools/hiddenapi/exclude.sh ${PREUPLOAD_COMMIT} ${REPO_ROOT} ktfmt_hook = ${REPO_ROOT}/external/ktfmt/ktfmt.py --check -i ${REPO_ROOT}/frameworks/base/ktfmt_includes.txt ${PREUPLOAD_FILES} ktlint_hook = ${REPO_ROOT}/prebuilts/ktlint/ktlint.py --no-verify-format -f ${PREUPLOAD_FILES} # This flag check hook runs only for "packages/SystemUI" subdirectory. If you want to include this check for other subdirectories, please modify flag_check.py. flag_hook = ${REPO_ROOT}/frameworks/base/packages/SystemUI/flag_check.py --msg=${PREUPLOAD_COMMIT_MESSAGE} --files=${PREUPLOAD_FILES} --project=${REPO_PATH} [Tool Paths] ktfmt = ${REPO_ROOT}/prebuilts/build-tools/common/framework/ktfmt.jar apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java +7 −3 Original line number Diff line number Diff line Loading @@ -619,6 +619,7 @@ public class DeviceIdleController extends SystemService * List of end times for app-IDs that are temporarily marked as being allowed to access * the network and acquire wakelocks. Times are in milliseconds. */ @GuardedBy("this") private final SparseArray<Pair<MutableLong, String>> mTempWhitelistAppIdEndTimes = new SparseArray<>(); Loading Loading @@ -5010,7 +5011,9 @@ public class DeviceIdleController extends SystemService if (!DumpUtils.checkDumpPermission(getContext(), TAG, pw)) { return -1; } dumpTempWhitelistSchedule(pw, false); synchronized (this) { dumpTempWhitelistScheduleLocked(pw, false); } } } else if ("except-idle-whitelist".equals(cmd)) { getContext().enforceCallingOrSelfPermission( Loading Loading @@ -5294,7 +5297,7 @@ public class DeviceIdleController extends SystemService pw.println(); } } dumpTempWhitelistSchedule(pw, true); dumpTempWhitelistScheduleLocked(pw, true); size = mTempWhitelistAppIdArray != null ? mTempWhitelistAppIdArray.length : 0; if (size > 0) { Loading Loading @@ -5422,7 +5425,8 @@ public class DeviceIdleController extends SystemService } } void dumpTempWhitelistSchedule(PrintWriter pw, boolean printTitle) { @GuardedBy("this") void dumpTempWhitelistScheduleLocked(PrintWriter pw, boolean printTitle) { final int size = mTempWhitelistAppIdEndTimes.size(); if (size > 0) { String prefix = ""; Loading apex/jobscheduler/service/java/com/android/server/job/controllers/IdleController.java +4 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ public final class IdleController extends RestrictingController implements Idlen private static final String TAG = "JobScheduler.IdleController"; // Policy: we decide that we're "idle" if the device has been unused / // screen off or dreaming or wireless charging dock idle for at least this long @GuardedBy("mLock") final ArraySet<JobStatus> mTrackedTasks = new ArraySet<>(); IdlenessTracker mIdleTracker; private final FlexibilityController mFlexibilityController; Loading Loading @@ -118,9 +119,11 @@ public final class IdleController extends RestrictingController implements Idlen for (int i = mTrackedTasks.size()-1; i >= 0; i--) { mTrackedTasks.valueAt(i).setIdleConstraintSatisfied(nowElapsed, isIdle); } } if (!mTrackedTasks.isEmpty()) { mStateChangedListener.onControllerStateChanged(mTrackedTasks); } } } /** * Idle state tracking, and messaging with the task manager when Loading core/api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -14435,6 +14435,7 @@ package android.telephony { method @NonNull public android.telephony.CarrierRestrictionRules build(); method @NonNull public android.telephony.CarrierRestrictionRules.Builder setAllCarriersAllowed(); method @NonNull public android.telephony.CarrierRestrictionRules.Builder setAllowedCarriers(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>); method @FlaggedApi("com.android.internal.telephony.flags.set_carrier_restriction_status") @NonNull public android.telephony.CarrierRestrictionRules.Builder setCarrierRestrictionStatus(int); method @NonNull public android.telephony.CarrierRestrictionRules.Builder setDefaultCarrierRestriction(int); method @NonNull public android.telephony.CarrierRestrictionRules.Builder setExcludedCarriers(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>); method @NonNull public android.telephony.CarrierRestrictionRules.Builder setMultiSimPolicy(int); core/java/android/accessibilityservice/AccessibilityService.java +97 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.accessibilityservice; import static android.accessibilityservice.AccessibilityServiceInfo.CAPABILITY_CAN_CONTROL_MAGNIFICATION; import static android.accessibilityservice.MagnificationConfig.MAGNIFICATION_MODE_FULLSCREEN; import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY; Loading Loading @@ -69,6 +70,8 @@ import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import android.view.accessibility.AccessibilityWindowInfo; import android.view.inputmethod.EditorInfo; import androidx.annotation.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.inputmethod.CancellationGroup; import com.android.internal.inputmethod.IAccessibilityInputMethodSession; Loading Loading @@ -640,6 +643,8 @@ public abstract class AccessibilityService extends Service { /** The detected gesture information for different displays */ boolean onGesture(AccessibilityGestureEvent gestureInfo); boolean onKeyEvent(KeyEvent event); /** Magnification SystemUI connection changed callbacks */ void onMagnificationSystemUIConnectionChanged(boolean connected); /** Magnification changed callbacks for different displays */ void onMagnificationChanged(int displayId, @NonNull Region region, MagnificationConfig config); Loading Loading @@ -790,7 +795,6 @@ public abstract class AccessibilityService extends Service { public static final String KEY_ACCESSIBILITY_SCREENSHOT_TIMESTAMP = "screenshot_timestamp"; /** * Annotations for result codes of attaching accessibility overlays. * Loading Loading @@ -837,6 +841,13 @@ public abstract class AccessibilityService extends Service { private WindowManager mWindowManager; @GuardedBy("mLock") private boolean mServiceConnected; @GuardedBy("mLock") private boolean mMagnificationSystemUIConnected; @GuardedBy("mLock") private boolean mServiceConnectedNotified; /** List of magnification controllers, mapping from displayId -> MagnificationController. */ private final SparseArray<MagnificationController> mMagnificationControllers = new SparseArray<>(0); Loading Loading @@ -886,11 +897,14 @@ public abstract class AccessibilityService extends Service { for (int i = 0; i < mMagnificationControllers.size(); i++) { mMagnificationControllers.valueAt(i).onServiceConnectedLocked(); } checkIsMagnificationSystemUIConnectedAlready(); final AccessibilityServiceInfo info = getServiceInfo(); if (info != null) { updateInputMethod(info); mMotionEventSources = info.getMotionEventSources(); } mServiceConnected = true; mServiceConnectedNotified = false; } if (mSoftKeyboardController != null) { mSoftKeyboardController.onServiceConnected(); Loading @@ -898,8 +912,58 @@ public abstract class AccessibilityService extends Service { // The client gets to handle service connection last, after we've set // up any state upon which their code may rely. if (android.view.accessibility.Flags .waitMagnificationSystemUiConnectionToNotifyServiceConnected()) { notifyOnServiceConnectedIfReady(); } else { onServiceConnected(); } } private void notifyOnServiceConnectedIfReady() { synchronized (mLock) { if (mServiceConnectedNotified) { return; } boolean canControlMagnification; final AccessibilityServiceInfo info = getServiceInfo(); if (info != null) { int flagMask = CAPABILITY_CAN_CONTROL_MAGNIFICATION; canControlMagnification = (info.getCapabilities() & flagMask) == flagMask; } else { canControlMagnification = false; } boolean ready = canControlMagnification ? (mServiceConnected && mMagnificationSystemUIConnected) : mServiceConnected; if (ready) { getMainExecutor().execute(() -> onServiceConnected()); mServiceConnectedNotified = true; } } } @GuardedBy("mLock") private void checkIsMagnificationSystemUIConnectedAlready() { if (!android.view.accessibility.Flags .waitMagnificationSystemUiConnectionToNotifyServiceConnected()) { return; } if (mMagnificationSystemUIConnected) { return; } final IAccessibilityServiceConnection connection = AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId); if (connection != null) { try { boolean connected = connection.isMagnificationSystemUIConnected(); mMagnificationSystemUIConnected = connected; } catch (RemoteException re) { Log.w(LOG_TAG, "Failed to check magnification system ui connection", re); re.rethrowFromSystemServer(); } } } private void updateInputMethod(AccessibilityServiceInfo info) { if (info != null) { Loading Loading @@ -1360,6 +1424,22 @@ public abstract class AccessibilityService extends Service { } } private void onMagnificationSystemUIConnectionChanged(boolean connected) { if (!android.view.accessibility.Flags .waitMagnificationSystemUiConnectionToNotifyServiceConnected()) { return; } synchronized (mLock) { boolean changed = (mMagnificationSystemUIConnected != connected); mMagnificationSystemUIConnected = connected; if (changed) { notifyOnServiceConnectedIfReady(); } } } private void onMagnificationChanged(int displayId, @NonNull Region region, MagnificationConfig config) { MagnificationController controller; Loading Loading @@ -2822,6 +2902,11 @@ public abstract class AccessibilityService extends Service { return AccessibilityService.this.onKeyEvent(event); } @Override public void onMagnificationSystemUIConnectionChanged(boolean connected) { AccessibilityService.this.onMagnificationSystemUIConnectionChanged(connected); } @Override public void onMagnificationChanged(int displayId, @NonNull Region region, MagnificationConfig config) { Loading Loading @@ -3032,6 +3117,16 @@ public abstract class AccessibilityService extends Service { }); } @Override public void onMagnificationSystemUIConnectionChanged(boolean connected) { mExecutor.execute(() -> { if (mConnectionId != AccessibilityInteractionClient.NO_ID) { mCallback.onMagnificationSystemUIConnectionChanged(connected); } return; }); } /** Magnification changed callbacks for different displays */ public void onMagnificationChanged(int displayId, @NonNull Region region, MagnificationConfig config) { Loading Loading
PREUPLOAD.cfg +5 −2 Original line number Diff line number Diff line [Builtin Hooks] clang_format = true bpfmt = true ktfmt = true [Builtin Hooks Options] # Only turn on clang-format check for the following subfolders. Loading @@ -17,6 +18,7 @@ clang_format = --commit ${PREUPLOAD_COMMIT} --style file --extensions c,h,cc,cpp tests/ tools/ bpfmt = -d ktfmt = --kotlinlang-style --include-dirs=services/permission,packages/SystemUI [Hook Scripts] checkstyle_hook = ${REPO_ROOT}/prebuilts/checkstyle/checkstyle.py --sha ${PREUPLOAD_COMMIT} Loading @@ -25,9 +27,10 @@ hidden_api_txt_checksorted_hook = ${REPO_ROOT}/tools/platform-compat/hiddenapi/c hidden_api_txt_exclude_hook = ${REPO_ROOT}/frameworks/base/tools/hiddenapi/exclude.sh ${PREUPLOAD_COMMIT} ${REPO_ROOT} ktfmt_hook = ${REPO_ROOT}/external/ktfmt/ktfmt.py --check -i ${REPO_ROOT}/frameworks/base/ktfmt_includes.txt ${PREUPLOAD_FILES} ktlint_hook = ${REPO_ROOT}/prebuilts/ktlint/ktlint.py --no-verify-format -f ${PREUPLOAD_FILES} # This flag check hook runs only for "packages/SystemUI" subdirectory. If you want to include this check for other subdirectories, please modify flag_check.py. flag_hook = ${REPO_ROOT}/frameworks/base/packages/SystemUI/flag_check.py --msg=${PREUPLOAD_COMMIT_MESSAGE} --files=${PREUPLOAD_FILES} --project=${REPO_PATH} [Tool Paths] ktfmt = ${REPO_ROOT}/prebuilts/build-tools/common/framework/ktfmt.jar
apex/jobscheduler/service/java/com/android/server/DeviceIdleController.java +7 −3 Original line number Diff line number Diff line Loading @@ -619,6 +619,7 @@ public class DeviceIdleController extends SystemService * List of end times for app-IDs that are temporarily marked as being allowed to access * the network and acquire wakelocks. Times are in milliseconds. */ @GuardedBy("this") private final SparseArray<Pair<MutableLong, String>> mTempWhitelistAppIdEndTimes = new SparseArray<>(); Loading Loading @@ -5010,7 +5011,9 @@ public class DeviceIdleController extends SystemService if (!DumpUtils.checkDumpPermission(getContext(), TAG, pw)) { return -1; } dumpTempWhitelistSchedule(pw, false); synchronized (this) { dumpTempWhitelistScheduleLocked(pw, false); } } } else if ("except-idle-whitelist".equals(cmd)) { getContext().enforceCallingOrSelfPermission( Loading Loading @@ -5294,7 +5297,7 @@ public class DeviceIdleController extends SystemService pw.println(); } } dumpTempWhitelistSchedule(pw, true); dumpTempWhitelistScheduleLocked(pw, true); size = mTempWhitelistAppIdArray != null ? mTempWhitelistAppIdArray.length : 0; if (size > 0) { Loading Loading @@ -5422,7 +5425,8 @@ public class DeviceIdleController extends SystemService } } void dumpTempWhitelistSchedule(PrintWriter pw, boolean printTitle) { @GuardedBy("this") void dumpTempWhitelistScheduleLocked(PrintWriter pw, boolean printTitle) { final int size = mTempWhitelistAppIdEndTimes.size(); if (size > 0) { String prefix = ""; Loading
apex/jobscheduler/service/java/com/android/server/job/controllers/IdleController.java +4 −1 Original line number Diff line number Diff line Loading @@ -48,6 +48,7 @@ public final class IdleController extends RestrictingController implements Idlen private static final String TAG = "JobScheduler.IdleController"; // Policy: we decide that we're "idle" if the device has been unused / // screen off or dreaming or wireless charging dock idle for at least this long @GuardedBy("mLock") final ArraySet<JobStatus> mTrackedTasks = new ArraySet<>(); IdlenessTracker mIdleTracker; private final FlexibilityController mFlexibilityController; Loading Loading @@ -118,9 +119,11 @@ public final class IdleController extends RestrictingController implements Idlen for (int i = mTrackedTasks.size()-1; i >= 0; i--) { mTrackedTasks.valueAt(i).setIdleConstraintSatisfied(nowElapsed, isIdle); } } if (!mTrackedTasks.isEmpty()) { mStateChangedListener.onControllerStateChanged(mTrackedTasks); } } } /** * Idle state tracking, and messaging with the task manager when Loading
core/api/system-current.txt +1 −0 Original line number Diff line number Diff line Loading @@ -14435,6 +14435,7 @@ package android.telephony { method @NonNull public android.telephony.CarrierRestrictionRules build(); method @NonNull public android.telephony.CarrierRestrictionRules.Builder setAllCarriersAllowed(); method @NonNull public android.telephony.CarrierRestrictionRules.Builder setAllowedCarriers(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>); method @FlaggedApi("com.android.internal.telephony.flags.set_carrier_restriction_status") @NonNull public android.telephony.CarrierRestrictionRules.Builder setCarrierRestrictionStatus(int); method @NonNull public android.telephony.CarrierRestrictionRules.Builder setDefaultCarrierRestriction(int); method @NonNull public android.telephony.CarrierRestrictionRules.Builder setExcludedCarriers(@NonNull java.util.List<android.service.carrier.CarrierIdentifier>); method @NonNull public android.telephony.CarrierRestrictionRules.Builder setMultiSimPolicy(int);
core/java/android/accessibilityservice/AccessibilityService.java +97 −2 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package android.accessibilityservice; import static android.accessibilityservice.AccessibilityServiceInfo.CAPABILITY_CAN_CONTROL_MAGNIFICATION; import static android.accessibilityservice.MagnificationConfig.MAGNIFICATION_MODE_FULLSCREEN; import static android.view.WindowManager.LayoutParams.TYPE_ACCESSIBILITY_OVERLAY; Loading Loading @@ -69,6 +70,8 @@ import android.view.accessibility.AccessibilityNodeInfo.AccessibilityAction; import android.view.accessibility.AccessibilityWindowInfo; import android.view.inputmethod.EditorInfo; import androidx.annotation.GuardedBy; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.inputmethod.CancellationGroup; import com.android.internal.inputmethod.IAccessibilityInputMethodSession; Loading Loading @@ -640,6 +643,8 @@ public abstract class AccessibilityService extends Service { /** The detected gesture information for different displays */ boolean onGesture(AccessibilityGestureEvent gestureInfo); boolean onKeyEvent(KeyEvent event); /** Magnification SystemUI connection changed callbacks */ void onMagnificationSystemUIConnectionChanged(boolean connected); /** Magnification changed callbacks for different displays */ void onMagnificationChanged(int displayId, @NonNull Region region, MagnificationConfig config); Loading Loading @@ -790,7 +795,6 @@ public abstract class AccessibilityService extends Service { public static final String KEY_ACCESSIBILITY_SCREENSHOT_TIMESTAMP = "screenshot_timestamp"; /** * Annotations for result codes of attaching accessibility overlays. * Loading Loading @@ -837,6 +841,13 @@ public abstract class AccessibilityService extends Service { private WindowManager mWindowManager; @GuardedBy("mLock") private boolean mServiceConnected; @GuardedBy("mLock") private boolean mMagnificationSystemUIConnected; @GuardedBy("mLock") private boolean mServiceConnectedNotified; /** List of magnification controllers, mapping from displayId -> MagnificationController. */ private final SparseArray<MagnificationController> mMagnificationControllers = new SparseArray<>(0); Loading Loading @@ -886,11 +897,14 @@ public abstract class AccessibilityService extends Service { for (int i = 0; i < mMagnificationControllers.size(); i++) { mMagnificationControllers.valueAt(i).onServiceConnectedLocked(); } checkIsMagnificationSystemUIConnectedAlready(); final AccessibilityServiceInfo info = getServiceInfo(); if (info != null) { updateInputMethod(info); mMotionEventSources = info.getMotionEventSources(); } mServiceConnected = true; mServiceConnectedNotified = false; } if (mSoftKeyboardController != null) { mSoftKeyboardController.onServiceConnected(); Loading @@ -898,8 +912,58 @@ public abstract class AccessibilityService extends Service { // The client gets to handle service connection last, after we've set // up any state upon which their code may rely. if (android.view.accessibility.Flags .waitMagnificationSystemUiConnectionToNotifyServiceConnected()) { notifyOnServiceConnectedIfReady(); } else { onServiceConnected(); } } private void notifyOnServiceConnectedIfReady() { synchronized (mLock) { if (mServiceConnectedNotified) { return; } boolean canControlMagnification; final AccessibilityServiceInfo info = getServiceInfo(); if (info != null) { int flagMask = CAPABILITY_CAN_CONTROL_MAGNIFICATION; canControlMagnification = (info.getCapabilities() & flagMask) == flagMask; } else { canControlMagnification = false; } boolean ready = canControlMagnification ? (mServiceConnected && mMagnificationSystemUIConnected) : mServiceConnected; if (ready) { getMainExecutor().execute(() -> onServiceConnected()); mServiceConnectedNotified = true; } } } @GuardedBy("mLock") private void checkIsMagnificationSystemUIConnectedAlready() { if (!android.view.accessibility.Flags .waitMagnificationSystemUiConnectionToNotifyServiceConnected()) { return; } if (mMagnificationSystemUIConnected) { return; } final IAccessibilityServiceConnection connection = AccessibilityInteractionClient.getInstance(this).getConnection(mConnectionId); if (connection != null) { try { boolean connected = connection.isMagnificationSystemUIConnected(); mMagnificationSystemUIConnected = connected; } catch (RemoteException re) { Log.w(LOG_TAG, "Failed to check magnification system ui connection", re); re.rethrowFromSystemServer(); } } } private void updateInputMethod(AccessibilityServiceInfo info) { if (info != null) { Loading Loading @@ -1360,6 +1424,22 @@ public abstract class AccessibilityService extends Service { } } private void onMagnificationSystemUIConnectionChanged(boolean connected) { if (!android.view.accessibility.Flags .waitMagnificationSystemUiConnectionToNotifyServiceConnected()) { return; } synchronized (mLock) { boolean changed = (mMagnificationSystemUIConnected != connected); mMagnificationSystemUIConnected = connected; if (changed) { notifyOnServiceConnectedIfReady(); } } } private void onMagnificationChanged(int displayId, @NonNull Region region, MagnificationConfig config) { MagnificationController controller; Loading Loading @@ -2822,6 +2902,11 @@ public abstract class AccessibilityService extends Service { return AccessibilityService.this.onKeyEvent(event); } @Override public void onMagnificationSystemUIConnectionChanged(boolean connected) { AccessibilityService.this.onMagnificationSystemUIConnectionChanged(connected); } @Override public void onMagnificationChanged(int displayId, @NonNull Region region, MagnificationConfig config) { Loading Loading @@ -3032,6 +3117,16 @@ public abstract class AccessibilityService extends Service { }); } @Override public void onMagnificationSystemUIConnectionChanged(boolean connected) { mExecutor.execute(() -> { if (mConnectionId != AccessibilityInteractionClient.NO_ID) { mCallback.onMagnificationSystemUIConnectionChanged(connected); } return; }); } /** Magnification changed callbacks for different displays */ public void onMagnificationChanged(int displayId, @NonNull Region region, MagnificationConfig config) { Loading