• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2015, Motorola Mobility LLC
3  * All rights reserved.
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted provided that the following conditions are met:
7  *     - Redistributions of source code must retain the above copyright
8  *       notice, this list of conditions and the following disclaimer.
9  *     - Redistributions in binary form must reproduce the above copyright
10  *       notice, this list of conditions and the following disclaimer in the
11  *       documentation and/or other materials provided with the distribution.
12  *     - Neither the name of Motorola Mobility nor the
13  *       names of its contributors may be used to endorse or promote products
14  *       derived from this software without specific prior written permission.
15  *
16  * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
17  * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO,
18  * THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19  * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL MOTOROLA MOBILITY LLC BE LIABLE
20  * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
21  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
22  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
23  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
24  * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
25  * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH
26  * DAMAGE.
27  */
28 
29 package com.android.service.ims.presence;
30 
31 import android.app.Service;
32 import android.content.Context;
33 import android.content.Intent;
34 import android.telephony.CarrierConfigManager;
35 import android.os.Handler;
36 import android.os.IBinder;
37 import android.os.PersistableBundle;
38 import android.os.RemoteException;
39 import android.os.ServiceManager;
40 import android.os.SystemProperties;
41 
42 import com.android.ims.internal.Logger;
43 
44 public class PollingService extends Service {
45     /**
46      * The logger
47      */
48     private Logger logger = Logger.getLogger(this.getClass().getName());
49 
50     private CapabilityPolling mCapabilityPolling = null;
51 
52     /**
53      * Constructor
54      */
PollingService()55     public PollingService() {
56         logger.debug("PollingService()");
57     }
58 
59     @Override
onCreate()60     public void onCreate() {
61         logger.debug("onCreate()");
62 
63         if (isEabSupported(this)) {
64             mCapabilityPolling = CapabilityPolling.getInstance(this);
65             mCapabilityPolling.start();
66         }
67     }
68 
69     @Override
onStartCommand(Intent intent, int flags, int startId)70     public int onStartCommand(Intent intent, int flags, int startId) {
71         logger.debug("onStartCommand(), intent: " + intent +
72                 ", flags: " + flags + ", startId: " + startId);
73 
74         if (!isRcsSupported(this)) {
75             stopSelf();
76             return START_NOT_STICKY;
77         }
78 
79         return super.onStartCommand(intent, flags, startId);
80     }
81 
82     /**
83       * Cleans up when the service is destroyed
84       */
85     @Override
onDestroy()86     public void onDestroy() {
87         logger.debug("onDestroy()");
88 
89         if (mCapabilityPolling != null) {
90             mCapabilityPolling.stop();
91             mCapabilityPolling = null;
92         }
93 
94         super.onDestroy();
95     }
96 
97     @Override
onBind(Intent intent)98     public IBinder onBind(Intent intent) {
99         logger.debug("onBind(), intent: " + intent);
100 
101         if (!isRcsSupported(this)) {
102             return null;
103         }
104 
105         logger.debug("onBind add services here");
106         return null;
107     }
108 
isRcsSupported(Context context)109     static boolean isRcsSupported(Context context) {
110         return isRcsSupportedByDevice() && isRcsSupportedByCarrier(context);
111     }
112 
isEabSupported(Context context)113     private static boolean isEabSupported(Context context) {
114         return isEabSupportedByDevice() && isRcsSupportedByCarrier(context);
115     }
116 
isRcsSupportedByCarrier(Context context)117     private static boolean isRcsSupportedByCarrier(Context context) {
118         CarrierConfigManager configManager = context.getSystemService(CarrierConfigManager.class);
119         if (configManager != null) {
120             PersistableBundle b = configManager.getConfig();
121             if (b != null) {
122                 return b.getBoolean(CarrierConfigManager.KEY_USE_RCS_PRESENCE_BOOL, false);
123             }
124         }
125         return true;
126     }
127 
isRcsSupportedByDevice()128     private static boolean isRcsSupportedByDevice() {
129         String rcsSupported = SystemProperties.get("persist.rcs.supported");
130         return "1".equals(rcsSupported);
131     }
132 
isEabSupportedByDevice()133     private static boolean isEabSupportedByDevice() {
134         String eabSupported = SystemProperties.get("persist.eab.supported");
135         return ("0".equals(eabSupported)) ? false : true;
136     }
137 }
138