Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a8593b07 authored by Stephen Bird's avatar Stephen Bird Committed by Erica Chang
Browse files

[2/4] Update contacts for CallMethodHelper refactor

Change-Id: I9b165d9ddb3fd4e66657325447af08781c487a5d
parent 68cf084c
Loading
Loading
Loading
Loading
+2 −5
Original line number Diff line number Diff line
@@ -24,7 +24,6 @@ import android.content.ContentUris;
import android.content.Context;
import android.content.SharedPreferences;
import android.os.AsyncTask;
import android.os.Bundle;
import android.os.StrictMode;
import android.preference.PreferenceManager;
import android.provider.ContactsContract.Contacts;
@@ -32,13 +31,11 @@ import android.util.Log;

import com.android.contacts.common.ContactPhotoManager;
import com.android.contacts.common.list.ContactListFilterController;
import com.android.contacts.common.model.AccountTypeManager;
import com.android.contacts.common.testing.InjectedServices;
import com.android.contacts.common.util.Constants;
import com.android.contacts.commonbind.analytics.AnalyticsUtil;
import com.android.contacts.incall.InCallPluginHelper;
import com.android.contacts.incall.InCallMetricsHelper;
import com.android.phone.common.incall.CallMethodHelper;
import com.android.phone.common.incall.ContactsDataSubscription;

import com.google.common.annotations.VisibleForTesting;

@@ -127,7 +124,7 @@ public final class ContactsApplication extends Application {
        }

        AnalyticsUtil.initialize(this);
        InCallPluginHelper.init(this);
        ContactsDataSubscription.init(this);
        InCallMetricsHelper.init(this);
    }

+12 −11
Original line number Diff line number Diff line
@@ -59,7 +59,6 @@ import android.widget.Toolbar;

import com.android.contacts.ContactsActivity;
import com.android.contacts.incall.InCallMetricsHelper;
import com.android.contacts.incall.InCallPluginHelper;
import com.android.contacts.incall.InCallPluginInfo;
import com.android.contacts.R;
import com.android.contacts.activities.ActionBarAdapter.TabState;
@@ -110,9 +109,10 @@ import com.android.contacts.common.vcard.ExportVCardActivity;
import com.android.contacts.common.vcard.VCardCommonArguments;
import com.android.contacts.util.DialogManager;
import com.android.contactsbind.HelpUtils;
import com.android.phone.common.incall.CallMethodHelper;
import com.android.phone.common.incall.ContactsDataSubscription;
import com.android.phone.common.incall.CallMethodInfo;
import com.android.phone.common.incall.CallMethodUtils;
import com.android.phone.common.incall.utils.CallMethodFilters;
import com.android.phone.common.incall.utils.CallMethodUtils;

import java.util.HashMap;
import java.util.List;
@@ -543,7 +543,7 @@ public class PeopleActivity extends ContactsActivity implements

    @Override
    protected void onPause() {
        InCallPluginHelper.unsubscribe(CALL_METHOD_HELPER_SUBSCRIBER_ID);
        ContactsDataSubscription.get(this).unsubscribe(CALL_METHOD_HELPER_SUBSCRIBER_ID);
        mOptionsMenuContactsAvailable = false;
        mProviderStatusWatcher.stop();
        super.onPause();
@@ -556,9 +556,9 @@ public class PeopleActivity extends ContactsActivity implements
        super.onResume();

        onResumeInit();
        if (InCallPluginHelper.subscribe(CALL_METHOD_HELPER_SUBSCRIBER_ID,
        if (ContactsDataSubscription.get(this).subscribe(CALL_METHOD_HELPER_SUBSCRIBER_ID,
                pluginsUpdatedReceiver)) {
            InCallPluginHelper.refreshDynamicItems();
            ContactsDataSubscription.get(this).refreshDynamicItems();
        }
    }

@@ -1848,11 +1848,11 @@ public class PeopleActivity extends ContactsActivity implements
        return TabState.ALL;
    }

    private CallMethodHelper.CallMethodReceiver pluginsUpdatedReceiver =
            new CallMethodHelper.CallMethodReceiver() {
    private ContactsDataSubscription.PluginChanged<CallMethodInfo> pluginsUpdatedReceiver =
            new ContactsDataSubscription.PluginChanged<CallMethodInfo>() {
                @Override
                public void onChanged(HashMap<ComponentName, CallMethodInfo> callMethodInfos) {
                    updatePlugins(callMethodInfos);
                public void onChanged(HashMap<ComponentName, CallMethodInfo> pluginInfos) {
                    updatePlugins(pluginInfos);
                }
            };

@@ -1890,7 +1890,8 @@ public class PeopleActivity extends ContactsActivity implements
    private synchronized void updatePlugins(HashMap<ComponentName, CallMethodInfo>
                                                     callMethodInfo) {
        HashMap<ComponentName, CallMethodInfo> newCmMap = (HashMap<ComponentName,
                CallMethodInfo>) CallMethodHelper.getAllEnabledCallMethods();
                CallMethodInfo>) CallMethodFilters.getAllEnabledCallMethods(
                ContactsDataSubscription.get(this));
        if (DEBUG) Log.d(TAG, "updatePlugins newCmMap size:" + newCmMap.size());
        boolean updateTabs = false;
        String lastSelectedTabTag = mTabTitles.get(mActionBarAdapter.getCurrentTab()).mTag;
+3 −1
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.contacts.incall;

import com.android.phone.common.incall.ContactsDataSubscription;

import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
@@ -28,6 +30,6 @@ public class CallMethodStatusReceiver extends BroadcastReceiver {
    @Override
    public void onReceive(Context context, Intent intent) {
        if (DEBUG) Log.d(TAG, "plugin status changed");
        InCallPluginHelper.refresh();
        ContactsDataSubscription.get(context).refresh();
    }
}
+5 −3
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@ import android.util.Log;

import com.android.phone.common.ambient.AmbientConnection;
import com.android.phone.common.incall.CallMethodInfo;
import com.android.phone.common.incall.ContactsDataSubscription;
import com.cyanogen.ambient.analytics.AnalyticsServices;
import com.cyanogen.ambient.analytics.Event;
import com.cyanogen.ambient.incall.InCallServices;
@@ -169,7 +170,8 @@ public class InCallMetricsHelper {
            Events event = cv.containsKey(Parameters.EVENT_NAME.toCol()) ?
                    Events.valueOf(cv.getAsString(Parameters.EVENT_NAME.toCol())) :
                    Events.UNKNOWN;
            Set<String> plugins = InCallPluginHelper.getAllPluginComponentNames();
            Set<String> plugins = ContactsDataSubscription.get(context)
                    .getAllPluginComponentNames();
            sendEvent(context, cat, event, getExtraFields(cat, event, cv), plugins);
        }
    }
@@ -423,8 +425,8 @@ public class InCallMetricsHelper {
                if (!statsOptIn(context)) {
                    return;
                }
                HashMap<ComponentName, CallMethodInfo> plugins = InCallPluginHelper
                        .getAllCallMethods();
                HashMap<ComponentName, CallMethodInfo> plugins = ContactsDataSubscription.get
                        (context).getPluginInfo();
                HashMap<String, String> pluginMap = new HashMap<String, String>();
                for (CallMethodInfo cmi : plugins.values()) {
                    if (DEBUG) {
+0 −133
Original line number Diff line number Diff line
/*
 * Copyright (C) 2016 The CyanogenMod Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.contacts.incall;

import android.content.ComponentName;
import android.content.Context;
import android.os.Handler;
import android.util.Log;

import com.android.phone.common.ambient.AmbientConnection;
import com.android.phone.common.incall.CallMethodHelper;
import com.android.phone.common.incall.CallMethodInfo;
import com.cyanogen.ambient.common.api.PendingResult;
import com.cyanogen.ambient.common.api.ResultCallback;
import com.cyanogen.ambient.discovery.util.NudgeKey;
import com.cyanogen.ambient.incall.extension.InCallContactInfo;
import com.cyanogen.ambient.incall.InCallServices;
import com.cyanogen.ambient.incall.results.InstalledPluginsResult;

import java.util.HashMap;
import java.util.HashSet;
import java.util.Set;

public class InCallPluginHelper extends CallMethodHelper {
    private static final String TAG = InCallPluginHelper.class.getSimpleName();

    protected static synchronized InCallPluginHelper getInstance() {
        if (sInstance == null) {
            sInstance = new InCallPluginHelper();
        }
        return (InCallPluginHelper) sInstance;
    }

    public static void init(Context context) {
        InCallPluginHelper helper = getInstance();
        helper.mContext = context;
        helper.mClient = AmbientConnection.CLIENT.get(context);
        helper.mInCallApi = InCallServices.getInstance();
        helper.mMainHandler = new Handler(context.getMainLooper());

        refresh();
    }

    public static void refresh() {
        updateCallPlugins();
    }

    public static void refreshDynamicItems() {
        HashMap<ResultCallback, PendingResult> apiCallbacks = new HashMap<ResultCallback,
                PendingResult>();
        for (ComponentName cn : mCallMethodInfos.keySet()) {
            getCallMethodAuthenticated(cn, apiCallbacks);
            getCallMethodAccountHandle(cn, apiCallbacks);
        }
        executeAll(apiCallbacks);
    }

    public static void refreshPendingIntents(InCallContactInfo contactInfo) {
        for (ComponentName cn : mCallMethodInfos.keySet()) {
            getInviteIntent(cn, contactInfo);
            getDirectorySearchIntent(cn, contactInfo.mLookupUri);
        }
    }

    protected static void updateCallPlugins() {
        if (DEBUG) Log.d(TAG, "+++updateCallPlugins");
        getInstance().mInCallApi.getInstalledPlugins(getInstance().mClient)
                .setResultCallback(new ResultCallback<InstalledPluginsResult>() {
                    @Override
                    public void onResult(InstalledPluginsResult installedPluginsResult) {
                        // got installed components
                        mInstalledPlugins = installedPluginsResult.components;

                        synchronized (mCallMethodInfos) {
                            mCallMethodInfos.clear();
                        }

                        if (mInstalledPlugins == null || mInstalledPlugins.size() == 0) {
                            broadcast();
                            return;
                        }

                        HashMap<ResultCallback, PendingResult> apiCallbacks =
                                new HashMap<ResultCallback, PendingResult>();
                        for (ComponentName cn : mInstalledPlugins) {
                            mCallMethodInfos.put(cn, new CallMethodInfo());
                            getCallMethodInfo(cn, apiCallbacks);
                            getCallMethodMimeType(cn, apiCallbacks);
                            getCallMethodStatus(cn, apiCallbacks);
                            getCallMethodVideoCallableMimeType(cn, apiCallbacks);
                            getCallMethodImMimeType(cn, apiCallbacks);
                            getCallMethodAuthenticated(cn, apiCallbacks);
                            getLoginIntent(cn, apiCallbacks);
                            getNudgeConfiguration(cn, NudgeKey.INCALL_CONTACT_FRAGMENT_LOGIN,
                                    apiCallbacks);
                            getNudgeConfiguration(cn, NudgeKey.INCALL_CONTACT_CARD_LOGIN,
                                    apiCallbacks);
                            getNudgeConfiguration(cn, NudgeKey.INCALL_CONTACT_CARD_DOWNLOAD,
                                    apiCallbacks);
                            getDefaultDirectorySearchIntent(cn, apiCallbacks);
                            // If you add any more callbacks, be sure to update
                            // EXPECTED_RESULT_CALLBACKS
                            // and EXPECTED_DYNAMIC_RESULT_CALLBACKS if the callback is dynamic
                            // with the proper count.
                        }
                        executeAll(apiCallbacks);
                    }
                });
    }

    public static Set<String> getAllPluginComponentNames() {
        Set<String> names = new HashSet<String>();
        HashMap<ComponentName, CallMethodInfo> plugins = InCallPluginHelper.getAllCallMethods();
        for (ComponentName cn : plugins.keySet()) {
            names.add(cn.flattenToString());
        }
        return names;
    }
}
Loading