1 /* 2 * Copyright 2020 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.server.timezonedetector; 18 19 import android.annotation.UserIdInt; 20 import android.os.Binder; 21 import android.os.UserHandle; 22 23 /** 24 * An interface to wrap various difficult-to-intercept calls that services make to access / manage 25 * caller identity, e.g. {@link Binder#clearCallingIdentity()}. 26 */ 27 public interface CallerIdentityInjector { 28 29 /** A singleton for the real implementation of {@link CallerIdentityInjector}. */ 30 CallerIdentityInjector REAL = new Real(); 31 32 /** A {@link UserHandle#getCallingUserId()} call. */ getCallingUserId()33 @UserIdInt int getCallingUserId(); 34 35 /** A {@link Binder#clearCallingIdentity()} call. */ clearCallingIdentity()36 long clearCallingIdentity(); 37 38 /** A {@link Binder#restoreCallingIdentity(long)} ()} call. */ restoreCallingIdentity(long token)39 void restoreCallingIdentity(long token); 40 41 /** The real implementation of {@link CallerIdentityInjector}. */ 42 class Real implements CallerIdentityInjector { 43 Real()44 protected Real() { 45 } 46 47 @Override getCallingUserId()48 public int getCallingUserId() { 49 return UserHandle.getCallingUserId(); 50 } 51 52 @Override clearCallingIdentity()53 public long clearCallingIdentity() { 54 return Binder.clearCallingIdentity(); 55 } 56 57 @Override restoreCallingIdentity(long token)58 public void restoreCallingIdentity(long token) { 59 Binder.restoreCallingIdentity(token); 60 } 61 } 62 } 63