summaryrefslogtreecommitdiffstats
path: root/src-ambient/com/android/phone/common/ambient/AmbientConnection.java
blob: ffc23977df9d0bd98cf80735bfbc790e8a0aeda1 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
package com.android.phone.common.ambient;

import android.content.Context;
import android.content.pm.PackageManager;
import android.os.Bundle;
import android.util.Log;

import com.cyanogen.ambient.analytics.AnalyticsServices;
import com.cyanogen.ambient.callerinfo.CallerInfoServices;
import com.cyanogen.ambient.common.ConnectionResult;
import com.cyanogen.ambient.common.api.AmbientApiClient;
import com.cyanogen.ambient.deeplink.DeepLinkServices;
import com.cyanogen.ambient.discovery.DiscoveryManagerServices;
import com.cyanogen.ambient.discovery.NudgeServices;
import com.cyanogen.ambient.incall.InCallServices;

/**
 * Holds Ambient Client for all PIM apps
 */
public class AmbientConnection {

    private static boolean checkPermissionsGranted(Context context, String permission) {
        int status = context.checkCallingOrSelfPermission(permission);
        return status == PackageManager.PERMISSION_GRANTED;
    }

    private static final String INCALL_PERMISSION
            = "com.cyanogen.ambient.permission.BIND_INCALL_SERVICE";

    private static final String PUBLISH_DISCOVERY_NUDGE
            = "com.cyanogen.ambient.permission.PUBLISH_DISCOVERY_NUDGE";

    private static final String DEEPLINK_SERVICE_PERMISSION
            = "com.cyanogen.ambient.permission.BIND_DEEPLINK_SERVICE";

    private static final String DEEPLINK_DATABASE_PERMISSION
            = "com.cyanogen.ambient.permission.READ_DEEPLINK_DATABASE";

    public static final SingletonHolder<AmbientApiClient, Context> CLIENT =
            new SingletonHolder<AmbientApiClient, Context>() {
                private static final String TAG = "PhoneCommon.AmbientSingletonHolder";

                @Override
                protected AmbientApiClient create(Context context) {
                    AmbientApiClient.Builder builder = new AmbientApiClient.Builder(context);
                    builder.addApi(AnalyticsServices.API);
                    builder.addApi(CallerInfoServices.API);
                    builder.addApi(NudgeServices.API);

                    if (checkPermissionsGranted(context, INCALL_PERMISSION)) {
                        builder.addApi(InCallServices.API);
                    }

                    if (checkPermissionsGranted(context, PUBLISH_DISCOVERY_NUDGE)) {
                        builder.addApi(DiscoveryManagerServices.API);
                    }

                    if (checkPermissionsGranted(context, DEEPLINK_SERVICE_PERMISSION) &&
                            checkPermissionsGranted(context, DEEPLINK_DATABASE_PERMISSION)) {
                        builder.addApi(DeepLinkServices.API);
                    }

                    AmbientApiClient client = builder.build();

                    client.registerConnectionFailedListener(
                            new AmbientApiClient.OnConnectionFailedListener() {
                                @Override
                                public void onConnectionFailed(ConnectionResult result) {
                                    Log.w(TAG, "Connection failed: " + result);
                                }
                            });
                    client.registerDisconnectionListener(
                            new AmbientApiClient.OnDisconnectionListener() {
                                @Override
                                public void onDisconnection() {
                                    Log.d(TAG, "Connection disconnected");
                                }
                            });
                    client.registerConnectionCallbacks(
                            new AmbientApiClient.ConnectionCallbacks() {
                                @Override
                                public void onConnected(Bundle connectionHint) {
                                    Log.d(TAG, "Connection established");
                                }

                                @Override
                                public void onConnectionSuspended(int cause) {
                                    Log.d(TAG, "Connection suspended");
                                }
                            });
                    client.connect();
                    return client;
                }
            };

}