summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorStephen Bird <sbird@cyngn.com>2016-01-21 19:03:29 -0800
committerStephen Bird <sbird@cyngn.com>2016-04-08 10:16:51 -0700
commit3fca833622c489eadf72148d36aa5f199c610975 (patch)
tree2ff66a02274f23c8dca4140cbd4ac137effd35d1 /src/com
parented6e9210c3e726d1a050a2587f943aaa496649a1 (diff)
downloadandroid_packages_apps_Dialer-3fca833622c489eadf72148d36aa5f199c610975.tar.gz
android_packages_apps_Dialer-3fca833622c489eadf72148d36aa5f199c610975.tar.bz2
android_packages_apps_Dialer-3fca833622c489eadf72148d36aa5f199c610975.zip
Move CallMethod items to PhoneCommon
Change-Id: I3d94a5d619274e5aecac7646ab71568d84e25456
Diffstat (limited to 'src/com')
-rw-r--r--src/com/android/dialer/DialerApplication.java57
-rw-r--r--src/com/android/dialer/DialtactsActivity.java10
-rw-r--r--src/com/android/dialer/calllog/CallLogAdapter.java5
-rw-r--r--src/com/android/dialer/calllog/CallLogFragment.java22
-rw-r--r--src/com/android/dialer/calllog/CallLogListItemViewHolder.java4
-rw-r--r--src/com/android/dialer/database/DialerDatabaseHelper.java2
-rw-r--r--src/com/android/dialer/dialpad/DialpadFragment.java9
-rw-r--r--src/com/android/dialer/incall/CallMethodHelper.java696
-rw-r--r--src/com/android/dialer/incall/CallMethodInfo.java217
-rw-r--r--src/com/android/dialer/incall/CallMethodStatusReceiver.java1
-rw-r--r--src/com/android/dialer/incall/CallMethodUtils.java108
-rw-r--r--src/com/android/dialer/interactions/PhoneNumberInteraction.java2
-rw-r--r--src/com/android/dialer/list/SmartDialSearchFragment.java6
-rw-r--r--src/com/android/dialer/list/SpeedDialFragment.java5
-rw-r--r--src/com/android/dialer/settings/DialerSettingsActivity.java9
-rw-r--r--src/com/android/dialer/util/SingletonHolder.java50
16 files changed, 21 insertions, 1182 deletions
diff --git a/src/com/android/dialer/DialerApplication.java b/src/com/android/dialer/DialerApplication.java
index cbef12573..041ded3e9 100644
--- a/src/com/android/dialer/DialerApplication.java
+++ b/src/com/android/dialer/DialerApplication.java
@@ -17,71 +17,18 @@
package com.android.dialer;
import android.app.Application;
-import android.content.Context;
-import android.os.Bundle;
import android.os.Trace;
-import android.util.Log;
import com.android.contacts.common.extensions.ExtensionsFactory;
import com.android.contacts.commonbind.analytics.AnalyticsUtil;
-import com.android.dialer.incall.CallMethodHelper;
-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.discovery.DiscoveryManagerServices;
-import com.cyanogen.ambient.discovery.NudgeServices;
-import com.cyanogen.ambient.incall.InCallServices;
-import com.android.dialer.util.SingletonHolder;
+import com.android.phone.common.incall.CallMethodHelper;
+
public class DialerApplication extends Application {
private static final String TAG = "DialerApplication";
- public static final SingletonHolder<AmbientApiClient, Context> ACLIENT =
- new SingletonHolder<AmbientApiClient, Context>() {
- private static final String TAG = "Dialer.AmbientSingletonHolder";
-
- @Override
- protected AmbientApiClient create(Context context) {
- AmbientApiClient client = new AmbientApiClient.Builder(context)
- .addApi(AnalyticsServices.API)
- .addApi(InCallServices.API)
- .addApi(CallerInfoServices.API)
- .addApi(NudgeServices.API)
- .addApi(DiscoveryManagerServices.API)
- .build();
-
- client.registerConnectionFailedListener(
- new AmbientApiClient.OnConnectionFailedListener() {
- @Override
- public void onConnectionFailed(ConnectionResult result) {
- Log.w(TAG, "Ambient connection failed: " + result);
- }
- });
- client.registerDisconnectionListener(
- new AmbientApiClient.OnDisconnectionListener() {
- @Override
- public void onDisconnection() {
- Log.d(TAG, "Ambient connection disconnected");
- }
- });
- client.registerConnectionCallbacks(
- new AmbientApiClient.ConnectionCallbacks() {
- @Override
- public void onConnected(Bundle connectionHint) {
- Log.d(TAG, "Ambient connection established");
- }
- @Override
- public void onConnectionSuspended(int cause) {
- Log.d(TAG, "Ambient connection suspended");
- }
- });
- client.connect();
- return client;
- }
- };
@Override
public void onCreate() {
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 443fef4b8..c1e3ff1d8 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -33,10 +33,7 @@ import android.os.Handler;
import android.os.Looper;
import android.os.Trace;
import android.provider.CallLog.Calls;
-import android.os.RemoteException;
-import android.os.ServiceManager;
import android.preference.PreferenceManager;
-import android.provider.CallLog.Calls;
import android.provider.ContactsContract;
import android.speech.RecognizerIntent;
import android.support.v4.view.ViewPager;
@@ -54,7 +51,6 @@ import android.view.MenuItem;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnDragListener;
-import android.view.View.OnTouchListener;
import android.view.ViewTreeObserver;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
@@ -79,7 +75,6 @@ import com.android.dialer.database.DialerDatabaseHelper;
import com.android.dialer.dialpad.DialpadFragment;
import com.android.dialer.dialpad.SmartDialNameMatcher;
import com.android.dialer.dialpad.SmartDialPrefix;
-import com.android.dialer.incall.CallMethodInfo;
import com.android.dialer.interactions.PhoneNumberInteraction;
import com.android.dialer.list.DragDropController;
import com.android.dialer.list.ListsFragment;
@@ -95,9 +90,10 @@ import com.android.dialer.util.IntentUtil;
import com.android.dialer.util.DialerUtils;
import com.android.dialer.widget.ActionBarController;
import com.android.dialer.widget.SearchEditTextLayout;
-import com.android.dialer.widget.SearchEditTextLayout.Callback;
import com.android.dialerbind.DatabaseHelperManager;
import com.android.phone.common.animation.AnimUtils;
+import com.android.phone.common.ambient.AmbientConnection;
+import com.android.phone.common.incall.CallMethodInfo;
import com.android.phone.common.util.SettingsUtil;
import com.android.phone.common.animation.AnimationListenerAdapter;
@@ -1313,7 +1309,7 @@ public class DialtactsActivity extends TransactionSafeActivity implements View.O
new StartInCallCallReceiver(new Handler(Looper.getMainLooper())));
InCallServices.getInstance().startVoiceCallForMimeType(
- DialerApplication.ACLIENT.get(this), mimeType, request);
+ AmbientConnection.CLIENT.get(this), mimeType, request);
}
mClearSearchOnPause = true;
}
diff --git a/src/com/android/dialer/calllog/CallLogAdapter.java b/src/com/android/dialer/calllog/CallLogAdapter.java
index 24b73abdc..b985194da 100644
--- a/src/com/android/dialer/calllog/CallLogAdapter.java
+++ b/src/com/android/dialer/calllog/CallLogAdapter.java
@@ -23,12 +23,10 @@ import android.content.SharedPreferences;
import android.content.res.Resources;
import android.database.Cursor;
import android.net.Uri;
-import android.provider.ContactsContract;
import android.provider.ContactsContract.CommonDataKinds.Phone;
import android.support.v7.widget.RecyclerView;
import android.os.Bundle;
import android.os.Trace;
-import android.preference.PreferenceActivity;
import android.preference.PreferenceManager;
import android.provider.CallLog;
import android.support.v7.widget.RecyclerView.ViewHolder;
@@ -36,7 +34,6 @@ import android.telecom.PhoneAccountHandle;
import android.telephony.PhoneNumberUtils;
import android.telephony.TelephonyManager;
import android.text.TextUtils;
-import android.util.Log;
import android.view.ContextMenu;
import android.view.LayoutInflater;
import android.view.MenuItem;
@@ -44,7 +41,6 @@ import android.view.MenuItem.OnMenuItemClickListener;
import android.view.View;
import android.view.View.AccessibilityDelegate;
import android.view.ViewGroup;
-import android.view.ViewTreeObserver;
import android.view.ContextMenu.ContextMenuInfo;
import android.view.accessibility.AccessibilityEvent;
@@ -56,7 +52,6 @@ import com.android.dialer.PhoneCallDetails;
import com.android.dialer.R;
import com.android.dialer.contactinfo.ContactInfoCache;
import com.android.dialer.contactinfo.ContactInfoCache.OnContactInfoChangedListener;
-import com.android.dialer.incall.CallMethodHelper;
import com.android.dialer.util.DialerUtils;
import com.android.dialer.util.PhoneNumberUtil;
import com.android.dialer.voicemail.VoicemailPlaybackPresenter;
diff --git a/src/com/android/dialer/calllog/CallLogFragment.java b/src/com/android/dialer/calllog/CallLogFragment.java
index e6463cc84..496f7bf5a 100644
--- a/src/com/android/dialer/calllog/CallLogFragment.java
+++ b/src/com/android/dialer/calllog/CallLogFragment.java
@@ -18,24 +18,17 @@ package com.android.dialer.calllog;
import static android.Manifest.permission.READ_CALL_LOG;
-import android.animation.Animator;
-import android.animation.AnimatorListenerAdapter;
-import android.animation.ValueAnimator;
import android.app.Activity;
-import android.app.DialogFragment;
import android.app.Fragment;
import android.app.KeyguardManager;
import android.content.ComponentName;
import android.content.ContentResolver;
import android.content.Context;
-import android.content.Intent;
import android.content.pm.PackageManager;
import android.database.ContentObserver;
import android.database.Cursor;
-import android.graphics.Rect;
import android.os.Bundle;
import android.os.Handler;
-import android.provider.CallLog;
import android.provider.CallLog.Calls;
import android.provider.ContactsContract;
import android.provider.VoicemailContract.Status;
@@ -44,31 +37,20 @@ import android.support.v7.widget.LinearLayoutManager;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
-import android.view.View.OnClickListener;
-import android.view.ViewGroup.LayoutParams;
-import android.widget.ListView;
-import android.widget.TextView;
import com.android.contacts.common.GeoUtil;
import com.android.contacts.common.util.PermissionsUtil;
-import com.android.contacts.common.util.ViewUtil;
import com.android.dialer.R;
-import com.android.dialer.incall.CallMethodInfo;
-import com.android.dialer.list.ListsFragment.HostInterface;
-import com.android.dialer.incall.CallMethodHelper;
-import com.android.dialer.util.DialerUtils;
import com.android.dialer.util.EmptyLoader;
import com.android.dialer.voicemail.VoicemailPlaybackPresenter;
-import com.android.dialer.voicemail.VoicemailStatusHelper;
-import com.android.dialer.voicemail.VoicemailStatusHelper.StatusMessage;
-import com.android.dialer.voicemail.VoicemailStatusHelperImpl;
import com.android.dialer.widget.EmptyContentView;
import com.android.dialer.widget.EmptyContentView.OnEmptyViewActionButtonClickedListener;
import com.android.dialerbind.ObjectFactory;
+import com.android.phone.common.incall.CallMethodHelper;
+import com.android.phone.common.incall.CallMethodInfo;
import com.cyanogen.ambient.incall.CallLogConstants;
import java.util.HashMap;
-import java.util.List;
import android.util.Log;
diff --git a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
index a852819d9..5cd1cef09 100644
--- a/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
+++ b/src/com/android/dialer/calllog/CallLogListItemViewHolder.java
@@ -38,8 +38,6 @@ import android.widget.QuickContactBadge;
import android.widget.ImageView;
import android.widget.TextView;
-import com.android.dialer.incall.CallMethodInfo;
-import com.android.dialer.incall.CallMethodHelper;
import com.android.dialer.widget.DialerQuickContact;
import com.android.internal.telephony.util.BlacklistUtils;
@@ -55,6 +53,8 @@ import com.android.dialer.util.PhoneNumberUtil;
import com.android.dialer.voicemail.VoicemailPlaybackPresenter;
import com.android.dialer.voicemail.VoicemailPlaybackLayout;
+import com.android.phone.common.incall.CallMethodHelper;
+import com.android.phone.common.incall.CallMethodInfo;
import com.cyanogen.ambient.incall.extension.OriginCodes;
/**
diff --git a/src/com/android/dialer/database/DialerDatabaseHelper.java b/src/com/android/dialer/database/DialerDatabaseHelper.java
index 48d0ac689..f22ad7c9c 100644
--- a/src/com/android/dialer/database/DialerDatabaseHelper.java
+++ b/src/com/android/dialer/database/DialerDatabaseHelper.java
@@ -42,7 +42,7 @@ import com.android.dialer.R;
import com.android.dialer.dialpad.SmartDialNameMatcher;
import com.android.dialer.dialpad.SmartDialPrefix;
-import com.android.dialer.incall.CallMethodHelper;
+import com.android.phone.common.incall.CallMethodHelper;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Objects;
import com.google.common.base.Preconditions;
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 48830bdaa..365c9de67 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -84,23 +84,20 @@ import com.android.dialer.SpecialCharSequenceMgr;
import com.android.dialer.calllog.PhoneAccountUtils;
import com.android.dialer.SpeedDialListActivity;
import com.android.dialer.SpeedDialUtils;
-import com.android.dialer.incall.CallMethodInfo;
-import com.android.dialer.incall.CallMethodHelper;
-import com.android.dialer.incall.CallMethodUtils;
import com.android.dialer.util.DialerUtils;
import com.android.dialer.util.IntentUtil;
import com.android.phone.common.CallLogAsync;
import com.android.phone.common.animation.AnimUtils;
import com.android.phone.common.dialpad.DialpadKeyButton;
import com.android.phone.common.dialpad.DialpadView;
+import com.android.phone.common.incall.CallMethodHelper;
+import com.android.phone.common.incall.CallMethodInfo;
import com.android.phone.common.incall.CallMethodSpinnerAdapter;
-import com.android.phone.common.util.StartInCallCallReceiver;
+import com.android.phone.common.incall.CallMethodUtils;
import com.cyanogen.ambient.incall.extension.OriginCodes;
import com.google.common.annotations.VisibleForTesting;
-import java.math.BigDecimal;
import java.util.ArrayList;
-import java.util.Currency;
import java.util.HashMap;
import java.util.HashSet;
import java.util.List;
diff --git a/src/com/android/dialer/incall/CallMethodHelper.java b/src/com/android/dialer/incall/CallMethodHelper.java
deleted file mode 100644
index cf241b0db..000000000
--- a/src/com/android/dialer/incall/CallMethodHelper.java
+++ /dev/null
@@ -1,696 +0,0 @@
-/*
- * Copyright (C) 2015 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.dialer.incall;
-
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.Intent;
-import android.content.pm.PackageManager;
-import android.content.pm.ResolveInfo;
-import android.content.res.Resources;
-import android.os.Bundle;
-import android.os.Handler;
-import android.os.Looper;
-import android.util.Log;
-import android.widget.Toast;
-import com.android.dialer.DialerApplication;
-import com.android.phone.common.util.StartInCallCallReceiver;
-import com.cyanogen.ambient.common.api.AmbientApiClient;
-import com.cyanogen.ambient.common.api.Result;
-import com.cyanogen.ambient.common.api.ResultCallback;
-import com.cyanogen.ambient.analytics.Event;
-import com.cyanogen.ambient.discovery.NudgeServices;
-import com.cyanogen.ambient.discovery.results.BundleResult;
-import com.cyanogen.ambient.discovery.util.NudgeKey;
-import com.cyanogen.ambient.incall.InCallApi;
-import com.cyanogen.ambient.incall.InCallPluginStatus;
-import com.cyanogen.ambient.incall.InCallServices;
-import com.cyanogen.ambient.incall.extension.CreditBalance;
-import com.cyanogen.ambient.incall.extension.CreditInfo;
-import com.cyanogen.ambient.incall.extension.GetCreditInfoResult;
-import com.cyanogen.ambient.incall.extension.ICallCreditListener;
-import com.cyanogen.ambient.incall.extension.StatusCodes;
-import com.cyanogen.ambient.incall.results.AuthenticationStateResult;
-import com.cyanogen.ambient.incall.results.GetCreditInfoResultResult;
-import com.cyanogen.ambient.incall.results.InCallProviderInfoResult;
-import com.cyanogen.ambient.incall.results.InstalledPluginsResult;
-
-import com.android.dialer.incall.CallMethodInfo;
-import com.android.dialer.R;
-import com.cyanogen.ambient.incall.results.MimeTypeResult;
-import com.cyanogen.ambient.incall.results.PendingIntentResult;
-import com.cyanogen.ambient.incall.results.PluginStatusResult;
-import com.cyanogen.ambient.incall.util.InCallProviderInfo;
-import com.google.common.base.Joiner;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-import static com.cyanogen.ambient.incall.util.InCallHelper.NO_COLOR;
-
-/**
- * Call Method Helper - In charge of keeping a running and updated hashmap of all InCallProviders
- * currently installed.
- *
- * Fragments and Activities can subscribe to changes with subscribe.
- *
- */
-public class CallMethodHelper {
-
- private static CallMethodHelper sInstance;
-
- AmbientApiClient mClient;
- Context mContext;
- InCallApi mInCallApi;
- Handler mMainHandler;
- private static List<ComponentName> mInstalledPlugins;
- private static HashMap<ComponentName, CallMethodInfo> mCallMethodInfos = new HashMap<>();
- private static HashMap<ComponentName, ICallCreditListener> mCallCreditListeners = new
- HashMap<>();
- private static HashMap<String, CallMethodReceiver> mRegisteredClients = new HashMap<>();
- private static boolean dataHasBeenBroadcastPreviously = false;
-
- // To prevent multiple broadcasts and force us to wait for all items to be complete
- // this is the count of callbacks we should get for each item. Increase this if we add more.
- private static int EXPECTED_RESULT_CALLBACKS = 8;
-
- // To prevent multiple broadcasts and force us to wait for all items to be complete
- // this is the count of callbacks we should get for each item. Increase this if we add more.
- private static int EXPECTED_DYNAMIC_RESULT_CALLBACKS = 2;
-
- // Keeps track of the number of callbacks we have from AmbientCore. Reset this to 0
- // immediately after all callbacks are accounted for.
- private static int callbackCount = 0;
-
- private static final String TAG = CallMethodHelper.class.getSimpleName();
- private static final boolean DEBUG = true;
-
- public interface CallMethodReceiver {
- void onChanged(HashMap<ComponentName, CallMethodInfo> callMethodInfos);
- }
-
- /**
- * Broadcasts mCallMethodInfos to all registered clients on the Main thread.
- */
- private static void broadcast() {
- getInstance().mMainHandler.post(new Runnable() {
- @Override
- public void run() {
- for (CallMethodReceiver client : mRegisteredClients.values()) {
- client.onChanged(mCallMethodInfos);
- }
- if (DEBUG) {
- for (CallMethodInfo cmi : mCallMethodInfos.values()) {
- Log.v("BIRD", "Broadcast: " + cmi.mName);
- }
- }
- dataHasBeenBroadcastPreviously = true;
- callbackCount = 0;
- }
- });
- }
-
- /**
- * Helper method for subscribed clients to remove any item that is not enabled from the hashmap
- * @param input HashMap returned from a broadcast
- * @param output HashMap with only enabled items
- */
- public static void removeDisabled(HashMap<ComponentName, CallMethodInfo> input,
- HashMap<ComponentName, CallMethodInfo> output) {
-
- for (Map.Entry<ComponentName, CallMethodInfo> entry : input.entrySet()) {
- ComponentName key = entry.getKey();
- CallMethodInfo value = entry.getValue();
-
- if (value.mStatus == InCallPluginStatus.ENABLED) {
- output.put(key, value);
- }
- }
- }
-
- /***
- * Registers the client, on register returns boolean if
- * callMethodInfo data is already collected and the initial broadcast has been sent.
- * @param id unique string for the client
- * @param cmr client receiver
- * @return boolean isempty
- */
- public static synchronized boolean subscribe(String id, CallMethodReceiver cmr) {
- mRegisteredClients.put(id, cmr);
-
- for (ComponentName callCreditProvider : mCallCreditListeners.keySet()) {
- if (mCallCreditListeners.get(callCreditProvider) == null) {
- /* CallCreditListenerImpl listener = CallCreditListenerImpl.getInstance
- (callCreditProvider);
- getInstance().mInCallApi.addCreditListener(getInstance().mClient,
- callCreditProvider, listener);
- mCallCreditListeners.put(callCreditProvider, listener); */
- }
- }
-
- return dataHasBeenBroadcastPreviously;
- }
-
- /**
- * Unsubscribes the client. All clients should unsubscribe when they are removed.
- * @param id of the client to remove
- */
- public static synchronized void unsubscribe(String id) {
- mRegisteredClients.remove(id);
-
- if (mRegisteredClients.size() == 0) {
- for (ComponentName callCreditProvider : mCallCreditListeners.keySet()) {
- if (mCallCreditListeners.get(callCreditProvider) != null) {
- getInstance().mInCallApi.removeCreditListener(getInstance().mClient,
- callCreditProvider, mCallCreditListeners.get(callCreditProvider));
- }
- }
- }
- }
-
- /**
- * Get a single instance of our call method helper. There should only be ever one instance.
- * @return
- */
- private static synchronized CallMethodHelper getInstance() {
- if (sInstance == null) {
- sInstance = new CallMethodHelper();
- }
- return sInstance;
- }
-
- /**
- * Generic CallResultReceiver with basic error handling
- * @param cmi
- * @return
- */
- public static StartInCallCallReceiver getVoIPResultReceiver(final CallMethodInfo cmi,
- final String originCode) {
- StartInCallCallReceiver svcrr =
- new StartInCallCallReceiver(new Handler(Looper.getMainLooper()));
-
- svcrr.setReceiver(new StartInCallCallReceiver.Receiver() {
-
- @Override
- public void onReceiveResult(int resultCode, Bundle resultData) {
- if (DEBUG) Log.i(TAG, "Got Start VoIP Call result callback code = " + resultCode);
-
- switch (resultCode) {
- case StatusCodes.StartCall.CALL_FAILURE_INSUFFICIENT_CREDITS:
- case StatusCodes.StartCall.CALL_FAILURE_INVALID_NUMBER:
- case StatusCodes.StartCall.CALL_FAILURE_TIMEOUT:
- case StatusCodes.StartCall.CALL_FAILURE_UNAUTHENTICATED:
- case StatusCodes.StartCall.CALL_FAILURE:
-
- String text = getInstance().mContext.getResources()
- .getString(R.string.invalid_number_text);
- text = String.format(text, cmi.mName);
- Toast.makeText(getInstance().mContext, text, Toast.LENGTH_LONG).show();
- break;
- case StatusCodes.StartCall.CALL_CONNECTED:
- break;
- case StatusCodes.StartCall.HANDOVER_CONNECTED:
- break;
- default:
- Log.i(TAG, "Nothing to do for this Start VoIP Call resultcode = "
- + resultCode);
- break;
- }
-
- }
-
- });
-
- return svcrr;
- }
-
- /**
- * Start our Helper and kick off our first ModCore queries.
- * @param context
- */
- public static void init(DialerApplication context) {
- CallMethodHelper helper = getInstance();
- helper.mContext = context;
- helper.mClient = DialerApplication.ACLIENT.get(context);
- helper.mInCallApi = InCallServices.getInstance();
- helper.mMainHandler = new Handler(context.getMainLooper());
- refresh();
- }
-
- /**
- * *sip* ahhhh so refreshing
- */
- public static void refresh() {
- updateCallPlugins();
- }
-
- /**
- * Refresh just the possibly changing items
- *
- * This should only be called once dataHasBeenBroadcastPreviously is true.
- */
- public static void refreshDynamic() {
- for(ComponentName cn : mCallMethodInfos.keySet()) {
- getCreditInfo(cn, true);
- getCallMethodAuthenticated(cn, true);
- }
- }
-
- /**
- * This is helpful for items that don't want to subscribe to updates or for things that
- * need a quick CMI and have a component name.
- * @param cn Component name wanted.
- * @return specific call method when given a component name.
- */
- public static CallMethodInfo getCallMethod(ComponentName cn) {
- if (mCallMethodInfos.containsKey(cn)) {
- return mCallMethodInfos.get(cn);
- } else {
- return null;
- }
- }
-
- /**
- * This is useful for items that subscribe after the initial broadcast has been sent out and
- * need to go get some data right away
- * @return the current HashMap of CMIs.
- */
- public static HashMap<ComponentName, CallMethodInfo> getAllCallMethods() {
- return mCallMethodInfos;
- }
-
- /**
- * A few items need a list of mime types in a comma delimited list. Since we are already
- * querying all the plugins. We can easily build this list ahead of time.
- *
- * Items that require this should subscribe and grab this updated list when needed.
- * @return string of all (not limited to enabled) mime types
- */
- public static String getAllMimeTypes() {
- String mimeTypes = "";
-
- List<String> mimeTypesList = new ArrayList<>();
-
- for (CallMethodInfo cmi : mCallMethodInfos.values()) {
- mimeTypesList.add(cmi.mMimeType);
- }
-
- if (!mimeTypesList.isEmpty()) {
- mimeTypes = Joiner.on(",").skipNulls().join(mimeTypesList);
- }
- return mimeTypes;
- }
-
- /**
- * A few items need a list of mime types in a comma delimited list. Since we are already
- * querying all the plugins. We can easily build this list ahead of time.
- *
- * Items that require this should subscribe and grab this updated list when needed.
- * @return string of enabled mime types
- */
- public static String getAllEnabledMimeTypes() {
- String mimeTypes = "";
-
- List<String> enabledMimeTypes = new ArrayList<>();
-
- for (CallMethodInfo cmi : mCallMethodInfos.values()) {
- if (cmi.mStatus == InCallPluginStatus.ENABLED) {
- enabledMimeTypes.add(cmi.mMimeType);
- }
- }
-
- if (!enabledMimeTypes.isEmpty()) {
- mimeTypes = Joiner.on(",").skipNulls().join(enabledMimeTypes);
- }
- return mimeTypes;
- }
-
- public static void updateCreditInfo(ComponentName name, GetCreditInfoResult gcir) {
- CallMethodInfo cmi = getCallMethodIfExists(name);
- if (cmi != null) {
- if (gcir == null || gcir.creditInfo == null) {
- // Build zero credit dummy if no result found.
- cmi.mProviderCreditInfo =
- new CreditInfo(new CreditBalance(0, null), null);
- } else {
- cmi.mProviderCreditInfo = gcir.creditInfo;
- }
-
- // Since a CallMethodInfo object was updated here, we should let the subscribers know
- broadcast();
- }
- }
-
- /**
- * Broadcast to subscribers once we know we've gathered all our data. Do not do this until we
- * have everything we need for sure.
- *
- * This method is called after every callback from AmbientCore. We will keep track of all of
- * the callbacks, once we have accounted for all callbacks from all plugins, we can go ahead
- * and update subscribers.
- */
- private static void maybeBroadcastToSubscribers() {
- maybeBroadcastToSubscribers(false);
- }
-
- private static void maybeBroadcastToSubscribers(boolean broadcastDynamic) {
- int expectedCount;
-
- ++callbackCount;
- if (broadcastDynamic) {
- expectedCount = EXPECTED_DYNAMIC_RESULT_CALLBACKS;
- } else {
- expectedCount = EXPECTED_RESULT_CALLBACKS;
- }
-
- if (callbackCount == (expectedCount * mInstalledPlugins.size())) {
- // we are on the last item. broadcast updated hashmap
- broadcast();
- }
- }
-
- /**
- * In order to speed up the process we make calls for providers that may be invalid
- * To prevent this, make sure every resultcallback uses this before filling in the hashmap.
- * @param cn componentname
- * @return callmethodinfo if valid, otherwise null
- */
- public static CallMethodInfo getCallMethodIfExists(ComponentName cn) {
- if (mCallMethodInfos.containsKey(cn)) {
- return mCallMethodInfos.get(cn);
- } else {
- return null;
- }
- }
-
- /**
- * Prepare to query and fire off ModCore calls in all directions
- */
- private static void updateCallPlugins() {
- getInstance().mInCallApi.getInstalledPlugins(getInstance().mClient)
- .setResultCallback(new ResultCallback<InstalledPluginsResult>() {
- @Override
- public void onResult(InstalledPluginsResult installedPluginsResult) {
- // got installed components
- mInstalledPlugins = installedPluginsResult.components;
-
- mCallMethodInfos.clear();
-
- if (mInstalledPlugins.size() == 0) {
- broadcast();
- }
-
- for (ComponentName cn : mInstalledPlugins) {
- mCallMethodInfos.put(cn, new CallMethodInfo());
- getCallMethodInfo(cn);
- getCallMethodStatus(cn);
- getCallMethodMimeType(cn);
- getCallMethodAuthenticated(cn, false);
- getSettingsIntent(cn);
- getCreditInfo(cn, false);
- getManageCreditsIntent(cn);
- checkLowCreditConfig(cn);
- // 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.
- }
- }
- });
- }
-
- /**
- * Get our basic CMI metadata
- * @param cn
- */
- private static void getCallMethodInfo(final ComponentName cn) {
- getInstance().mInCallApi.getProviderInfo(getInstance().mClient, cn)
- .setResultCallback(new ResultCallback<InCallProviderInfoResult>() {
- @Override
- public void onResult(InCallProviderInfoResult inCallProviderInfoResult) {
-
- InCallProviderInfo icpi = inCallProviderInfoResult.inCallProviderInfo;
- if (icpi == null) {
- mCallMethodInfos.remove(cn);
- return;
- }
-
- PackageManager packageManager = getInstance().mContext.getPackageManager();
-
- Resources pluginResources = null;
- try {
- pluginResources = packageManager.getResourcesForApplication(
- cn.getPackageName());
- } catch (PackageManager.NameNotFoundException e) {
- Log.e(TAG, "Plugin isn't installed: " + cn);
- mCallMethodInfos.remove(cn);
- return;
- }
-
- synchronized (mCallMethodInfos) {
- CallMethodInfo cmi = getCallMethodIfExists(cn);
-
- if (cmi == null) {
- return;
- }
-
- try {
- cmi.mBrandIcon = pluginResources.getDrawable(icpi.getBrandIcon(), null);
- cmi.mBadgeIcon = pluginResources.getDrawable(icpi.getBadgeIcon(), null);
- cmi.mLoginIcon = pluginResources.getDrawable(icpi.getLoginIcon(), null);
- cmi.mActionOneIcon = pluginResources.getDrawable(icpi.getActionOneIcon(), null);
- cmi.mActionTwoIcon = pluginResources.getDrawable(icpi.getActionTwoIcon(), null);
- } catch (Resources.NotFoundException e) {
- Log.e(TAG, "Resource Not found: " + cn);
- mCallMethodInfos.remove(cn);
- return;
- }
-
- cmi.mComponent = cn;
- cmi.mName = icpi.getTitle();
- cmi.mSummary = icpi.getSummary();
- cmi.mSlotId = -1;
- cmi.mSubId = -1;
- cmi.mColor = NO_COLOR;
- cmi.mSubscriptionButtonText = icpi.getSubscriptionButtonText();
- cmi.mCreditButtonText = icpi.getCreditsButtonText();
- cmi.mT9HintDescription = icpi.getT9HintDescription();
- cmi.pluginResources = pluginResources;
- cmi.mActionOneText = icpi.getActionOneTitle();
- cmi.mActionTwoText = icpi.getActionTwoTitle();
- cmi.mIsInCallProvider = true;
-
- mCallMethodInfos.put(cn, cmi);
- maybeBroadcastToSubscribers();
- }
- }
- });
- }
-
- /**
- * Get our plugin enabled status
- * @param cn
- */
- private static void getCallMethodStatus(final ComponentName cn) {
- getInstance().mInCallApi.getPluginStatus(getInstance().mClient, cn)
- .setResultCallback(new ResultCallback<PluginStatusResult>() {
- @Override
- public void onResult(PluginStatusResult pluginStatusResult) {
- synchronized (mCallMethodInfos) {
- CallMethodInfo cmi = getCallMethodIfExists(cn);
- if (cmi != null) {
- cmi.mStatus = pluginStatusResult.status;
- mCallMethodInfos.put(cn, cmi);
- maybeBroadcastToSubscribers();
- }
- }
- }
- });
- }
-
- /**
- * Send an event to the component
- * @param cn componentName to send the data to.
- */
- public static void shipAnalyticsToPlugin(final ComponentName cn, Event e) {
- if (cn == null) {
- return;
- }
- if (DEBUG) {
- Log.d(TAG, "componentName: " + cn.toShortString());
- Log.d(TAG, "Event: " + e.toString());
- }
- getInstance().mInCallApi.sendAnalyticsEventToPlugin(getInstance().mClient, cn, e)
- .setResultCallback(new ResultCallback<Result>() {
- @Override
- public void onResult(Result result) {
- if (DEBUG) {
- Log.v(TAG, "Event sent with result: " + result.getStatus().getStatusMessage());
- }
- }
- });
- }
-
- /**
- * Get the call method mime type
- * @param cn
- */
- private static void getCallMethodMimeType(final ComponentName cn) {
- getInstance().mInCallApi.getCallableMimeType(getInstance().mClient, cn)
- .setResultCallback(new ResultCallback<MimeTypeResult>() {
- @Override
- public void onResult(MimeTypeResult mimeTypeResult) {
- synchronized (mCallMethodInfos) {
- CallMethodInfo cmi = getCallMethodIfExists(cn);
- if (cmi != null) {
- cmi.mMimeType = mimeTypeResult.mimeType;
- mCallMethodInfos.put(cn, cmi);
- maybeBroadcastToSubscribers();
- }
- }
- }
- });
- }
-
- /**
- * Get the Authentication state of the callmethod
- * @param cn
- */
- private static void getCallMethodAuthenticated(final ComponentName cn,
- final boolean dynamicRefresh) {
- getInstance().mInCallApi.getAuthenticationState(getInstance().mClient, cn)
- .setResultCallback(new ResultCallback<AuthenticationStateResult>() {
- @Override
- public void onResult(AuthenticationStateResult result) {
- synchronized (mCallMethodInfos) {
- CallMethodInfo cmi = getCallMethodIfExists(cn);
- if (cmi != null) {
- cmi.mIsAuthenticated = result.result == StatusCodes.AuthenticationState
- .LOGGED_IN;
- mCallMethodInfos.put(cn, cmi);
- maybeBroadcastToSubscribers(dynamicRefresh);
- }
- }
- }
- });
- }
-
- /**
- * Get the settings intent for the callmethod
- * @param cn
- */
- private static void getSettingsIntent(final ComponentName cn) {
- getInstance().mInCallApi.getSettingsIntent(getInstance().mClient, cn)
- .setResultCallback(new ResultCallback<PendingIntentResult>() {
- @Override
- public void onResult(PendingIntentResult pendingIntentResult) {
- synchronized (mCallMethodInfos) {
- CallMethodInfo cmi = getCallMethodIfExists(cn);
- if (cmi != null) {
- cmi.mSettingsIntent = pendingIntentResult.intent;
- mCallMethodInfos.put(cn, cmi);
- maybeBroadcastToSubscribers();
- }
- }
- }
- });
- }
-
- private static void getCreditInfo(final ComponentName cn,
- final boolean dynamicRefresh) {
- // Let's attach a listener so that we can continue to listen to any credit changes
- if (mCallCreditListeners.get(cn) == null) {
- /* CallCreditListenerImpl listener = CallCreditListenerImpl.getInstance(cn);
- getInstance().mInCallApi.addCreditListener(getInstance().mClient, cn, listener);
- mCallCreditListeners.put(cn, listener); */
- }
- getInstance().mInCallApi.getCreditInfo(getInstance().mClient, cn)
- .setResultCallback(new ResultCallback<GetCreditInfoResultResult>() {
- @Override
- public void onResult(GetCreditInfoResultResult getCreditInfoResultResult) {
- CallMethodInfo cmi = getCallMethodIfExists(cn);
- if (cmi != null) {
- GetCreditInfoResult gcir = getCreditInfoResultResult.result;
- if (gcir == null || gcir.creditInfo == null) {
- // Build zero credit dummy if no result found.
- cmi.mProviderCreditInfo =
- new CreditInfo(new CreditBalance(0, null), null);
- } else {
- cmi.mProviderCreditInfo = gcir.creditInfo;
- }
- mCallMethodInfos.put(cn, cmi);
- maybeBroadcastToSubscribers(dynamicRefresh);
- }
- }
- });
- }
-
- private static void getManageCreditsIntent(final ComponentName cn) {
- getInstance().mInCallApi.getManageCreditsIntent(getInstance().mClient, cn)
- .setResultCallback(new ResultCallback<PendingIntentResult>() {
- @Override
- public void onResult(PendingIntentResult pendingIntentResult) {
- CallMethodInfo cmi = getCallMethodIfExists(cn);
- if (cmi != null) {
- cmi.mManageCreditIntent = pendingIntentResult.intent;
- mCallMethodInfos.put(cn, cmi);
- maybeBroadcastToSubscribers();
- }
- }
- });
- }
-
- private static void checkLowCreditConfig(final ComponentName cn) {
- // find a nudge component if it exists for this package
- Intent nudgeIntent = new Intent("cyanogen.service.NUDGE_PROVIDER");
- nudgeIntent.setPackage(cn.getPackageName());
- List<ResolveInfo> resolved = getInstance().mContext.getPackageManager()
- .queryIntentServices(nudgeIntent, 0);
- if (resolved != null && !resolved.isEmpty()) {
- ResolveInfo result = resolved.get(0);
- ComponentName nudgeComponent = new ComponentName(result.serviceInfo.applicationInfo
- .packageName, result.serviceInfo.name);
- collectLowCreditConfig(cn, nudgeComponent);
- return;
- }
-
- // if a nudge component doesn't exist, just finish here
- maybeBroadcastToSubscribers();
- }
-
- private static void collectLowCreditConfig(final ComponentName pluginComponent, final
- ComponentName nudgeComponent) {
- NudgeServices.NudgeApi.getConfigurationForKey(getInstance().mClient, nudgeComponent,
- NudgeKey.INCALL_CREDIT_NUDGE).setResultCallback(new ResultCallback<BundleResult>() {
- @Override
- public void onResult(BundleResult bundleResult) {
- CallMethodInfo cmi = getCallMethodIfExists(pluginComponent);
- if (cmi != null) {
- if (bundleResult != null && bundleResult.bundle != null &&
- bundleResult.bundle.containsKey(NudgeKey
- .INCALL_PARAM_CREDIT_WARN)) {
- cmi.mCreditWarn = bundleResult.bundle.getFloat(NudgeKey
- .INCALL_PARAM_CREDIT_WARN);
- mCallMethodInfos.put(pluginComponent, cmi);
- }
- maybeBroadcastToSubscribers();
- }
- }
- });
- }
-}
diff --git a/src/com/android/dialer/incall/CallMethodInfo.java b/src/com/android/dialer/incall/CallMethodInfo.java
deleted file mode 100644
index bac68ab07..000000000
--- a/src/com/android/dialer/incall/CallMethodInfo.java
+++ /dev/null
@@ -1,217 +0,0 @@
-/*
- * Copyright (C) 2015 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.dialer.incall;
-
-import android.app.PendingIntent;
-import android.content.ComponentName;
-import android.content.Context;
-import android.content.res.Resources;
-import android.graphics.drawable.Drawable;
-import android.os.UserHandle;
-import android.telephony.PhoneNumberUtils;
-import android.text.TextUtils;
-import android.util.Log;
-import com.android.dialer.DialerApplication;
-import com.android.dialer.incall.CallMethodHelper;
-import com.android.phone.common.util.StartInCallCallReceiver;
-import com.cyanogen.ambient.incall.InCallServices;
-import com.cyanogen.ambient.incall.extension.CreditBalance;
-import com.cyanogen.ambient.incall.extension.CreditInfo;
-import com.cyanogen.ambient.incall.extension.OriginCodes;
-import com.cyanogen.ambient.incall.extension.StartCallRequest;
-import com.cyanogen.ambient.incall.extension.SubscriptionInfo;
-import com.google.common.base.Objects;
-
-import java.math.BigDecimal;
-import java.util.Currency;
-import java.util.List;
-
-public class CallMethodInfo {
-
- public String mId;
- public UserHandle mUserHandle;
- public ComponentName mComponent;
- public String mName;
- public String mSummary;
- public int mSlotId;
- public int mSubId;
- public int mColor;
- public int mStatus;
- public boolean mIsAuthenticated;
- public String mMimeType;
- public String mSubscriptionButtonText;
- public String mCreditButtonText;
- public String mT9HintDescription;
- public PendingIntent mSettingsIntent;
- public Drawable mBrandIcon;
- public Drawable mBadgeIcon;
- public Drawable mLoginIcon;
- public Drawable mActionOneIcon;
- public Drawable mActionTwoIcon;
- public Resources pluginResources;
- public String mActionOneText;
- public String mActionTwoText;
- public boolean mIsInCallProvider;
- public PendingIntent mManageCreditIntent;
- public CreditInfo mProviderCreditInfo;
- public float mCreditWarn = 0.0f;
-
- @Override
- public int hashCode() {
- return Objects.hashCode(mId, mUserHandle, mComponent, mName, mSummary, mSlotId, mSubId,
- mColor, mStatus, mIsAuthenticated, mMimeType, mSubscriptionButtonText,
- mCreditButtonText, mT9HintDescription, mSettingsIntent, mBrandIcon, mBadgeIcon,
- mLoginIcon, mActionOneIcon, mActionTwoIcon, pluginResources, mActionOneText,
- mActionTwoText, mIsInCallProvider);
- }
-
- public static final String TAG = "CallMethodInfo";
-
- @Override
- public boolean equals(Object object) {
- if (this == object) {
- return true;
- }
- if (object instanceof CallMethodInfo) {
- final CallMethodInfo info = (CallMethodInfo) object;
- return Objects.equal(this.mId, info.mId)
- && Objects.equal(this.mUserHandle, info.mUserHandle)
- && Objects.equal(this.mComponent, info.mComponent)
- && Objects.equal(this.mName, info.mName)
- && Objects.equal(this.mSummary, info.mSummary)
- && Objects.equal(this.mSlotId, info.mSlotId)
- && Objects.equal(this.mSubId, info.mSubId)
- && Objects.equal(this.mColor, info.mColor)
- && Objects.equal(this.mStatus, info.mStatus)
- && Objects.equal(this.mIsAuthenticated, info.mIsAuthenticated)
- && Objects.equal(this.mMimeType, info.mMimeType)
- && Objects.equal(this.mSubscriptionButtonText, info.mSubscriptionButtonText)
- && Objects.equal(this.mCreditButtonText, info.mCreditButtonText)
- && Objects.equal(this.mT9HintDescription, info.mT9HintDescription)
- && Objects.equal(this.mSettingsIntent, info.mSettingsIntent)
- && Objects.equal(this.mBrandIcon, info.mBrandIcon)
- && Objects.equal(this.mBadgeIcon, info.mBadgeIcon)
- && Objects.equal(this.mLoginIcon, info.mLoginIcon)
- && Objects.equal(this.mActionOneIcon, info.mActionOneIcon)
- && Objects.equal(this.mActionTwoIcon, info.mActionTwoIcon)
- && Objects.equal(this.pluginResources, info.pluginResources)
- && Objects.equal(this.mActionOneText, info.mActionOneText)
- && Objects.equal(this.mActionTwoText, info.mActionTwoText)
- && Objects.equal(this.mIsInCallProvider, info.mIsInCallProvider);
- }
- return false;
- }
-
- public void placeCall(String origin, String number, Context c) {
- placeCall(origin, number, c, false);
- }
-
- public void placeCall(String origin, String number, Context c, boolean isVideoCall) {
- StartInCallCallReceiver svcrr = CallMethodHelper.getVoIPResultReceiver(this, origin);
- StartCallRequest request = new StartCallRequest(number, origin, 0, svcrr);
-
- if (isVideoCall) {
- InCallServices.getInstance().startVideoCall(
- DialerApplication.ACLIENT.get(c), this.mComponent, request);
- } else {
- if (PhoneNumberUtils.isGlobalPhoneNumber(number)) {
- InCallServices.getInstance().startOutCall(
- DialerApplication.ACLIENT.get(c), this.mComponent, request);
- } else {
- InCallServices.getInstance().startVoiceCall(
- DialerApplication.ACLIENT.get(c), this.mComponent, request);
- }
- }
- }
-
- private boolean isSubscription;
- private boolean isCredits;
- private int mCurrencyAmmount;
-
- public String getCreditsDescriptionText(Resources r) {
- String ret = null;
- CreditInfo ci = this.mProviderCreditInfo;
-
- List<SubscriptionInfo> subscriptionInfos = ci.subscriptions;
-
- if (subscriptionInfos != null && !subscriptionInfos.isEmpty()) {
- int subscriptionSize = subscriptionInfos.size();
- StringBuilder subscripText = new StringBuilder();
- int extraCount = 0;
- for (int i = 0; i < subscriptionSize; i++) {
- SubscriptionInfo si = subscriptionInfos.get(i);
- if (i >= 3) {
- extraCount++;
- if (i == subscriptionSize - 1) {
- subscripText.append("+" + extraCount);
- }
- } else {
- // Region codes should be no larger than three char long the credits bar
- // can only show so much.
- if (si.regionCode.length() <= 3) {
- subscripText.append(si.regionCode);
- if (i < subscriptionSize - 1) {
- subscripText.append(", ");
- }
- }
- }
- }
- return subscripText.toString();
- } else {
- CreditBalance balance = ci.balance;
- if (balance != null) {
- mCurrencyAmmount = (int) balance.balance;
- try {
- if (balance.currencyCode != null) {
- Currency currencyCode = Currency.getInstance(balance.currencyCode);
- BigDecimal availableCredit = BigDecimal.valueOf(mCurrencyAmmount,
- currencyCode.getDefaultFractionDigits());
-
-
- return currencyCode.getSymbol(r.getConfiguration().locale)
- + availableCredit.toString();
- } else {
- throw new IllegalArgumentException();
- }
- } catch (IllegalArgumentException e) {
- Log.w(TAG, "Unable to retrieve currency code for plugin: " +
- this.mComponent);
-
- return null;
- }
- } else {
- Log.e(TAG, "Plugin has credit component but the balance and subscriptions are" +
- " null. This should never happen. Not showing credit banner due to " +
- "failures.");
-
- return null;
- }
- }
- }
-
- public boolean usesSubscriptions() {
- return isSubscription;
- }
-
- public boolean usesCurrency() {
- return isCredits;
- }
-
- public int getCurrencyAmount() {
- return mCurrencyAmmount;
- }
-}
diff --git a/src/com/android/dialer/incall/CallMethodStatusReceiver.java b/src/com/android/dialer/incall/CallMethodStatusReceiver.java
index be1905a6e..ffdc74ea0 100644
--- a/src/com/android/dialer/incall/CallMethodStatusReceiver.java
+++ b/src/com/android/dialer/incall/CallMethodStatusReceiver.java
@@ -6,6 +6,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import com.android.dialer.DialtactsActivity;
+import com.android.phone.common.incall.CallMethodUtils;
public class CallMethodStatusReceiver extends BroadcastReceiver {
diff --git a/src/com/android/dialer/incall/CallMethodUtils.java b/src/com/android/dialer/incall/CallMethodUtils.java
deleted file mode 100644
index e82c3a591..000000000
--- a/src/com/android/dialer/incall/CallMethodUtils.java
+++ /dev/null
@@ -1,108 +0,0 @@
-package com.android.dialer.incall;
-
-import android.content.Context;
-import android.telecom.PhoneAccount;
-import android.telecom.PhoneAccountHandle;
-import android.telecom.TelecomManager;
-import android.telephony.SubscriptionInfo;
-import android.telephony.SubscriptionManager;
-import android.telephony.TelephonyManager;
-import com.android.dialer.incall.CallMethodInfo;
-import com.android.dialer.R;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import static com.cyanogen.ambient.incall.util.InCallHelper.NO_COLOR;
-
-/**
- * Basic Utils for call method modifications
- */
-public class CallMethodUtils {
-
- public final static String PREF_SPINNER_COACHMARK_SHOW = "pref_spinner_coachmark_shown";
- public final static String PREF_LAST_ENABLED_PROVIDER = "pref_last_enabled_provider";
- public final static String PREF_INTERNATIONAL_CALLS = "pref_international_calls";
-
- /**
- * Return whether the card in the given slot is activated
- */
- public static boolean isIccCardActivated(int slot) {
- TelephonyManager tm = TelephonyManager.getDefault();
- final int simState = tm.getSimState(slot);
- return (simState != TelephonyManager.SIM_STATE_ABSENT)
- && (simState != TelephonyManager.SIM_STATE_UNKNOWN);
- }
-
- public static List<CallMethodInfo> getSimInfoList(Context context) {
- final TelecomManager telecomMgr =
- (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
- final List<PhoneAccountHandle> accountHandles = telecomMgr.getCallCapablePhoneAccounts();
- ArrayList<CallMethodInfo> callMethodInfoList = new ArrayList<CallMethodInfo>();
- for (PhoneAccountHandle accountHandle : accountHandles) {
- PhoneAccount phoneAccount = telecomMgr.getPhoneAccount(accountHandle);
- CallMethodInfo callMethodInfo = new CallMethodInfo();
- callMethodInfo.mComponent = accountHandle.getComponentName();
- callMethodInfo.mId = accountHandle.getId();
- callMethodInfo.mUserHandle = accountHandle.getUserHandle();
- callMethodInfo.mColor = getPhoneAccountColor(phoneAccount);
- callMethodInfo.mSubId = Integer.parseInt(accountHandle.getId());
- callMethodInfo.mSlotId = SubscriptionManager.getSlotId(callMethodInfo.mSubId);
- callMethodInfo.mName =
- getPhoneAccountName(context, phoneAccount, callMethodInfo.mSlotId);
- callMethodInfo.mIsInCallProvider = false;
- if (isIccCardActivated(callMethodInfo.mSlotId)) {
- callMethodInfoList.add(callMethodInfo);
- }
- }
- return callMethodInfoList;
- }
-
- private static String getPhoneAccountName(Context context, PhoneAccount phoneAccount,
- int slotId) {
- if (phoneAccount == null) {
- return context.getString(R.string.call_method_spinner_item_unknown_sim, slotId + 1);
- }
- return phoneAccount.getLabel().toString();
- }
-
- private static int getPhoneAccountColor(PhoneAccount phoneAccount) {
- if (phoneAccount == null) {
- return NO_COLOR;
- }
-
- int highlightColor = phoneAccount.getHighlightColor();
-
- if (highlightColor != PhoneAccount.NO_HIGHLIGHT_COLOR) {
- return highlightColor;
- } else {
- return NO_COLOR;
- }
- }
-
- public static CallMethodInfo getDefaultDataSimInfo(Context context) {
- SubscriptionManager subMgr = SubscriptionManager.from(context);
- SubscriptionInfo subInfo = subMgr.getActiveSubscriptionInfo(
- SubscriptionManager.getDefaultSubId());
-
- if (subInfo == null) return null;
-
- CallMethodInfo callMethodInfo = new CallMethodInfo();
- callMethodInfo.mSubId = subInfo.getSubscriptionId();
- callMethodInfo.mColor = subInfo.getIconTint();
- callMethodInfo.mName = subInfo.getDisplayName().toString();
- callMethodInfo.mSlotId = SubscriptionManager.getSlotId(callMethodInfo.mSubId);
-
- final TelecomManager telecomMgr =
- (TelecomManager) context.getSystemService(Context.TELECOM_SERVICE);
- final List<PhoneAccountHandle> accountHandles = telecomMgr.getCallCapablePhoneAccounts();
- for (PhoneAccountHandle accountHandle : accountHandles) {
- if (callMethodInfo.mSubId == Integer.parseInt(accountHandle.getId())) {
- callMethodInfo.mComponent = accountHandle.getComponentName();
- break;
- }
- }
-
- return callMethodInfo;
- }
-}
diff --git a/src/com/android/dialer/interactions/PhoneNumberInteraction.java b/src/com/android/dialer/interactions/PhoneNumberInteraction.java
index fe0781f18..83ba77d2d 100644
--- a/src/com/android/dialer/interactions/PhoneNumberInteraction.java
+++ b/src/com/android/dialer/interactions/PhoneNumberInteraction.java
@@ -54,10 +54,10 @@ import com.android.contacts.common.activity.TransactionSafeActivity;
import com.android.contacts.common.util.ContactDisplayUtils;
import com.android.dialer.R;
import com.android.dialer.contact.ContactUpdateService;
-import com.android.dialer.incall.CallMethodHelper;
import com.android.dialer.util.IntentUtil;
import com.android.dialer.util.DialerUtils;
+import com.android.phone.common.incall.CallMethodHelper;
import com.google.common.annotations.VisibleForTesting;
import com.google.common.base.Joiner;
diff --git a/src/com/android/dialer/list/SmartDialSearchFragment.java b/src/com/android/dialer/list/SmartDialSearchFragment.java
index d516d109d..c72b6e002 100644
--- a/src/com/android/dialer/list/SmartDialSearchFragment.java
+++ b/src/com/android/dialer/list/SmartDialSearchFragment.java
@@ -24,18 +24,14 @@ import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.text.Html;
-import android.util.Log;
-import android.view.View;
import android.widget.TextView;
import com.android.contacts.common.list.ContactEntryListAdapter;
import com.android.contacts.common.util.PermissionsUtil;
import com.android.dialer.dialpad.SmartDialCursorLoader;
import com.android.dialer.R;
-import com.android.dialer.incall.CallMethodInfo;
import com.android.dialer.widget.EmptyContentView;
-
-import java.util.ArrayList;
+import com.android.phone.common.incall.CallMethodInfo;
/**
* Implements a fragment to load and display SmartDial search results.
diff --git a/src/com/android/dialer/list/SpeedDialFragment.java b/src/com/android/dialer/list/SpeedDialFragment.java
index 7069689e7..08332b07f 100644
--- a/src/com/android/dialer/list/SpeedDialFragment.java
+++ b/src/com/android/dialer/list/SpeedDialFragment.java
@@ -54,10 +54,9 @@ import com.android.contacts.common.list.ContactTileView;
import com.android.contacts.common.list.OnPhoneNumberPickerActionListener;
import com.android.contacts.common.util.PermissionsUtil;
import com.android.dialer.R;
-import com.android.dialer.incall.CallMethodInfo;
-import com.android.dialer.incall.CallMethodHelper;
-import com.android.dialer.util.DialerUtils;
import com.android.dialer.widget.EmptyContentView;
+import com.android.phone.common.incall.CallMethodHelper;
+import com.android.phone.common.incall.CallMethodInfo;
import java.util.ArrayList;
import java.util.HashMap;
diff --git a/src/com/android/dialer/settings/DialerSettingsActivity.java b/src/com/android/dialer/settings/DialerSettingsActivity.java
index 02864e295..7d79c6636 100644
--- a/src/com/android/dialer/settings/DialerSettingsActivity.java
+++ b/src/com/android/dialer/settings/DialerSettingsActivity.java
@@ -1,19 +1,16 @@
package com.android.dialer.settings;
-import android.app.Activity;
-import android.app.AlertDialog;
import android.app.PendingIntent;
import android.content.ComponentName;
-import android.content.DialogInterface;
-import android.content.res.Resources;
import android.preference.PreferenceCategory;
import android.preference.PreferenceScreen;
import android.util.Log;
import android.widget.CompoundButton;
import android.widget.Switch;
import com.android.dialer.DialerApplication;
-import com.android.dialer.incall.CallMethodInfo;
-import com.android.dialer.incall.CallMethodHelper;
+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.callerinfo.CallerInfoServices;
import com.cyanogen.ambient.callerinfo.results.IsAuthenticatedResult;
import com.cyanogen.ambient.callerinfo.util.CallerInfoHelper;
diff --git a/src/com/android/dialer/util/SingletonHolder.java b/src/com/android/dialer/util/SingletonHolder.java
deleted file mode 100644
index 2a70c02b7..000000000
--- a/src/com/android/dialer/util/SingletonHolder.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package com.android.dialer.util;
-
-/**
- * Encapsulates a threadsafe singleton pattern.
- *
- * This class is designed to be used as a public constant, living within a class that has a private constructor.
- * It defines a {@link #create(I)} method that will only ever be called once, upon the first call of {@link #get(I)}.
- * That method is responsible for creating the actual singleton instance, and that instance will be returned for all
- * future calls of {@link #get(I)}.
- *
- * Example:
- * <code>
- * public class FooSingleton {
- * public static final SingletonHolder&lt;FooSingleton, ParamObject&gt; HOLDER =
- * new SingletonHolder&lt;FooSingleton, ParamObject&gt;() {
- * @Override
- * protected FooSingleton create(ParamObject param) {
- * return new FooSingleton(param);
- * }
- * };
- *
- * private FooSingleton(ParamObject param) {
- *
- * }
- * }
- *
- * // somewhere else
- * FooSingleton.HOLDER.get(params).doStuff();
- * </code>
- * @param <E> The type of the class to hold as a singleton.
- * @param <I> A parameter object to use during creation of the singleton object.
- */
-public abstract class SingletonHolder<E, I> {
- private E mInstance;
- private final Object LOCK = new Object();
-
- public final E get(I initializer) {
- if (null == mInstance) {
- synchronized (LOCK) {
- if (null == mInstance) {
- mInstance = create(initializer);
- }
- }
- }
-
- return mInstance;
- }
-
- protected abstract E create(I initializer);
-}