Dialer: Remove GoogleForwardLookup

* It doesn't work anymore
* https://webmasters.googleblog.com/2015/07/update-on-autocomplete-api.html
  and
  https://developers.google.com/maps/documentation/places/web-service/search-nearby
* We'd need an API key now and rewrite the whole thing - we don't have
  the first and don't do the latter
* Change default forward lookup to OSM

Change-Id: Ibed79a12b6c2048b90edead3abd34b642aa9feab
diff --git a/java/com/android/dialer/lookup/ForwardLookup.java b/java/com/android/dialer/lookup/ForwardLookup.java
index 2f59aeb..6a690bf 100644
--- a/java/com/android/dialer/lookup/ForwardLookup.java
+++ b/java/com/android/dialer/lookup/ForwardLookup.java
@@ -21,7 +21,6 @@
 import android.util.Log;
 
 import com.android.dialer.phonenumbercache.ContactInfo;
-import com.android.dialer.lookup.google.GoogleForwardLookup;
 import com.android.dialer.lookup.openstreetmap.OpenStreetMapForwardLookup;
 
 import java.util.List;
@@ -37,9 +36,7 @@
     if (INSTANCE == null || !isInstance(provider)) {
       Log.d(TAG, "Chosen forward lookup provider: " + provider);
 
-      if (provider.equals(LookupSettings.FLP_GOOGLE)) {
-        INSTANCE = new GoogleForwardLookup(context);
-      } else if (provider.equals(LookupSettings.FLP_OPENSTREETMAP)) {
+      if (provider.equals(LookupSettings.FLP_OPENSTREETMAP)) {
         INSTANCE = new OpenStreetMapForwardLookup(context);
       }
     }
@@ -48,10 +45,7 @@
   }
 
   private static boolean isInstance(String provider) {
-    if (provider.equals(LookupSettings.FLP_GOOGLE)
-        && INSTANCE instanceof GoogleForwardLookup) {
-      return true;
-    } else if (provider.equals(LookupSettings.FLP_OPENSTREETMAP)
+    if (provider.equals(LookupSettings.FLP_OPENSTREETMAP)
         && INSTANCE instanceof OpenStreetMapForwardLookup) {
       return true;
     } else {
diff --git a/java/com/android/dialer/lookup/LookupSettings.java b/java/com/android/dialer/lookup/LookupSettings.java
index 3842c62..990af1e 100644
--- a/java/com/android/dialer/lookup/LookupSettings.java
+++ b/java/com/android/dialer/lookup/LookupSettings.java
@@ -23,9 +23,8 @@
   private static final String TAG = LookupSettings.class.getSimpleName();
 
   /** Forward lookup providers */
-  public static final String FLP_GOOGLE = "Google";
   public static final String FLP_OPENSTREETMAP = "OpenStreetMap";
-  public static final String FLP_DEFAULT = FLP_GOOGLE;
+  public static final String FLP_DEFAULT = FLP_OPENSTREETMAP;
 
   /** People lookup providers */
   public static final String PLP_AUSKUNFT = "Auskunft";
@@ -46,7 +45,7 @@
   private static final String ENABLE_FORWARD_LOOKUP = "enable_forward_lookup";
   private static final String ENABLE_PEOPLE_LOOKUP = "enable_people_lookup";
   private static final String ENABLE_REVERSE_LOOKUP = "enable_reverse_lookup";
-  private static final String FORWARD_LOOKUP_PROVIDER = "forward_lookup_provider";
+  private static final String FORWARD_LOOKUP_PROVIDER = "forward_lookup_provider2";
   private static final String PEOPLE_LOOKUP_PROVIDER = "people_lookup_provider";
   private static final String REVERSE_LOOKUP_PROVIDER = "reverse_lookup_provider";
   private static final String OPENCNAM_ACCOUNT_SID = "opencnam_account_sid";
diff --git a/java/com/android/dialer/lookup/google/GoogleForwardLookup.java b/java/com/android/dialer/lookup/google/GoogleForwardLookup.java
deleted file mode 100644
index bae11c4..0000000
--- a/java/com/android/dialer/lookup/google/GoogleForwardLookup.java
+++ /dev/null
@@ -1,237 +0,0 @@
-/*
- * Copyright (C) 2014 Xiao-Long Chen <chillermillerlong@hotmail.com>
- *
- * 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.lookup.google;
-
-import android.content.Context;
-import android.content.pm.PackageManager;
-import android.location.Location;
-import android.net.Uri;
-import android.os.Build;
-import android.provider.ContactsContract.CommonDataKinds.Phone;
-import android.provider.ContactsContract.CommonDataKinds.StructuredPostal;
-import android.provider.ContactsContract.CommonDataKinds.Website;
-import android.text.Html;
-import android.util.Log;
-
-import com.android.dialer.phonenumbercache.ContactInfo;
-import com.android.dialer.lookup.ContactBuilder;
-import com.android.dialer.lookup.ForwardLookup;
-import com.android.dialer.lookup.LookupUtils;
-
-import org.json.JSONArray;
-import org.json.JSONException;
-import org.json.JSONObject;
-
-import java.io.IOException;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.HashMap;
-import java.util.Map;
-
-public class GoogleForwardLookup extends ForwardLookup {
-  private static final String TAG = GoogleForwardLookup.class.getSimpleName();
-
-  private static final boolean DEBUG = false;
-
-  private static final String QUERY_FILTER = "q";
-  private static final String QUERY_LANGUAGE = "hl";
-  private static final String QUERY_LOCATION = "sll";
-  private static final String QUERY_RADIUS = "radius";
-  private static final String QUERY_RANDOM = "gs_gbg";
-
-  private static final String RESULT_ADDRESS = "a";
-  private static final String RESULT_NUMBER = "b";
-  private static final String RESULT_DISTANCE = "c";
-  private static final String RESULT_PHOTO_URI = "d";
-  private static final String RESULT_WEBSITE = "f";
-  private static final String RESULT_CITY = "g";
-
-  /** Base for the query URL */
-  private static final String LOOKUP_URL = "https://www.google.com/complete/search?gs_ri=dialer";
-
-  /** Minimum query length
-   * (default for dialer_nearby_places_min_query_len) */
-  private static final int MIN_QUERY_LEN = 2;
-
-  /** Maximum query length
-   * (default for dialer_nearby_places_max_query_len) */
-  private static final int MAX_QUERY_LEN = 50;
-
-  /** Radius (in miles)
-   * (default for dialer_nearby_places_directory_radius_meters) */
-  private static final int RADIUS = 1000;
-
-  /** User agent string */
-  private final String userAgent;
-
-  public GoogleForwardLookup(Context context) {
-    StringBuilder sb = new StringBuilder("GoogleDialer ");
-    try {
-      sb.append(context.getPackageManager().getPackageInfo(
-          context.getPackageName(), 0).versionName);
-      sb.append(" ");
-      sb.append(Build.FINGERPRINT);
-    } catch (PackageManager.NameNotFoundException e) {
-      sb.setLength(0);
-    }
-    userAgent = sb.toString();
-  }
-
-  @Override
-  public List<ContactInfo> lookup(Context context, String filter, Location lastLocation) {
-    int length = filter.length();
-
-    if (length >= MIN_QUERY_LEN) {
-      if (length > MAX_QUERY_LEN) {
-        filter = filter.substring(0, MAX_QUERY_LEN);
-      }
-
-      try {
-        Uri.Builder builder = Uri.parse(LOOKUP_URL).buildUpon();
-
-        // Query string
-        builder.appendQueryParameter(QUERY_FILTER, filter);
-
-        // Language
-        builder.appendQueryParameter(QUERY_LANGUAGE,
-            context.getResources().getConfiguration().locale.getLanguage());
-
-        // Location (latitude and longitude)
-        builder.appendQueryParameter(QUERY_LOCATION,
-            String.format("%f,%f", lastLocation.getLatitude(), lastLocation.getLongitude()));
-
-        // Radius distance
-        builder.appendQueryParameter(QUERY_RADIUS, Integer.toString(RADIUS));
-
-        // Random string (not really required)
-        builder.appendQueryParameter(QUERY_RANDOM, getRandomNoiseString());
-
-        Map<String, String> headers = new HashMap<>();
-        headers.put("User-Agent", userAgent);
-        JSONArray results = new JSONArray(
-            LookupUtils.httpGet(builder.build().toString(), headers));
-
-        if (DEBUG) Log.v(TAG, "Results: " + results);
-
-        return getEntries(results);
-      } catch (IOException e) {
-        Log.e(TAG, "Failed to execute query", e);
-      } catch (JSONException e) {
-        Log.e(TAG, "JSON error", e);
-      }
-    }
-
-    return null;
-  }
-
-  /**
-   * Parse JSON results and return them as an array of ContactInfo
-   *
-   * @param results The JSON results returned from the server
-   * @return Array of ContactInfo containing the result information
-   */
-  private List<ContactInfo> getEntries(JSONArray results) throws JSONException {
-    ArrayList<ContactInfo> details = new ArrayList<>();
-    JSONArray entries = results.getJSONArray(1);
-
-    for (int i = 0; i < entries.length(); i++) {
-      try {
-        JSONArray entry = entries.getJSONArray(i);
-
-        String displayName = decodeHtml(entry.getString(0));
-
-        JSONObject params = entry.getJSONObject(3);
-
-        String phoneNumber = decodeHtml(params.getString(RESULT_NUMBER));
-
-        String address = decodeHtml(params.getString(RESULT_ADDRESS));
-        String city = decodeHtml(params.getString(RESULT_CITY));
-
-        String profileUrl = params.optString(RESULT_WEBSITE, null);
-        String photoUri = params.optString(RESULT_PHOTO_URI, null);
-
-        ContactBuilder.Address a = new ContactBuilder.Address();
-        a.formattedAddress = address;
-        a.city = city;
-        a.type = StructuredPostal.TYPE_WORK;
-
-        details.add(ContactBuilder.forForwardLookup(phoneNumber)
-            .setName(ContactBuilder.Name.createDisplayName(displayName))
-            .addPhoneNumber(ContactBuilder.PhoneNumber.createMainNumber(phoneNumber))
-            .addWebsite(ContactBuilder.WebsiteUrl.createProfile(profileUrl))
-            .addAddress(a)
-            .setPhotoUri(photoUri != null ? photoUri : ContactBuilder.PHOTO_URI_BUSINESS)
-            .build());
-      } catch (JSONException e) {
-        Log.e(TAG, "Skipping the suggestions at index " + i, e);
-      }
-    }
-
-    return details;
-  }
-
-  /**
-   * Generate a random string of alphanumeric characters of length [4, 36)
-   *
-   * @return Random alphanumeric string
-   */
-  private String getRandomNoiseString() {
-    StringBuilder garbage = new StringBuilder();
-    int length = getRandomInteger(32) + 4;
-
-    for (int i = 0; i < length; i++) {
-      int asciiCode;
-
-      if (Math.random() >= 0.3) {
-        if (Math.random() <= 0.5) {
-          // Lowercase letters
-          asciiCode = getRandomInteger(26) + 97;
-        } else {
-          // Uppercase letters
-          asciiCode = getRandomInteger(26) + 65;
-        }
-      } else {
-        // Numbers
-        asciiCode = getRandomInteger(10) + 48;
-      }
-
-      garbage.append(Character.toString((char) asciiCode));
-    }
-
-    return garbage.toString();
-  }
-
-  /**
-   * Generate number in the range [0, max).
-   *
-   * @param max Upper limit (non-inclusive)
-   * @return Random number inside [0, max)
-   */
-  private int getRandomInteger(int max) {
-    return (int) Math.floor(Math.random() * max);
-  }
-
-  /**
-   * Convert HTML to unformatted plain text.
-   *
-   * @param s HTML content
-   * @return Unformatted plain text
-   */
-  private String decodeHtml(String s) {
-    return Html.fromHtml(s).toString();
-  }
-}
diff --git a/java/com/android/dialer/lookup/res/values/cm_arrays.xml b/java/com/android/dialer/lookup/res/values/cm_arrays.xml
index a566727..14a7f9c 100644
--- a/java/com/android/dialer/lookup/res/values/cm_arrays.xml
+++ b/java/com/android/dialer/lookup/res/values/cm_arrays.xml
@@ -16,12 +16,10 @@
 -->
 <resources xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string-array name="forward_lookup_providers" translatable="false">
-        <item>Google</item>
         <item>OpenStreetMap</item>
     </string-array>
 
     <string-array name="forward_lookup_provider_names" translatable="false">
-        <item>Google</item>
         <item>OpenStreetMap</item>
     </string-array>