• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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.car.systeminterface;
18 
19 import android.content.Context;
20 
21 import com.android.car.CarPowerManagementService;
22 import com.android.car.procfsinspector.ProcessInfo;
23 import com.android.car.storagemonitoring.LifetimeWriteInfoProvider;
24 import com.android.car.storagemonitoring.UidIoStatsProvider;
25 import com.android.car.storagemonitoring.WearInformationProvider;
26 import com.android.internal.car.ICarServiceHelper;
27 
28 import java.io.File;
29 import java.time.Duration;
30 import java.util.List;
31 import java.util.Objects;
32 
33 /**
34  * This class contains references to all the different wrapper interfaces between
35  * CarService and the Android OS APIs.
36  */
37 public final class SystemInterface implements DisplayInterface, IOInterface,
38         StorageMonitoringInterface, SystemStateInterface, TimeInterface,
39         WakeLockInterface {
40     private final DisplayInterface mDisplayInterface;
41     private final IOInterface mIOInterface;
42     private final StorageMonitoringInterface mStorageMonitoringInterface;
43     private final SystemStateInterface mSystemStateInterface;
44     private final TimeInterface mTimeInterface;
45     private final WakeLockInterface mWakeLockInterface;
46 
SystemInterface(DisplayInterface displayInterface, IOInterface ioInterface, StorageMonitoringInterface storageMonitoringInterface, SystemStateInterface systemStateInterface, TimeInterface timeInterface, WakeLockInterface wakeLockInterface)47     SystemInterface(DisplayInterface displayInterface,
48             IOInterface ioInterface,
49             StorageMonitoringInterface storageMonitoringInterface,
50             SystemStateInterface systemStateInterface,
51             TimeInterface timeInterface,
52             WakeLockInterface wakeLockInterface) {
53         mDisplayInterface = displayInterface;
54         mIOInterface = ioInterface;
55         mStorageMonitoringInterface = storageMonitoringInterface;
56         mSystemStateInterface = systemStateInterface;
57         mTimeInterface = timeInterface;
58         mWakeLockInterface = wakeLockInterface;
59     }
60 
getDisplayInterface()61     public DisplayInterface getDisplayInterface() { return mDisplayInterface; }
getIOInterface()62     public IOInterface getIOInterface() { return mIOInterface; }
getSystemStateInterface()63     public SystemStateInterface getSystemStateInterface() { return mSystemStateInterface; }
getTimeInterface()64     public TimeInterface getTimeInterface() { return mTimeInterface; }
getWakeLockInterface()65     public WakeLockInterface getWakeLockInterface() { return mWakeLockInterface; }
setCarServiceHelper(ICarServiceHelper helper)66     public void setCarServiceHelper(ICarServiceHelper helper) {
67         mSystemStateInterface.setCarServiceHelper(helper);
68     }
69 
70     @Override
getFilesDir()71     public File getFilesDir() {
72         return mIOInterface.getFilesDir();
73     }
74 
75     @Override
releaseAllWakeLocks()76     public void releaseAllWakeLocks() {
77         mWakeLockInterface.releaseAllWakeLocks();
78     }
79 
80     @Override
switchToPartialWakeLock()81     public void switchToPartialWakeLock() {
82         mWakeLockInterface.switchToPartialWakeLock();
83     }
84 
85     @Override
switchToFullWakeLock()86     public void switchToFullWakeLock() {
87         mWakeLockInterface.switchToFullWakeLock();
88     }
89 
90     @Override
getUptime()91     public long getUptime() {
92         return mTimeInterface.getUptime();
93     }
94 
95     @Override
getUptime(boolean includeDeepSleepTime)96     public long getUptime(boolean includeDeepSleepTime) {
97         return mTimeInterface.getUptime(includeDeepSleepTime);
98     }
99 
100     @Override
scheduleAction(Runnable r, long delayMs)101     public void scheduleAction(Runnable r, long delayMs) {
102         mTimeInterface.scheduleAction(r, delayMs);
103     }
104 
105     @Override
getRunningProcesses()106     public List<ProcessInfo> getRunningProcesses() {
107         return mSystemStateInterface.getRunningProcesses();
108     }
109 
110     @Override
cancelAllActions()111     public void cancelAllActions() {
112         mTimeInterface.cancelAllActions();
113     }
114 
115     @Override
setDisplayBrightness(int brightness)116     public void setDisplayBrightness(int brightness) {
117         mDisplayInterface.setDisplayBrightness(brightness);
118     }
119 
120     @Override
setDisplayState(boolean on)121     public void setDisplayState(boolean on) {
122         mDisplayInterface.setDisplayState(on);
123     }
124 
125     @Override
startDisplayStateMonitoring(CarPowerManagementService service)126     public void startDisplayStateMonitoring(CarPowerManagementService service) {
127         mDisplayInterface.startDisplayStateMonitoring(service);
128     }
129 
130     @Override
stopDisplayStateMonitoring()131     public void stopDisplayStateMonitoring() {
132         mDisplayInterface.stopDisplayStateMonitoring();
133     }
134 
135     @Override
getFlashWearInformationProviders()136     public WearInformationProvider[] getFlashWearInformationProviders() {
137         return mStorageMonitoringInterface.getFlashWearInformationProviders();
138     }
139 
140     @Override
getUidIoStatsProvider()141     public UidIoStatsProvider getUidIoStatsProvider() {
142         return mStorageMonitoringInterface.getUidIoStatsProvider();
143     }
144 
145     @Override
getLifetimeWriteInfoProvider()146     public LifetimeWriteInfoProvider getLifetimeWriteInfoProvider() {
147         return mStorageMonitoringInterface.getLifetimeWriteInfoProvider();
148     }
149 
150     @Override
shutdown()151     public void shutdown() {
152         mSystemStateInterface.shutdown();
153     }
154 
155     @Override
enterDeepSleep(int wakeupTimeSec)156     public boolean enterDeepSleep(int wakeupTimeSec) {
157         return mSystemStateInterface.enterDeepSleep(wakeupTimeSec);
158     }
159 
160     @Override
scheduleActionForBootCompleted(Runnable action, Duration delay)161     public void scheduleActionForBootCompleted(Runnable action, Duration delay) {
162         mSystemStateInterface.scheduleActionForBootCompleted(action, delay);
163     }
164 
165     @Override
isWakeupCausedByTimer()166     public boolean isWakeupCausedByTimer() {
167         return mSystemStateInterface.isWakeupCausedByTimer();
168     }
169 
170     @Override
isSystemSupportingDeepSleep()171     public boolean isSystemSupportingDeepSleep() {
172         return mSystemStateInterface.isSystemSupportingDeepSleep();
173     }
174 
175     public final static class Builder {
176         private DisplayInterface mDisplayInterface;
177         private IOInterface mIOInterface;
178         private StorageMonitoringInterface mStorageMonitoringInterface;
179         private SystemStateInterface mSystemStateInterface;
180         private TimeInterface mTimeInterface;
181         private WakeLockInterface mWakeLockInterface;
182 
Builder()183         private Builder() {}
184 
newSystemInterface()185         public static Builder newSystemInterface() {
186             return new Builder();
187         }
188 
defaultSystemInterface(Context context)189         public static Builder defaultSystemInterface(Context context) {
190             Objects.requireNonNull(context);
191             Builder builder = newSystemInterface();
192             builder.withWakeLockInterface(new WakeLockInterface.DefaultImpl(context));
193             builder.withDisplayInterface(new DisplayInterface.DefaultImpl(context,
194                     builder.mWakeLockInterface));
195             builder.withIOInterface(new IOInterface.DefaultImpl(context));
196             builder.withStorageMonitoringInterface(new StorageMonitoringInterface.DefaultImpl());
197             builder.withSystemStateInterface(new SystemStateInterface.DefaultImpl(context));
198             return builder.withTimeInterface(new TimeInterface.DefaultImpl());
199         }
200 
fromBuilder(Builder otherBuilder)201         public static Builder fromBuilder(Builder otherBuilder) {
202             return newSystemInterface()
203                     .withDisplayInterface(otherBuilder.mDisplayInterface)
204                     .withIOInterface(otherBuilder.mIOInterface)
205                     .withStorageMonitoringInterface(otherBuilder.mStorageMonitoringInterface)
206                     .withSystemStateInterface(otherBuilder.mSystemStateInterface)
207                     .withTimeInterface(otherBuilder.mTimeInterface)
208                     .withWakeLockInterface(otherBuilder.mWakeLockInterface);
209         }
210 
withDisplayInterface(DisplayInterface displayInterface)211         public Builder withDisplayInterface(DisplayInterface displayInterface) {
212             mDisplayInterface = displayInterface;
213             return this;
214         }
215 
withIOInterface(IOInterface ioInterface)216         public Builder withIOInterface(IOInterface ioInterface) {
217             mIOInterface = ioInterface;
218             return this;
219         }
220 
withStorageMonitoringInterface(StorageMonitoringInterface storageMonitoringInterface)221         public Builder withStorageMonitoringInterface(StorageMonitoringInterface
222                 storageMonitoringInterface) {
223             mStorageMonitoringInterface = storageMonitoringInterface;
224             return this;
225         }
226 
withSystemStateInterface(SystemStateInterface systemStateInterface)227         public Builder withSystemStateInterface(SystemStateInterface systemStateInterface) {
228             mSystemStateInterface = systemStateInterface;
229             return this;
230         }
231 
withTimeInterface(TimeInterface timeInterface)232         public Builder withTimeInterface(TimeInterface timeInterface) {
233             mTimeInterface = timeInterface;
234             return this;
235         }
236 
withWakeLockInterface(WakeLockInterface wakeLockInterface)237         public Builder withWakeLockInterface(WakeLockInterface wakeLockInterface) {
238             mWakeLockInterface = wakeLockInterface;
239             return this;
240         }
241 
build()242         public SystemInterface build() {
243             return new SystemInterface(Objects.requireNonNull(mDisplayInterface),
244                 Objects.requireNonNull(mIOInterface),
245                 Objects.requireNonNull(mStorageMonitoringInterface),
246                 Objects.requireNonNull(mSystemStateInterface),
247                 Objects.requireNonNull(mTimeInterface),
248                 Objects.requireNonNull(mWakeLockInterface));
249         }
250     }
251 }
252