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

Commit 7888d2f9 authored by Neil Fuller's avatar Neil Fuller Committed by Android (Google) Code Review
Browse files

Merge "Tidy up changes for timezone update code"

parents 0b62766d a7d21f8c
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -105,9 +105,9 @@ public final class RulesManager {
     */
    public RulesState getRulesState() {
        try {
            logDebug("sIRulesManager.getRulesState()");
            logDebug("mIRulesManager.getRulesState()");
            RulesState rulesState = mIRulesManager.getRulesState();
            logDebug("sIRulesManager.getRulesState() returned " + rulesState);
            logDebug("mIRulesManager.getRulesState() returned " + rulesState);
            return rulesState;
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
@@ -131,7 +131,7 @@ public final class RulesManager {

        ICallback iCallback = new CallbackWrapper(mContext, callback);
        try {
            logDebug("sIRulesManager.requestInstall()");
            logDebug("mIRulesManager.requestInstall()");
            return mIRulesManager.requestInstall(distroFileDescriptor, checkToken, iCallback);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
@@ -151,7 +151,7 @@ public final class RulesManager {
    public int requestUninstall(byte[] checkToken, Callback callback) {
        ICallback iCallback = new CallbackWrapper(mContext, callback);
        try {
            logDebug("sIRulesManager.requestUninstall()");
            logDebug("mIRulesManager.requestUninstall()");
            return mIRulesManager.requestUninstall(checkToken, iCallback);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
@@ -196,7 +196,7 @@ public final class RulesManager {
     */
    public void requestNothing(byte[] checkToken, boolean succeeded) {
        try {
            logDebug("sIRulesManager.requestNothing() with token=" + Arrays.toString(checkToken));
            logDebug("mIRulesManager.requestNothing() with token=" + Arrays.toString(checkToken));
            mIRulesManager.requestNothing(checkToken, succeeded);
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
+0 −25
Original line number Diff line number Diff line
/*
 * Copyright (C) 2017 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.server.timezone;

/**
 * An easy-to-mock interface for obtaining a monotonically increasing time value in milliseconds.
 */
interface ClockHelper {

    long currentTimestamp();
}
+11 −8
Original line number Diff line number Diff line
@@ -22,11 +22,14 @@ import android.app.timezone.RulesUpdaterContract;
import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Environment;
import android.os.FileUtils;
import android.os.SystemClock;
import android.provider.TimeZoneRulesDataContract;
import android.util.Slog;

import java.io.File;
import java.io.PrintWriter;
import java.time.Clock;

/**
 * Monitors the installed applications associated with time zone updates. If the app packages are
@@ -58,7 +61,7 @@ public class PackageTracker {
    private final IntentHelper mIntentHelper;
    private final ConfigHelper mConfigHelper;
    private final PackageStatusStorage mPackageStatusStorage;
    private final ClockHelper mClockHelper;
    private final Clock mElapsedRealtimeClock;

    // False if tracking is disabled.
    private boolean mTrackingEnabled;
@@ -91,15 +94,15 @@ public class PackageTracker {

    /** Creates the {@link PackageTracker} for normal use. */
    static PackageTracker create(Context context) {
        Clock elapsedRealtimeClock = SystemClock.elapsedRealtimeClock();
        PackageTrackerHelperImpl helperImpl = new PackageTrackerHelperImpl(context);
        // TODO(nfuller): Switch to FileUtils.createDir() when available. http://b/31008728
        File storageDir = new File(Environment.getDataSystemDirectory(), "timezone");
        File storageDir = FileUtils.createDir(Environment.getDataSystemDirectory(), "timezone");
        if (!storageDir.exists()) {
            storageDir.mkdir();
        }

        return new PackageTracker(
                helperImpl /* clock */,
                elapsedRealtimeClock /* elapsedRealtimeClock */,
                helperImpl /* configHelper */,
                helperImpl /* packageManagerHelper */,
                new PackageStatusStorage(storageDir),
@@ -107,10 +110,10 @@ public class PackageTracker {
    }

    // A constructor that can be used by tests to supply mocked / faked dependencies.
    PackageTracker(ClockHelper clockHelper, ConfigHelper configHelper,
    PackageTracker(Clock elapsedRealtimeClock, ConfigHelper configHelper,
            PackageManagerHelper packageManagerHelper, PackageStatusStorage packageStatusStorage,
            IntentHelper intentHelper) {
        mClockHelper = clockHelper;
        mElapsedRealtimeClock = elapsedRealtimeClock;
        mConfigHelper = configHelper;
        mPackageManagerHelper = packageManagerHelper;
        mPackageStatusStorage = packageStatusStorage;
@@ -425,7 +428,7 @@ public class PackageTracker {
    }

    private void setCheckInProgress() {
        mLastTriggerTimestamp = mClockHelper.currentTimestamp();
        mLastTriggerTimestamp = mElapsedRealtimeClock.millis();
    }

    private void setCheckComplete() {
@@ -441,7 +444,7 @@ public class PackageTracker {
            return false;
        }
        // Risk of overflow, but highly unlikely given the implementation and not problematic.
        return mClockHelper.currentTimestamp() > mLastTriggerTimestamp + mCheckTimeAllowedMillis;
        return mElapsedRealtimeClock.millis() > mLastTriggerTimestamp + mCheckTimeAllowedMillis;
    }

    private PackageVersions lookupInstalledPackageVersions() {
+1 −9
Original line number Diff line number Diff line
@@ -25,7 +25,6 @@ import android.content.pm.PackageManager;
import android.content.pm.ProviderInfo;
import android.content.pm.ResolveInfo;
import android.content.res.Resources;
import android.os.SystemClock;
import android.os.UserHandle;
import android.util.Slog;

@@ -34,7 +33,7 @@ import java.util.List;
/**
 * A single class that implements multiple helper interfaces for use by {@link PackageTracker}.
 */
final class PackageTrackerHelperImpl implements ClockHelper, ConfigHelper, PackageManagerHelper {
final class PackageTrackerHelperImpl implements ConfigHelper, PackageManagerHelper {

    private static final String TAG = "PackageTrackerHelperImpl";

@@ -73,13 +72,6 @@ final class PackageTrackerHelperImpl implements ClockHelper, ConfigHelper, Packa
        return mContext.getResources().getInteger(R.integer.config_timeZoneRulesCheckRetryCount);
    }

    @Override
    public long currentTimestamp() {
        // Use of elapsedRealtime() because this is in-memory state and elapsedRealtime() shouldn't
        // change if the system clock changes.
        return SystemClock.elapsedRealtime();
    }

    @Override
    public long getInstalledPackageVersion(String packageName)
            throws PackageManager.NameNotFoundException {
+3 −9
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.server.timezone;

import com.android.internal.util.DumpUtils;

import android.content.Context;
import android.content.pm.PackageManager;
import android.os.AsyncTask;
@@ -46,15 +48,7 @@ final class RulesManagerServiceHelperImpl implements PermissionHelper, Executor

    @Override
    public boolean checkDumpPermission(String tag, PrintWriter pw) {
        // TODO(nfuller): Switch to DumpUtils.checkDumpPermission() when it is available in AOSP.
        if (mContext.checkCallingOrSelfPermission(android.Manifest.permission.DUMP)
                != PackageManager.PERMISSION_GRANTED) {
            pw.println("Permission Denial: can't dump LocationManagerService from from pid="
                    + Binder.getCallingPid()
                    + ", uid=" + Binder.getCallingUid());
            return false;
        }
        return true;
        return DumpUtils.checkDumpPermission(mContext, tag, pw);
    }

    @Override
Loading