Launcher changes to handle UTS test mode.

When in UTS test mode keys received need to be handled
by the Phone application or Contacts application to
operate properly in the test mode. When not in test mode
the search widget will handle the keys as it was before
this change.

The UTS test mode is enabled when presist.sys.uts-test-mode is 1.

bug: 2402366
Change-Id: I58e68830f9ce6905e189ecba1c04b1076799a0a0
Signed-off-by: Wink Saville <wink@google.com>
diff --git a/src/com/android/launcher2/Launcher.java b/src/com/android/launcher2/Launcher.java
index 45545db..7a4e2bc 100644
--- a/src/com/android/launcher2/Launcher.java
+++ b/src/com/android/launcher2/Launcher.java
@@ -43,13 +43,16 @@
 import android.graphics.Canvas;
 import android.graphics.drawable.Drawable;
 import android.graphics.drawable.ColorDrawable;
+import android.net.Uri;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Parcelable;
 import android.os.RemoteException;
 import android.os.ServiceManager;
 import android.os.SystemProperties;
+import android.provider.ContactsContract;
 import android.provider.LiveFolders;
+import android.telephony.PhoneNumberUtils;
 import android.text.Selection;
 import android.text.SpannableStringBuilder;
 import android.text.TextUtils;
@@ -201,6 +204,8 @@
     private ImageView mPreviousView;
     private ImageView mNextView;
 
+    private boolean mUtsTestMode;
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
@@ -406,6 +411,7 @@
         super.onResume();
 
         mPaused = false;
+        mUtsTestMode = SystemProperties.getInt("persist.sys.uts-test-mode", 0) == 1;
 
         if (mRestoring) {
             mWorkspaceLoading = true;
@@ -456,6 +462,10 @@
 
     @Override
     public boolean onKeyDown(int keyCode, KeyEvent event) {
+        if (mUtsTestMode) {
+            return handleUtsTestModeKeyDown(keyCode, event);
+        }
+
         boolean handled = super.onKeyDown(keyCode, event);
         if (!handled && acceptFilter() && keyCode != KeyEvent.KEYCODE_ENTER) {
             boolean gotKey = TextKeyListener.getInstance().onKeyDown(mWorkspace, mDefaultKeySsb,
@@ -474,6 +484,52 @@
         return handled;
     }
 
+    public boolean handleUtsTestModeKeyDown(int keyCode, KeyEvent event) {
+        Log.d(TAG, "UTS-TEST-MODE");
+        boolean handled = super.onKeyDown(keyCode, event);
+        if (!handled && acceptFilter() && keyCode != KeyEvent.KEYCODE_ENTER) {
+            boolean gotKey = TextKeyListener.getInstance().onKeyDown(mWorkspace, mDefaultKeySsb,
+                    keyCode, event);
+            if (gotKey && mDefaultKeySsb != null && mDefaultKeySsb.length() > 0) {
+                // something usable has been typed - dispatch it now.
+                final String str = mDefaultKeySsb.toString();
+
+                boolean isDialable = true;
+                final int count = str.length();
+                for (int i = 0; i < count; i++) {
+                    if (!PhoneNumberUtils.isReallyDialable(str.charAt(i))) {
+                        isDialable = false;
+                        break;
+                    }
+                }
+                Intent intent;
+                if (isDialable) {
+                    intent = new Intent(Intent.ACTION_DIAL, Uri.fromParts("tel", str, null));
+                } else {
+                    intent = new Intent(ContactsContract.Intents.UI.FILTER_CONTACTS_ACTION);
+                    intent.putExtra(ContactsContract.Intents.UI.FILTER_TEXT_EXTRA_KEY, str);
+                }
+
+                intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK
+                        | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
+
+                try {
+                    startActivity(intent);
+                } catch (android.content.ActivityNotFoundException ex) {
+                    // Oh well... no one knows how to filter/dial. Life goes on.
+                }
+
+                mDefaultKeySsb.clear();
+                mDefaultKeySsb.clearSpans();
+                Selection.setSelection(mDefaultKeySsb, 0);
+
+                return true;
+            }
+        }
+
+        return handled;
+    }
+
     private String getTypedText() {
         return mDefaultKeySsb.toString();
     }