From ade2cdf6b973a6e9e03a7cacf6f624608c42d7ff Mon Sep 17 00:00:00 2001 From: Richard MacGregor Date: Wed, 16 Mar 2016 11:32:45 -0700 Subject: Add new method for getting hinttext Implement getHintText. Stop using attributes for plugin hint texts. getHintText returns all required hints. Tickets CD-446 CD-470 CD-471 CD-514 Change-Id: I76cb1f31e5db632cb21ea283116928dd2559e555 --- src-ambient/incall/CallMethodHelper.java | 46 +++++++++++++++++++++- src-ambient/incall/CallMethodInfo.java | 67 ++++++++++++++++++++++++++++---- 2 files changed, 104 insertions(+), 9 deletions(-) diff --git a/src-ambient/incall/CallMethodHelper.java b/src-ambient/incall/CallMethodHelper.java index 34ad825..5352c28 100644 --- a/src-ambient/incall/CallMethodHelper.java +++ b/src-ambient/incall/CallMethodHelper.java @@ -37,6 +37,7 @@ import com.android.phone.common.ambient.AmbientConnection; import com.android.phone.common.util.StartInCallCallReceiver; import com.cyanogen.ambient.analytics.Event; import com.cyanogen.ambient.common.api.AmbientApiClient; +import com.cyanogen.ambient.common.api.CommonStatusCodes; import com.cyanogen.ambient.common.api.PendingResult; import com.cyanogen.ambient.common.api.Result; import com.cyanogen.ambient.common.api.ResultCallback; @@ -48,6 +49,7 @@ 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.HintTextResult; import com.cyanogen.ambient.incall.extension.IAuthenticationListener; import com.cyanogen.ambient.incall.extension.ICallCreditListener; import com.cyanogen.ambient.incall.extension.InCallContactInfo; @@ -55,6 +57,7 @@ import com.cyanogen.ambient.incall.extension.StatusCodes; import com.cyanogen.ambient.incall.results.AccountHandleResult; import com.cyanogen.ambient.incall.results.AuthenticationStateResult; import com.cyanogen.ambient.incall.results.GetCreditInfoResultResult; +import com.cyanogen.ambient.incall.results.HintTextResultResult; import com.cyanogen.ambient.incall.results.InCallProviderInfoResult; import com.cyanogen.ambient.incall.results.InstalledPluginsResult; import com.cyanogen.ambient.incall.results.MimeTypeResult; @@ -555,6 +558,7 @@ public class CallMethodHelper { getCallMethodAuthenticated(cn, apiCallbacks); getLoginIntent(cn, apiCallbacks); getSettingsIntent(cn, apiCallbacks); + getHintText(cn, apiCallbacks); getCreditInfo(cn, apiCallbacks); getManageCreditsIntent(cn, apiCallbacks); checkLowCreditConfig(cn, apiCallbacks); @@ -639,7 +643,10 @@ public class CallMethodHelper { cmi.mColor = NO_COLOR; cmi.mSubscriptionButtonText = icpi.getSubscriptionButtonText(); cmi.mCreditButtonText = icpi.getCreditsButtonText(); - cmi.mT9HintDescription = icpi.getT9HintDescription(); + // If present, use the deprecated attribute defined hint text. + // These values may be overwritten by getHintText. + cmi.mT9HintDescriptionNoCreditOrSub = icpi.getT9HintDescription(); + cmi.mT9HintDescriptionHasCreditOrSub = icpi.getT9HintDescription(); cmi.mActionOneText = icpi.getActionOneTitle(); cmi.mActionTwoText = icpi.getActionTwoTitle(); cmi.mIsInCallProvider = true; @@ -876,6 +883,43 @@ public class CallMethodHelper { apiCallbacks.put(callback, result); } + /** + * Get the hint texts for the callmethod + * @param cn + * @param apiCallbacks keeps track of the target callback counts before broadcast + */ + private static void getHintText(final ComponentName cn, + final HashMap apiCallbacks) { + PendingResult result = getInstance().mInCallApi.getHintText(getInstance().mClient, cn); + ResultCallback callback = new ResultCallback() { + @Override + public void onResult(HintTextResultResult hintTextResultResult) { + if (hintTextResultResult != null) { + HintTextResult result = hintTextResultResult.result; + if (result != null) { + synchronized (mCallMethodInfos) { + CallMethodInfo cmi = getCallMethodIfExists(cn); + if (cmi != null) { + String hintText = result.getNoCreditOrSubscriptionHint(); + if (!TextUtils.isEmpty(hintText)) { + cmi.mT9HintDescriptionNoCreditOrSub = hintText; + } + + hintText = result.getHasCreditOrSubscriptionHint(); + if (!TextUtils.isEmpty(hintText)) { + cmi.mT9HintDescriptionHasCreditOrSub = hintText; + } + mCallMethodInfos.put(cn, cmi); + maybeBroadcastToSubscribers(this, apiCallbacks); + } + } + } + } + } + }; + apiCallbacks.put(callback, result); + } + private static void getCreditInfo(final ComponentName cn, final HashMap apiCallbacks) { PendingResult result = getInstance().mInCallApi.getCreditInfo(getInstance().mClient, cn); diff --git a/src-ambient/incall/CallMethodInfo.java b/src-ambient/incall/CallMethodInfo.java index a727c3e..7c6ec96 100644 --- a/src-ambient/incall/CallMethodInfo.java +++ b/src-ambient/incall/CallMethodInfo.java @@ -60,7 +60,8 @@ public class CallMethodInfo { public String mImMimeType; public String mSubscriptionButtonText; public String mCreditButtonText; - public String mT9HintDescription; + public String mT9HintDescriptionNoCreditOrSub; + public String mT9HintDescriptionHasCreditOrSub; public PendingIntent mSettingsIntent; /* Plugin's simple brand icon (24dp x 24dp) Expected format: Vector Drawable (.xml) @@ -283,15 +284,33 @@ public class CallMethodInfo { } } - public boolean showSubscriptions() { - // If the user has > 0 credits, we don't want to show the subscription. - List subscriptionInfos = this.mProviderCreditInfo.subscriptions; - CreditBalance creditBalance = this.mProviderCreditInfo.balance; + public boolean hasAvailableCredit() { + boolean hasAvailableCredit = false; + CreditInfo ci = this.mProviderCreditInfo; + if (ci != null) { + CreditBalance balance = ci.balance; + if (balance != null) { + mCurrencyAmount = (int) balance.balance; + hasAvailableCredit = mCurrencyAmount > 0; + } + } + return hasAvailableCredit; + } - boolean hasSubscriptions = subscriptionInfos != null && !subscriptionInfos.isEmpty(); + public boolean hasSubscription() { + boolean hasSubscription = false; + CreditInfo ci = this.mProviderCreditInfo; + if (ci != null) { + List subscriptionInfos = ci.subscriptions; + hasSubscription = subscriptionInfos != null && !subscriptionInfos.isEmpty(); + } + return hasSubscription; + } - boolean hasCredits = creditBalance != null && creditBalance.currencyCode != null - && creditBalance.balance > 0; + public boolean showSubscriptions() { + // If the user has > 0 credits, we don't want to show the subscription. + boolean hasCredits = hasAvailableCredit(); + boolean hasSubscriptions = hasSubscription(); return !hasCredits && hasSubscriptions; } @@ -299,4 +318,36 @@ public class CallMethodInfo { public int getCurrencyAmount() { return mCurrencyAmount; } + + /** + * Returns hint text based on credit and subscription availability. + * If either is null or empty, use the non-null/non-empty string. + * Null is returned if both are null or empty. + * @return hintText String hint text for the current situation + */ + public String getHintText() { + String hintText = null; + boolean hasAvailableCredit = hasAvailableCredit(); + boolean usesSubscriptions = hasSubscription(); + if (!hasAvailableCredit && !usesSubscriptions) { + // No credits and no subscription + if (!TextUtils.isEmpty(mT9HintDescriptionNoCreditOrSub)) { + // Use no credits or subscription hint + hintText = mT9HintDescriptionNoCreditOrSub; + } else if (!TextUtils.isEmpty(mT9HintDescriptionHasCreditOrSub)) { + // If no credit/sub hint empty, but has credit/sub hint valid, use it + hintText = mT9HintDescriptionHasCreditOrSub; + } + } else { + // Has credits or subscription + if (!TextUtils.isEmpty(mT9HintDescriptionHasCreditOrSub)) { + // Use has credits/sub hint text + hintText = mT9HintDescriptionHasCreditOrSub; + } else if (!TextUtils.isEmpty(mT9HintDescriptionNoCreditOrSub)) { + // If has credit/sub hint empty, but no credit/sub hint valid, use it + hintText = mT9HintDescriptionNoCreditOrSub; + } + } + return hintText; + } } -- cgit v1.2.3