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

Commit 39392304 authored by Chad Brubaker's avatar Chad Brubaker Committed by Android (Google) Code Review
Browse files

Merge "Add location backed system clock"

parents f54ec0ca f113333b
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -35435,6 +35435,7 @@ package android.os {
  }
  public final class SystemClock {
    method @NonNull public static java.time.Clock currentGnssTimeClock();
    method public static long currentThreadTimeMillis();
    method public static long elapsedRealtime();
    method public static long elapsedRealtimeNanos();
+31 −0
Original line number Diff line number Diff line
@@ -20,6 +20,8 @@ import android.annotation.NonNull;
import android.annotation.UnsupportedAppUsage;
import android.app.IAlarmManager;
import android.content.Context;
import android.location.ILocationManager;
import android.location.LocationTime;
import android.util.Slog;

import dalvik.annotation.optimization.CriticalNative;
@@ -317,4 +319,33 @@ public final class SystemClock {
            }
        };
    }

    /**
     * Returns a {@link Clock} that starts at January 1, 1970 00:00:00.0 UTC,
     * synchronized using the device's location provider.
     *
     * @throws DateTimeException when the location provider has not had a location fix since boot.
     */
    public static @NonNull Clock currentGnssTimeClock() {
        return new SimpleClock(ZoneOffset.UTC) {
            private final ILocationManager mMgr = ILocationManager.Stub
                    .asInterface(ServiceManager.getService(Context.LOCATION_SERVICE));
            @Override
            public long millis() {
                LocationTime time;
                try {
                    time = mMgr.getGnssTimeMillis();
                } catch (RemoteException e) {
                    e.rethrowFromSystemServer();
                    return 0;
                }
                if (time == null) {
                    throw new DateTimeException("Gnss based time is not available.");
                }
                long currentNanos = elapsedRealtimeNanos();
                long deltaMs = (currentNanos - time.getElapsedRealtimeNanos()) / 1000000L;
                return time.getTime() + deltaMs;
            }
        };
    }
}
+2 −0
Original line number Diff line number Diff line
@@ -29,6 +29,7 @@ import android.location.IGnssNavigationMessageListener;
import android.location.ILocationListener;
import android.location.Location;
import android.location.LocationRequest;
import android.location.LocationTime;
import android.os.Bundle;

import com.android.internal.location.ProviderProperties;
@@ -104,6 +105,7 @@ interface ILocationManager
    void setTestProviderLocation(String provider, in Location loc, String opPackageName);
    void setTestProviderEnabled(String provider, boolean enabled, String opPackageName);
    List<LocationRequest> getTestProviderCurrentRequests(String provider, String opPackageName);
    LocationTime getGnssTimeMillis();

    // --- deprecated ---
    void setTestProviderStatus(String provider, int status, in Bundle extras, long updateTime,
+19 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019, 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 android.location;

parcelable LocationTime;
+73 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2019 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 android.location;

import android.annotation.NonNull;
import android.os.Parcel;
import android.os.Parcelable;

/**
 * Data class for passing location derived time.
 * @hide
 */
public final class LocationTime implements Parcelable {

    private final long mTime;
    private final long mElapsedRealtimeNanos;

    public LocationTime(long time, long elapsedRealtimeNanos) {
        mTime = time;
        mElapsedRealtimeNanos = elapsedRealtimeNanos;
    }

    /**
     * The current time, according to the Gnss location provider. */
    public long getTime() {
        return mTime;
    }

    /**
     * The elapsed nanos since boot {@link #getTime} was computed at.
     */
    public long getElapsedRealtimeNanos() {
        return mElapsedRealtimeNanos;
    }

    @Override
    public void writeToParcel(Parcel out, int flags) {
        out.writeLong(mTime);
        out.writeLong(mElapsedRealtimeNanos);
    }

    @Override
    public int describeContents() {
        return 0;
    }

    public static final @NonNull Parcelable.Creator<LocationTime> CREATOR =
            new Parcelable.Creator<LocationTime>() {
                public LocationTime createFromParcel(Parcel in) {
                    long time = in.readLong();
                    long elapsedRealtimeNanos = in.readLong();
                    return new LocationTime(time, elapsedRealtimeNanos);
                }

                public LocationTime[] newArray(int size) {
                    return new LocationTime[size];
                }
            };
}
Loading