• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 package org.robolectric.shadows;
2 
3 import static com.google.common.base.Preconditions.checkNotNull;
4 
5 import android.app.wearable.WearableSensingManager;
6 import android.app.wearable.WearableSensingManager.StatusCode;
7 import android.content.ComponentName;
8 import android.os.ParcelFileDescriptor;
9 import android.os.PersistableBundle;
10 import android.os.SharedMemory;
11 import com.google.common.collect.Iterables;
12 import java.util.ArrayList;
13 import java.util.List;
14 import java.util.concurrent.Executor;
15 import java.util.function.Consumer;
16 import javax.annotation.Nonnull;
17 import javax.annotation.Nullable;
18 import org.robolectric.annotation.Implementation;
19 import org.robolectric.annotation.Implements;
20 import org.robolectric.annotation.Resetter;
21 import org.robolectric.versioning.AndroidVersions.U;
22 import org.robolectric.versioning.AndroidVersions.V;
23 
24 /** Shadow for VirtualDeviceManager. */
25 @Implements(
26     value = WearableSensingManager.class,
27     minSdk = U.SDK_INT,
28     // TODO: remove when minimum supported compileSdk is >= 34
29     isInAndroidSdk = false)
30 public class ShadowWearableSensingManager {
31 
32   private static @StatusCode Integer provideDataStreamResult =
33       WearableSensingManager.STATUS_SUCCESS;
34   private static @StatusCode Integer provideDataResult = WearableSensingManager.STATUS_SUCCESS;
35   private static @StatusCode Integer startHotwordRecognitionResult =
36       WearableSensingManager.STATUS_SUCCESS;
37   private static @StatusCode Integer stopHotwordRecognitionResult =
38       WearableSensingManager.STATUS_SUCCESS;
39   private static final ArrayList<PersistableBundle> dataBundleList = new ArrayList<>();
40   private static final ArrayList<SharedMemory> sharedMemoryList = new ArrayList<>();
41   private static ParcelFileDescriptor lastParcelFileDescriptor;
42 
43   @Implementation
provideDataStream( ParcelFileDescriptor parcelFileDescriptor, Executor executor, Consumer<Integer> statusConsumer)44   protected void provideDataStream(
45       ParcelFileDescriptor parcelFileDescriptor,
46       Executor executor,
47       Consumer<Integer> statusConsumer) {
48     lastParcelFileDescriptor = parcelFileDescriptor;
49     executor.execute(() -> statusConsumer.accept(provideDataStreamResult));
50   }
51 
52   @Implementation
provideData( PersistableBundle data, SharedMemory sharedMemory, Executor executor, @StatusCode Consumer<Integer> statusConsumer)53   protected void provideData(
54       PersistableBundle data,
55       SharedMemory sharedMemory,
56       Executor executor,
57       @StatusCode Consumer<Integer> statusConsumer) {
58     dataBundleList.add(data);
59     sharedMemoryList.add(sharedMemory);
60     executor.execute(() -> statusConsumer.accept(provideDataResult));
61   }
62 
63   @Implementation(minSdk = V.SDK_INT)
startHotwordRecognition( @ullable ComponentName targetVisComponentName, @Nonnull Executor executor, @Nonnull @StatusCode Consumer<Integer> statusConsumer)64   protected void startHotwordRecognition(
65       @Nullable ComponentName targetVisComponentName,
66       @Nonnull Executor executor,
67       @Nonnull @StatusCode Consumer<Integer> statusConsumer) {
68     checkNotNull(executor);
69     checkNotNull(statusConsumer);
70     executor.execute(() -> statusConsumer.accept(startHotwordRecognitionResult));
71   }
72 
73   @Implementation(minSdk = V.SDK_INT)
stopHotwordRecognition( @onnull Executor executor, @Nonnull @StatusCode Consumer<Integer> statusConsumer)74   protected void stopHotwordRecognition(
75       @Nonnull Executor executor, @Nonnull @StatusCode Consumer<Integer> statusConsumer) {
76     checkNotNull(executor);
77     checkNotNull(statusConsumer);
78     executor.execute(() -> statusConsumer.accept(stopHotwordRecognitionResult));
79   }
80 
setProvideDataStreamResult(@tatusCode Integer provideDataStreamResult)81   public void setProvideDataStreamResult(@StatusCode Integer provideDataStreamResult) {
82     ShadowWearableSensingManager.provideDataStreamResult = provideDataStreamResult;
83   }
84 
setProvideDataResult(@tatusCode Integer provideDataResult)85   public void setProvideDataResult(@StatusCode Integer provideDataResult) {
86     ShadowWearableSensingManager.provideDataResult = provideDataResult;
87   }
88 
89   /**
90    * Sets the status code that will be sent to the {@code @StatusCode Consumer<Integer>} when {@link
91    * #startHotwordRecognition} is called.
92    */
setStartHotwordRecognitionResult( @onnull @tatusCode Integer startHotwordRecognitionResult)93   public void setStartHotwordRecognitionResult(
94       @Nonnull @StatusCode Integer startHotwordRecognitionResult) {
95     checkNotNull(startHotwordRecognitionResult);
96     ShadowWearableSensingManager.startHotwordRecognitionResult = startHotwordRecognitionResult;
97   }
98 
99   /**
100    * Sets the status code that will be sent to the {@code @StatusCode Consumer<Integer>} when {@link
101    * #stopHotwordRecognition} is called.
102    */
setStopHotwordRecognitionResult( @onnull @tatusCode Integer stopHotwordRecognitionResult)103   public void setStopHotwordRecognitionResult(
104       @Nonnull @StatusCode Integer stopHotwordRecognitionResult) {
105     checkNotNull(stopHotwordRecognitionResult);
106     ShadowWearableSensingManager.stopHotwordRecognitionResult = stopHotwordRecognitionResult;
107   }
108 
getLastParcelFileDescriptor()109   public ParcelFileDescriptor getLastParcelFileDescriptor() {
110     return lastParcelFileDescriptor;
111   }
112 
getLastDataBundle()113   public PersistableBundle getLastDataBundle() {
114     return dataBundleList.isEmpty() ? null : Iterables.getLast(dataBundleList);
115   }
116 
getAllDataBundles()117   public List<PersistableBundle> getAllDataBundles() {
118     return new ArrayList<>(dataBundleList);
119   }
120 
getLastSharedMemory()121   public SharedMemory getLastSharedMemory() {
122     return sharedMemoryList.isEmpty() ? null : Iterables.getLast(sharedMemoryList);
123   }
124 
getAllSharedMemories()125   public List<SharedMemory> getAllSharedMemories() {
126     return new ArrayList<>(sharedMemoryList);
127   }
128 
129   @Resetter
reset()130   public static void reset() {
131     provideDataStreamResult = WearableSensingManager.STATUS_SUCCESS;
132     provideDataResult = WearableSensingManager.STATUS_SUCCESS;
133     startHotwordRecognitionResult = WearableSensingManager.STATUS_SUCCESS;
134     stopHotwordRecognitionResult = WearableSensingManager.STATUS_SUCCESS;
135     dataBundleList.clear();
136     sharedMemoryList.clear();
137     lastParcelFileDescriptor = null;
138   }
139 }
140