summaryrefslogtreecommitdiff
path: root/java/com/android/dialer/assisteddialing/NumberTransformer.java
diff options
context:
space:
mode:
authorTreehugger Robot <treehugger-gerrit@google.com>2017-09-28 20:59:07 +0000
committerGerrit Code Review <noreply-gerritcodereview@google.com>2017-09-28 20:59:07 +0000
commitea2f430dd5f5f5f08bb5c9438696112f44423abe (patch)
treeeb2b91eaa8fafe6041c27dae82a68888ba771a93 /java/com/android/dialer/assisteddialing/NumberTransformer.java
parent126469d1020dbcb88146d595414faf9a0c4a1a28 (diff)
parent96aea2a8f42bfc55dd2b08c51698efb0d0559109 (diff)
Merge changes I0ff396b5,I3b668c3a,Iab630f19,I6ef204ac
* changes: Use goAsync() and dialer executor to insert post call notifications Add the assisted dialing logic module. Refactor DialerStrictMode into an interface. Adding logging for transcription polling requests
Diffstat (limited to 'java/com/android/dialer/assisteddialing/NumberTransformer.java')
-rw-r--r--java/com/android/dialer/assisteddialing/NumberTransformer.java93
1 files changed, 93 insertions, 0 deletions
diff --git a/java/com/android/dialer/assisteddialing/NumberTransformer.java b/java/com/android/dialer/assisteddialing/NumberTransformer.java
new file mode 100644
index 000000000..f01d1a08f
--- /dev/null
+++ b/java/com/android/dialer/assisteddialing/NumberTransformer.java
@@ -0,0 +1,93 @@
+/*
+ * Copyright (C) 2017 The Android Open Source 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.assisteddialing;
+
+import android.annotation.TargetApi;
+import android.os.Build.VERSION_CODES;
+import android.support.annotation.NonNull;
+import android.text.TextUtils;
+import com.android.dialer.common.LogUtil;
+import com.google.i18n.phonenumbers.NumberParseException;
+import com.google.i18n.phonenumbers.PhoneNumberUtil;
+import com.google.i18n.phonenumbers.Phonenumber.PhoneNumber;
+import java.util.Optional;
+
+/** Responsible for transforming numbers to make them dialable and valid when roaming. */
+final class NumberTransformer {
+
+ private final PhoneNumberUtil phoneNumberUtil = PhoneNumberUtil.getInstance();
+ private final Constraints constraints;
+
+ public NumberTransformer(Constraints constraints) {
+ this.constraints = constraints;
+ }
+
+ /**
+ * Returns a boolean for callers to quickly determine whether or not the AssistedDialingMediator
+ * thinks an attempt at assisted dialing is likely to succeed.
+ */
+ public boolean canDoAssistedDialingTransformation(
+ @NonNull String numberToCheck,
+ @NonNull String userHomeCountryCode,
+ @NonNull String userRoamingCountryCode) {
+ return constraints.meetsPreconditions(
+ numberToCheck, userHomeCountryCode, userRoamingCountryCode);
+ }
+
+ /**
+ * A method to do assisted dialing transformations.
+ *
+ * <p>The library will do its best to attempt a transformation, but, if for any reason the
+ * transformation fails, we return an empty optional. The operation can be considered a success
+ * when the Optional we return has a value set.
+ */
+ @SuppressWarnings("AndroidApiChecker") // Use of optional
+ @TargetApi(VERSION_CODES.N)
+ public Optional<String> doAssistedDialingTransformation(
+ String numbertoTransform, String userHomeCountryCode, String userRoamingCountryCode) {
+
+ if (!constraints.meetsPreconditions(
+ numbertoTransform, userHomeCountryCode, userRoamingCountryCode)) {
+ LogUtil.i(
+ "NumberTransformer.doAssistedDialingTransformation",
+ "assisted dialing failed preconditions");
+ return Optional.empty();
+ }
+
+ PhoneNumber phoneNumber;
+ try {
+ phoneNumber = phoneNumberUtil.parse(numbertoTransform, userHomeCountryCode);
+ } catch (NumberParseException e) {
+ LogUtil.i("NumberTransformer.doAssistedDialingTransformation", "number failed to parse");
+ return Optional.empty();
+ }
+
+ String transformedNumber =
+ phoneNumberUtil.formatNumberForMobileDialing(phoneNumber, userRoamingCountryCode, true);
+
+ // formatNumberForMobileDialing may return an empty String.
+ if (TextUtils.isEmpty(transformedNumber)) {
+ LogUtil.i(
+ "NumberTransformer.doAssistedDialingTransformation",
+ "formatNumberForMobileDialing returned an empty string");
+ return Optional.empty();
+ }
+
+ // TODO Verify the transformed number is still valid?
+ return Optional.of(transformedNumber);
+ }
+}