Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 29d70688 authored by Kweku Adams's avatar Kweku Adams
Browse files

Show calling app in Task Manager.

The calling app is the one doing the work and will be the one showing
the notification. Showing the source app will confuse the user and make
managing the jobs more difficult.

Bug: 263796348
Test: atest SystemUITests:FgsManagerControllerTest
Change-Id: I5e741761c64ba8aeed430d56d7288c7c52c1639c
parent d7c5239f
Loading
Loading
Loading
Loading
+18 −2
Original line number Diff line number Diff line
@@ -30,6 +30,8 @@ import java.util.Objects;
 */
public class UserVisibleJobSummary implements Parcelable {
    private final int mCallingUid;
    @NonNull
    private final String mCallingPackageName;
    private final int mSourceUserId;
    @NonNull
    private final String mSourcePackageName;
@@ -37,9 +39,11 @@ public class UserVisibleJobSummary implements Parcelable {
    private final String mNamespace;
    private final int mJobId;

    public UserVisibleJobSummary(int callingUid, int sourceUserId,
            @NonNull String sourcePackageName, String namespace, int jobId) {
    public UserVisibleJobSummary(int callingUid, @NonNull String callingPackageName,
            int sourceUserId, @NonNull String sourcePackageName,
            @Nullable String namespace, int jobId) {
        mCallingUid = callingUid;
        mCallingPackageName = callingPackageName;
        mSourceUserId = sourceUserId;
        mSourcePackageName = sourcePackageName;
        mNamespace = namespace;
@@ -48,12 +52,18 @@ public class UserVisibleJobSummary implements Parcelable {

    protected UserVisibleJobSummary(Parcel in) {
        mCallingUid = in.readInt();
        mCallingPackageName = in.readString();
        mSourceUserId = in.readInt();
        mSourcePackageName = in.readString();
        mNamespace = in.readString();
        mJobId = in.readInt();
    }

    @NonNull
    public String getCallingPackageName() {
        return mCallingPackageName;
    }

    public int getCallingUid() {
        return mCallingUid;
    }
@@ -62,6 +72,7 @@ public class UserVisibleJobSummary implements Parcelable {
        return mJobId;
    }

    @Nullable
    public String getNamespace() {
        return mNamespace;
    }
@@ -70,6 +81,7 @@ public class UserVisibleJobSummary implements Parcelable {
        return mSourceUserId;
    }

    @NonNull
    public String getSourcePackageName() {
        return mSourcePackageName;
    }
@@ -80,6 +92,7 @@ public class UserVisibleJobSummary implements Parcelable {
        if (!(o instanceof UserVisibleJobSummary)) return false;
        UserVisibleJobSummary that = (UserVisibleJobSummary) o;
        return mCallingUid == that.mCallingUid
                && mCallingPackageName.equals(that.mCallingPackageName)
                && mSourceUserId == that.mSourceUserId
                && mSourcePackageName.equals(that.mSourcePackageName)
                && Objects.equals(mNamespace, that.mNamespace)
@@ -90,6 +103,7 @@ public class UserVisibleJobSummary implements Parcelable {
    public int hashCode() {
        int result = 0;
        result = 31 * result + mCallingUid;
        result = 31 * result + mCallingPackageName.hashCode();
        result = 31 * result + mSourceUserId;
        result = 31 * result + mSourcePackageName.hashCode();
        if (mNamespace != null) {
@@ -103,6 +117,7 @@ public class UserVisibleJobSummary implements Parcelable {
    public String toString() {
        return "UserVisibleJobSummary{"
                + "callingUid=" + mCallingUid
                + ", callingPackageName='" + mCallingPackageName + "'"
                + ", sourceUserId=" + mSourceUserId
                + ", sourcePackageName='" + mSourcePackageName + "'"
                + ", namespace=" + mNamespace
@@ -118,6 +133,7 @@ public class UserVisibleJobSummary implements Parcelable {
    @Override
    public void writeToParcel(Parcel dest, int flags) {
        dest.writeInt(mCallingUid);
        dest.writeString(mCallingPackageName);
        dest.writeInt(mSourceUserId);
        dest.writeString(mSourcePackageName);
        dest.writeString(mNamespace);
+2 −1
Original line number Diff line number Diff line
@@ -1391,7 +1391,8 @@ public final class JobStatus {
    public UserVisibleJobSummary getUserVisibleJobSummary() {
        if (mUserVisibleJobSummary == null) {
            mUserVisibleJobSummary = new UserVisibleJobSummary(
                    callingUid, getSourceUserId(), getSourcePackageName(),
                    callingUid, getServiceComponent().getPackageName(),
                    getSourceUserId(), getSourcePackageName(),
                    getNamespace(), getJobId());
        }
        return mUserVisibleJobSummary;
+2 −1
Original line number Diff line number Diff line
@@ -636,7 +636,8 @@ class FgsManagerControllerImpl @Inject constructor(
                isRunning: Boolean
        ) {
            synchronized(lock) {
                val userPackageKey = UserPackage(summary.sourceUserId, summary.sourcePackageName)
                val userPackageKey = UserPackage(
                        UserHandle.getUserId(summary.callingUid), summary.callingPackageName)
                if (isRunning) {
                    runningTaskIdentifiers
                            .getOrPut(userPackageKey) { StartTimeAndIdentifiers(systemClock) }
+15 −6
Original line number Diff line number Diff line
@@ -147,16 +147,25 @@ public class FgsManagerControllerTest extends SysuiTestCase {
        setUserProfiles(0);
        setShowUserVisibleJobs(true);

        UserVisibleJobSummary j1 = new UserVisibleJobSummary(0, 0, "pkg1", null, 0);
        UserVisibleJobSummary j2 = new UserVisibleJobSummary(1, 0, "pkg2", null, 1);
        UserVisibleJobSummary j1 = new UserVisibleJobSummary(0, "pkg1", 0, "pkg1", null, 0);
        UserVisibleJobSummary j2 = new UserVisibleJobSummary(1, "pkg2", 0, "pkg2", null, 1);
        // pkg2 is performing work on behalf of pkg3. Since pkg2 will show the notification
        // It should be the one shown in TaskManager.
        UserVisibleJobSummary j3 = new UserVisibleJobSummary(1, "pkg2", 0, "pkg3", null, 3);
        Assert.assertEquals(0, mFmc.getNumRunningPackages());
        mIUserVisibleJobObserver.onUserVisibleJobStateChanged(j1, true);
        Assert.assertEquals(1, mFmc.getNumRunningPackages());
        mIUserVisibleJobObserver.onUserVisibleJobStateChanged(j2, true);
        Assert.assertEquals(2, mFmc.getNumRunningPackages());
        // Job3 starts running. The source package (pkg3) shouldn't matter. Since pkg2 is
        // already running, the running package count shouldn't increase.
        mIUserVisibleJobObserver.onUserVisibleJobStateChanged(j3, true);
        Assert.assertEquals(2, mFmc.getNumRunningPackages());
        mIUserVisibleJobObserver.onUserVisibleJobStateChanged(j1, false);
        Assert.assertEquals(1, mFmc.getNumRunningPackages());
        mIUserVisibleJobObserver.onUserVisibleJobStateChanged(j2, false);
        Assert.assertEquals(1, mFmc.getNumRunningPackages());
        mIUserVisibleJobObserver.onUserVisibleJobStateChanged(j3, false);
        Assert.assertEquals(0, mFmc.getNumRunningPackages());
    }

@@ -167,8 +176,8 @@ public class FgsManagerControllerTest extends SysuiTestCase {

        Binder b1 = new Binder();
        Binder b2 = new Binder();
        UserVisibleJobSummary j1 = new UserVisibleJobSummary(0, 0, "pkg1", null, 0);
        UserVisibleJobSummary j3 = new UserVisibleJobSummary(1, 0, "pkg3", null, 1);
        UserVisibleJobSummary j1 = new UserVisibleJobSummary(0, "pkg1", 0, "pkg1", null, 0);
        UserVisibleJobSummary j3 = new UserVisibleJobSummary(1, "pkg3", 0, "pkg3", null, 1);
        Assert.assertEquals(0, mFmc.getNumRunningPackages());
        mIForegroundServiceObserver.onForegroundStateChanged(b1, "pkg1", 0, true);
        Assert.assertEquals(1, mFmc.getNumRunningPackages());
@@ -359,8 +368,8 @@ public class FgsManagerControllerTest extends SysuiTestCase {
        // pkg1 has only job
        // pkg2 has both job and fgs
        // pkg3 has only fgs
        UserVisibleJobSummary j1 = new UserVisibleJobSummary(0, 0, "pkg1", null, 0);
        UserVisibleJobSummary j2 = new UserVisibleJobSummary(1, 0, "pkg2", null, 1);
        UserVisibleJobSummary j1 = new UserVisibleJobSummary(0, "pkg1", 0, "pkg1", null, 0);
        UserVisibleJobSummary j2 = new UserVisibleJobSummary(1, "pkg2", 0, "pkg2", null, 1);
        Binder b2 = new Binder();
        Binder b3 = new Binder();