Home | History | Annotate | Download | only in util
      1 /*
      2  * Copyright (C) 2015 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.camera.util;
     18 
     19 import android.annotation.TargetApi;
     20 import android.app.ActivityManager;
     21 import android.app.KeyguardManager;
     22 import android.app.NotificationManager;
     23 import android.app.admin.DevicePolicyManager;
     24 import android.content.Context;
     25 import android.hardware.SensorManager;
     26 import android.hardware.camera2.CameraManager;
     27 import android.hardware.display.DisplayManager;
     28 import android.location.LocationManager;
     29 import android.media.AudioManager;
     30 import android.os.Build.VERSION_CODES;
     31 import android.os.PowerManager;
     32 import android.os.Vibrator;
     33 import android.view.LayoutInflater;
     34 import android.view.WindowManager;
     35 import android.view.accessibility.AccessibilityManager;
     36 
     37 import com.android.camera.debug.Log;
     38 import com.android.camera.debug.Log.Tag;
     39 
     40 /**
     41  * Initializable singleton set of android service providers.
     42  * Some services may be null
     43  */
     44 public class AndroidServices {
     45     private static Tag TAG = new Tag("AndroidServices");
     46     /** Log all requests; otherwise will only log long requests. */
     47     private static final boolean LOG_ALL_REQUESTS = false;
     48     /** Log requests if this threshold is exceeded. */
     49     private static final int LOG_THRESHOLD_MILLIS = 10;
     50 
     51     private static class Singleton {
     52         private static final AndroidServices INSTANCE =
     53               new AndroidServices(AndroidContext.instance().get());
     54     }
     55 
     56     public static AndroidServices instance() {
     57         return Singleton.INSTANCE;
     58     }
     59 
     60     private final Context mContext;
     61     private AndroidServices(Context context) {
     62         mContext = context;
     63     }
     64 
     65     public ActivityManager provideActivityManager() {
     66         return (ActivityManager) getSystemService(Context.ACTIVITY_SERVICE);
     67     }
     68 
     69     public AudioManager provideAudioManager() {
     70         return (AudioManager) getSystemService(Context.AUDIO_SERVICE);
     71     }
     72 
     73     public AccessibilityManager provideAccessibilityManager() {
     74         return (AccessibilityManager) getSystemService(Context.ACCESSIBILITY_SERVICE);
     75     }
     76 
     77     @TargetApi(VERSION_CODES.LOLLIPOP)
     78     public CameraManager provideCameraManager() {
     79         CameraManager cameraManager = null;
     80 
     81         try {
     82             Object service = ApiHelper.HAS_CAMERA_2_API ? getSystemService(Context.CAMERA_SERVICE)
     83                   : null;
     84             cameraManager = (CameraManager) service;
     85         } catch (IllegalStateException ex) {
     86             Log.e(TAG, "Could not get the CAMERA_SERVICE");
     87             cameraManager = null;
     88         }
     89 
     90         return cameraManager;
     91     }
     92 
     93     public DevicePolicyManager provideDevicePolicyManager() {
     94         return (DevicePolicyManager) getSystemService(Context.DEVICE_POLICY_SERVICE);
     95     }
     96 
     97     public DisplayManager provideDisplayManager() {
     98         return (DisplayManager) getSystemService(Context.DISPLAY_SERVICE);
     99     }
    100 
    101     public KeyguardManager provideKeyguardManager() {
    102         return (KeyguardManager) getSystemService(Context.KEYGUARD_SERVICE);
    103     }
    104 
    105     public LayoutInflater provideLayoutInflater() {
    106         return (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    107     }
    108 
    109     public LocationManager provideLocationManager() {
    110         return (LocationManager) getSystemService(Context.LOCATION_SERVICE);
    111     }
    112 
    113     public NotificationManager provideNotificationManager() {
    114         return (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
    115     }
    116 
    117     public PowerManager providePowerManager() {
    118         return (PowerManager) getSystemService(Context.POWER_SERVICE);
    119     }
    120 
    121     public SensorManager provideSensorManager() {
    122         return (SensorManager) getSystemService(Context.SENSOR_SERVICE);
    123     }
    124 
    125     public Vibrator provideVibrator() {
    126         return (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
    127     }
    128 
    129     public WindowManager provideWindowManager() {
    130         return (WindowManager) getSystemService(Context.WINDOW_SERVICE);
    131     }
    132 
    133     private Object getSystemService(String service) {
    134         try {
    135             long start = System.currentTimeMillis();
    136             Object result = mContext.getSystemService(service);
    137             long duration = System.currentTimeMillis() - start;
    138             if (duration > LOG_THRESHOLD_MILLIS) {
    139                 Log.w(TAG, "Warning: providing system service " + service + " took " +
    140                         duration + "ms");
    141             } else if (LOG_ALL_REQUESTS) {
    142                 Log.v(TAG, "Provided system service " + service + " in " + duration + "ms");
    143             }
    144             return result;
    145         } catch (Exception e) {
    146             return null;
    147         }
    148     }
    149 }
    150