Home | History | Annotate | Download | only in vr
      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 package com.android.cts.verifier.vr;
     17 
     18 import android.content.ComponentName;
     19 import android.content.Intent;
     20 import android.os.IBinder;
     21 import android.service.vr.VrListenerService;
     22 import android.util.Log;
     23 
     24 import java.util.concurrent.ArrayBlockingQueue;
     25 import java.util.concurrent.atomic.AtomicInteger;
     26 
     27 public class MockVrListenerService extends VrListenerService {
     28     private static final String TAG = "MockVrListener";
     29     private static final AtomicInteger sNumBound = new AtomicInteger();
     30 
     31     private static final ArrayBlockingQueue<Event> sEventQueue = new ArrayBlockingQueue<>(4096);
     32 
     33     public static ArrayBlockingQueue<Event> getPendingEvents() {
     34         return sEventQueue;
     35     }
     36 
     37     public static int getNumBoundMockVrListeners() {
     38         return sNumBound.get();
     39     }
     40 
     41     public enum EventType{
     42         ONBIND,
     43         ONREBIND,
     44         ONUNBIND,
     45         ONCREATE,
     46         ONDESTROY,
     47         ONCURRENTVRMODEACTIVITYCHANGED
     48     }
     49 
     50     public static class Event {
     51         public final VrListenerService instance;
     52         public final EventType type;
     53         public final Object arg1;
     54 
     55         private Event(VrListenerService i, EventType t, Object o) {
     56             instance = i;
     57             type = t;
     58             arg1 = o;
     59         }
     60 
     61         public static Event build(VrListenerService instance, EventType type, Object argument1) {
     62             return new Event(instance, type, argument1);
     63         }
     64 
     65         public static Event build(VrListenerService instance, EventType type) {
     66             return new Event(instance, type, null);
     67         }
     68     }
     69 
     70     @Override
     71     public IBinder onBind(Intent intent) {
     72         Log.i(TAG, "onBind called");
     73         sNumBound.getAndIncrement();
     74         try {
     75             sEventQueue.put(Event.build(this, EventType.ONBIND, intent));
     76         } catch (InterruptedException e) {
     77             Log.e(TAG, "Service thread interrupted: " + e);
     78         }
     79         return super.onBind(intent);
     80     }
     81 
     82     @Override
     83     public void onRebind(Intent intent) {
     84         Log.i(TAG, "onRebind called");
     85         try {
     86             sEventQueue.put(Event.build(this, EventType.ONREBIND, intent));
     87         } catch (InterruptedException e) {
     88             Log.e(TAG, "Service thread interrupted: " + e);
     89         }
     90         super.onRebind(intent);
     91     }
     92 
     93     @Override
     94     public boolean onUnbind(Intent intent) {
     95         Log.i(TAG, "onUnbind called");
     96         sNumBound.getAndDecrement();
     97         try {
     98             sEventQueue.put(Event.build(this, EventType.ONUNBIND, intent));
     99         } catch (InterruptedException e) {
    100             Log.e(TAG, "Service thread interrupted: " + e);
    101         }
    102         return super.onUnbind(intent);
    103     }
    104 
    105     @Override
    106     public void onCreate() {
    107         Log.i(TAG, "onCreate called");
    108         try {
    109             sEventQueue.put(Event.build(this, EventType.ONCREATE));
    110         } catch (InterruptedException e) {
    111             Log.e(TAG, "Service thread interrupted: " + e);
    112         }
    113         super.onCreate();
    114     }
    115 
    116     @Override
    117     public void onDestroy() {
    118         Log.i(TAG, "onDestroy called");
    119         try {
    120             sEventQueue.put(Event.build(this, EventType.ONDESTROY));
    121         } catch (InterruptedException e) {
    122             Log.e(TAG, "Service thread interrupted: " + e);
    123         }
    124         super.onDestroy();
    125     }
    126 
    127     @Override
    128     public void onCurrentVrActivityChanged(ComponentName component) {
    129         Log.i(TAG, "onCurrentVrActivityChanged called with: " + component);
    130         try {
    131             sEventQueue.put(Event.build(this, EventType.ONCURRENTVRMODEACTIVITYCHANGED, component));
    132         } catch (InterruptedException e) {
    133             Log.e(TAG, "Service thread interrupted: " + e);
    134         }
    135     }
    136 
    137 }
    138