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

Commit 8c4c359b authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Fix for missing location icon" into pi-dev

parents 287d4327 a1ce9637
Loading
Loading
Loading
Loading
+12 −2
Original line number Original line Diff line number Diff line
@@ -1555,6 +1555,7 @@ public class AppOpsManager {
        private final long[] mRejectTimes;
        private final long[] mRejectTimes;
        private final int mDuration;
        private final int mDuration;
        private final int mProxyUid;
        private final int mProxyUid;
        private final boolean mRunning;
        private final String mProxyPackageName;
        private final String mProxyPackageName;


        public OpEntry(int op, int mode, long time, long rejectTime, int duration,
        public OpEntry(int op, int mode, long time, long rejectTime, int duration,
@@ -1566,12 +1567,13 @@ public class AppOpsManager {
            mTimes[0] = time;
            mTimes[0] = time;
            mRejectTimes[0] = rejectTime;
            mRejectTimes[0] = rejectTime;
            mDuration = duration;
            mDuration = duration;
            mRunning = duration == -1;
            mProxyUid = proxyUid;
            mProxyUid = proxyUid;
            mProxyPackageName = proxyPackage;
            mProxyPackageName = proxyPackage;
        }
        }


        public OpEntry(int op, int mode, long[] times, long[] rejectTimes, int duration,
        public OpEntry(int op, int mode, long[] times, long[] rejectTimes, int duration,
                int proxyUid, String proxyPackage) {
                boolean running, int proxyUid, String proxyPackage) {
            mOp = op;
            mOp = op;
            mMode = mode;
            mMode = mode;
            mTimes = new long[_NUM_UID_STATE];
            mTimes = new long[_NUM_UID_STATE];
@@ -1579,10 +1581,16 @@ public class AppOpsManager {
            System.arraycopy(times, 0, mTimes, 0, _NUM_UID_STATE);
            System.arraycopy(times, 0, mTimes, 0, _NUM_UID_STATE);
            System.arraycopy(rejectTimes, 0, mRejectTimes, 0, _NUM_UID_STATE);
            System.arraycopy(rejectTimes, 0, mRejectTimes, 0, _NUM_UID_STATE);
            mDuration = duration;
            mDuration = duration;
            mRunning = running;
            mProxyUid = proxyUid;
            mProxyUid = proxyUid;
            mProxyPackageName = proxyPackage;
            mProxyPackageName = proxyPackage;
        }
        }


        public OpEntry(int op, int mode, long[] times, long[] rejectTimes, int duration,
                int proxyUid, String proxyPackage) {
            this(op, mode, times, rejectTimes, duration, duration == -1, proxyUid, proxyPackage);
        }

        public int getOp() {
        public int getOp() {
            return mOp;
            return mOp;
        }
        }
@@ -1632,7 +1640,7 @@ public class AppOpsManager {
        }
        }


        public boolean isRunning() {
        public boolean isRunning() {
            return mDuration == -1;
            return mRunning;
        }
        }


        public int getDuration() {
        public int getDuration() {
@@ -1659,6 +1667,7 @@ public class AppOpsManager {
            dest.writeLongArray(mTimes);
            dest.writeLongArray(mTimes);
            dest.writeLongArray(mRejectTimes);
            dest.writeLongArray(mRejectTimes);
            dest.writeInt(mDuration);
            dest.writeInt(mDuration);
            dest.writeBoolean(mRunning);
            dest.writeInt(mProxyUid);
            dest.writeInt(mProxyUid);
            dest.writeString(mProxyPackageName);
            dest.writeString(mProxyPackageName);
        }
        }
@@ -1669,6 +1678,7 @@ public class AppOpsManager {
            mTimes = source.createLongArray();
            mTimes = source.createLongArray();
            mRejectTimes = source.createLongArray();
            mRejectTimes = source.createLongArray();
            mDuration = source.readInt();
            mDuration = source.readInt();
            mRunning = source.readBoolean();
            mProxyUid = source.readInt();
            mProxyUid = source.readInt();
            mProxyPackageName = source.readString();
            mProxyPackageName = source.readString();
        }
        }
+6 −4
Original line number Original line Diff line number Diff line
@@ -812,11 +812,12 @@ public class AppOpsService extends IAppOpsService.Stub {
            resOps = new ArrayList<>();
            resOps = new ArrayList<>();
            for (int j=0; j<pkgOps.size(); j++) {
            for (int j=0; j<pkgOps.size(); j++) {
                Op curOp = pkgOps.valueAt(j);
                Op curOp = pkgOps.valueAt(j);
                long duration = curOp.duration == -1
                final boolean running = curOp.duration == -1;
                long duration = running
                        ? (elapsedNow - curOp.startRealtime)
                        ? (elapsedNow - curOp.startRealtime)
                        : curOp.duration;
                        : curOp.duration;
                resOps.add(new AppOpsManager.OpEntry(curOp.op, curOp.mode, curOp.time,
                resOps.add(new AppOpsManager.OpEntry(curOp.op, curOp.mode, curOp.time,
                        curOp.rejectTime, (int) duration, curOp.proxyUid,
                        curOp.rejectTime, (int) duration, running, curOp.proxyUid,
                        curOp.proxyPackageName));
                        curOp.proxyPackageName));
            }
            }
        } else {
        } else {
@@ -826,11 +827,12 @@ public class AppOpsService extends IAppOpsService.Stub {
                    if (resOps == null) {
                    if (resOps == null) {
                        resOps = new ArrayList<>();
                        resOps = new ArrayList<>();
                    }
                    }
                    long duration = curOp.duration == -1
                    final boolean running = curOp.duration == -1;
                    final long duration = running
                            ? (elapsedNow - curOp.startRealtime)
                            ? (elapsedNow - curOp.startRealtime)
                            : curOp.duration;
                            : curOp.duration;
                    resOps.add(new AppOpsManager.OpEntry(curOp.op, curOp.mode, curOp.time,
                    resOps.add(new AppOpsManager.OpEntry(curOp.op, curOp.mode, curOp.time,
                            curOp.rejectTime, (int) duration, curOp.proxyUid,
                            curOp.rejectTime, (int) duration, running, curOp.proxyUid,
                            curOp.proxyPackageName));
                            curOp.proxyPackageName));
                }
                }
            }
            }
+44 −0
Original line number Original line Diff line number Diff line
@@ -18,6 +18,8 @@ package com.android.server.appops;


import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertThat;


import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.eq;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.reset;
import static org.mockito.Mockito.reset;
@@ -36,6 +38,8 @@ import android.support.test.runner.AndroidJUnit4;
import org.junit.Test;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.junit.runner.RunWith;


import java.util.List;

/**
/**
 * Tests app ops version upgrades
 * Tests app ops version upgrades
 */
 */
@@ -107,6 +111,46 @@ public class AppOpsActiveWatcherTest {
        verifyNoMoreInteractions(listener);
        verifyNoMoreInteractions(listener);
    }
    }


    @Test
    public void testIsRunning() throws Exception {
        final AppOpsManager appOpsManager = getContext().getSystemService(AppOpsManager.class);
        // Start the op
        appOpsManager.startOp(AppOpsManager.OP_CAMERA);

        assertTrue("Camera should be running", isCameraOn(appOpsManager));

        // Finish the op
        appOpsManager.finishOp(AppOpsManager.OP_CAMERA);

        assertFalse("Camera should not be running", isCameraOn(appOpsManager));
    }

    private boolean isCameraOn(AppOpsManager appOpsManager) {
        List<AppOpsManager.PackageOps> packages
                = appOpsManager.getPackagesForOps(new int[] {AppOpsManager.OP_CAMERA});
        // AppOpsManager can return null when there is no requested data.
        if (packages != null) {
            final int numPackages = packages.size();
            for (int packageInd = 0; packageInd < numPackages; packageInd++) {
                AppOpsManager.PackageOps packageOp = packages.get(packageInd);
                List<AppOpsManager.OpEntry> opEntries = packageOp.getOps();
                if (opEntries != null) {
                    final int numOps = opEntries.size();
                    for (int opInd = 0; opInd < numOps; opInd++) {
                        AppOpsManager.OpEntry opEntry = opEntries.get(opInd);
                        if (opEntry.getOp() == AppOpsManager.OP_CAMERA) {
                            if (opEntry.isRunning()) {
                                return true;
                            }
                        }
                    }
                }
            }
        }

        return false;
    }

    private static Context getContext() {
    private static Context getContext() {
        return InstrumentationRegistry.getContext();
        return InstrumentationRegistry.getContext();
    }
    }