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

Commit a7d21f8c authored by Neil Fuller's avatar Neil Fuller
Browse files

Tidy up changes for timezone update code

Tidy up changes for timezone update code:
1) Remove some TODOs
2) Fix some logging
3) Remove ClockHelper in favor of java.time.Clock /
SystemClock.elapsedRealtimeClock()

No functional changes intended.

Bug: 31008728
Test: PTS: run pts -m PtsTimeZoneTestCases
Change-Id: Ib1ae04cbadfe71e4e340a0572e82f0bc3f68ef30
parent f41ee681
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