From 2ca4318cc1ee57dda907ba2069bd61d162b1baef Mon Sep 17 00:00:00 2001 From: Eric Erfanian Date: Thu, 31 Aug 2017 06:57:16 -0700 Subject: Update Dialer source to latest internal Google revision. Previously, Android's Dialer app was developed in an internal Google source control system and only exported to public during AOSP drops. The Dialer team is now switching to a public development model similar to the telephony team. This CL represents all internal Google changes that were committed to Dialer between the public O release and today's tip of tree on internal master. This CL squashes those changes into a single commit. In subsequent changes, changes will be exported on a per-commit basis. Test: make, flash install, run Merged-In: I45270eaa8ce732d71a1bd84b08c7fa0e99af3160 Change-Id: I529aaeb88535b9533c0ae4ef4e6c1222d4e0f1c8 PiperOrigin-RevId: 167068436 --- .../searchfragment/remote/AndroidManifest.xml | 16 +++ .../remote/RemoteContactViewHolder.java | 133 +++++++++++++++++++++ .../remote/RemoteContactsCursor.java | 105 ++++++++++++++++ .../remote/RemoteContactsCursorLoader.java | 106 ++++++++++++++++ .../remote/RemoteDirectoriesCursorLoader.java | 77 ++++++++++++ .../remote/res/values-af/strings.xml | 21 ++++ .../remote/res/values-am/strings.xml | 21 ++++ .../remote/res/values-ar/strings.xml | 21 ++++ .../remote/res/values-az/strings.xml | 21 ++++ .../remote/res/values-b+sr+Latn/strings.xml | 21 ++++ .../remote/res/values-be/strings.xml | 21 ++++ .../remote/res/values-bg/strings.xml | 21 ++++ .../remote/res/values-bn/strings.xml | 21 ++++ .../remote/res/values-bs/strings.xml | 21 ++++ .../remote/res/values-ca/strings.xml | 21 ++++ .../remote/res/values-cs/strings.xml | 21 ++++ .../remote/res/values-da/strings.xml | 21 ++++ .../remote/res/values-de/strings.xml | 21 ++++ .../remote/res/values-el/strings.xml | 21 ++++ .../remote/res/values-en-rAU/strings.xml | 21 ++++ .../remote/res/values-en-rGB/strings.xml | 21 ++++ .../remote/res/values-en-rIN/strings.xml | 21 ++++ .../remote/res/values-es-rUS/strings.xml | 21 ++++ .../remote/res/values-es/strings.xml | 21 ++++ .../remote/res/values-et/strings.xml | 21 ++++ .../remote/res/values-eu/strings.xml | 21 ++++ .../remote/res/values-fa/strings.xml | 21 ++++ .../remote/res/values-fi/strings.xml | 21 ++++ .../remote/res/values-fr-rCA/strings.xml | 21 ++++ .../remote/res/values-fr/strings.xml | 21 ++++ .../remote/res/values-gl/strings.xml | 21 ++++ .../remote/res/values-gu/strings.xml | 21 ++++ .../remote/res/values-hi/strings.xml | 21 ++++ .../remote/res/values-hr/strings.xml | 21 ++++ .../remote/res/values-hu/strings.xml | 21 ++++ .../remote/res/values-hy/strings.xml | 21 ++++ .../remote/res/values-in/strings.xml | 21 ++++ .../remote/res/values-is/strings.xml | 21 ++++ .../remote/res/values-it/strings.xml | 21 ++++ .../remote/res/values-iw/strings.xml | 21 ++++ .../remote/res/values-ja/strings.xml | 21 ++++ .../remote/res/values-ka/strings.xml | 21 ++++ .../remote/res/values-kk/strings.xml | 21 ++++ .../remote/res/values-km/strings.xml | 21 ++++ .../remote/res/values-kn/strings.xml | 21 ++++ .../remote/res/values-ko/strings.xml | 21 ++++ .../remote/res/values-ky/strings.xml | 21 ++++ .../remote/res/values-lo/strings.xml | 21 ++++ .../remote/res/values-lt/strings.xml | 21 ++++ .../remote/res/values-lv/strings.xml | 21 ++++ .../remote/res/values-mk/strings.xml | 21 ++++ .../remote/res/values-ml/strings.xml | 21 ++++ .../remote/res/values-mn/strings.xml | 21 ++++ .../remote/res/values-mr/strings.xml | 21 ++++ .../remote/res/values-ms/strings.xml | 21 ++++ .../remote/res/values-my/strings.xml | 21 ++++ .../remote/res/values-nb/strings.xml | 21 ++++ .../remote/res/values-ne/strings.xml | 21 ++++ .../remote/res/values-nl/strings.xml | 21 ++++ .../remote/res/values-no/strings.xml | 21 ++++ .../remote/res/values-pa/strings.xml | 21 ++++ .../remote/res/values-pl/strings.xml | 21 ++++ .../remote/res/values-pt-rBR/strings.xml | 21 ++++ .../remote/res/values-pt-rPT/strings.xml | 21 ++++ .../remote/res/values-pt/strings.xml | 21 ++++ .../remote/res/values-ro/strings.xml | 21 ++++ .../remote/res/values-ru/strings.xml | 21 ++++ .../remote/res/values-si/strings.xml | 21 ++++ .../remote/res/values-sk/strings.xml | 21 ++++ .../remote/res/values-sl/strings.xml | 21 ++++ .../remote/res/values-sq/strings.xml | 21 ++++ .../remote/res/values-sr/strings.xml | 21 ++++ .../remote/res/values-sv/strings.xml | 21 ++++ .../remote/res/values-sw/strings.xml | 21 ++++ .../remote/res/values-ta/strings.xml | 21 ++++ .../remote/res/values-te/strings.xml | 21 ++++ .../remote/res/values-th/strings.xml | 21 ++++ .../remote/res/values-tl/strings.xml | 21 ++++ .../remote/res/values-tr/strings.xml | 21 ++++ .../remote/res/values-uk/strings.xml | 21 ++++ .../remote/res/values-ur/strings.xml | 21 ++++ .../remote/res/values-uz/strings.xml | 21 ++++ .../remote/res/values-vi/strings.xml | 21 ++++ .../remote/res/values-zh-rCN/strings.xml | 21 ++++ .../remote/res/values-zh-rHK/strings.xml | 21 ++++ .../remote/res/values-zh-rTW/strings.xml | 21 ++++ .../remote/res/values-zu/strings.xml | 21 ++++ .../searchfragment/remote/res/values/strings.xml | 20 ++++ 88 files changed, 2179 insertions(+) create mode 100644 java/com/android/dialer/searchfragment/remote/AndroidManifest.xml create mode 100644 java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java create mode 100644 java/com/android/dialer/searchfragment/remote/RemoteContactsCursor.java create mode 100644 java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java create mode 100644 java/com/android/dialer/searchfragment/remote/RemoteDirectoriesCursorLoader.java create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-af/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-am/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-ar/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-az/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-b+sr+Latn/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-be/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-bg/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-bn/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-bs/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-ca/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-cs/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-da/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-de/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-el/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-en-rAU/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-en-rGB/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-en-rIN/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-es-rUS/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-es/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-et/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-eu/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-fa/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-fi/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-fr-rCA/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-fr/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-gl/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-gu/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-hi/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-hr/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-hu/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-hy/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-in/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-is/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-it/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-iw/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-ja/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-ka/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-kk/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-km/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-kn/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-ko/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-ky/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-lo/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-lt/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-lv/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-mk/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-ml/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-mn/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-mr/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-ms/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-my/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-nb/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-ne/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-nl/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-no/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-pa/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-pl/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-pt-rBR/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-pt-rPT/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-pt/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-ro/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-ru/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-si/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-sk/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-sl/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-sq/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-sr/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-sv/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-sw/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-ta/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-te/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-th/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-tl/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-tr/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-uk/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-ur/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-uz/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-vi/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-zh-rCN/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-zh-rHK/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-zh-rTW/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values-zu/strings.xml create mode 100644 java/com/android/dialer/searchfragment/remote/res/values/strings.xml (limited to 'java/com/android/dialer/searchfragment/remote') diff --git a/java/com/android/dialer/searchfragment/remote/AndroidManifest.xml b/java/com/android/dialer/searchfragment/remote/AndroidManifest.xml new file mode 100644 index 000000000..e52f5319e --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/AndroidManifest.xml @@ -0,0 +1,16 @@ + + \ No newline at end of file diff --git a/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java b/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java new file mode 100644 index 000000000..5fb12d349 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/RemoteContactViewHolder.java @@ -0,0 +1,133 @@ +/* + * 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.searchfragment.remote; + +import android.content.Context; +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.text.TextUtils; +import android.view.View; +import android.widget.QuickContactBadge; +import android.widget.TextView; +import com.android.dialer.callintent.CallInitiationType; +import com.android.dialer.callintent.CallIntentBuilder; +import com.android.dialer.contactphoto.ContactPhotoManager; +import com.android.dialer.lettertile.LetterTileDrawable; +import com.android.dialer.searchfragment.common.Projections; +import com.android.dialer.searchfragment.common.QueryBoldingUtil; +import com.android.dialer.searchfragment.common.R; +import com.android.dialer.searchfragment.common.SearchCursor; +import com.android.dialer.telecom.TelecomUtil; + +/** ViewHolder for a nearby place row. */ +public final class RemoteContactViewHolder extends RecyclerView.ViewHolder + implements View.OnClickListener { + + private final Context context; + private final TextView nameView; + private final TextView numberView; + private final QuickContactBadge photo; + + private String number; + + public RemoteContactViewHolder(View view) { + super(view); + view.setOnClickListener(this); + photo = view.findViewById(R.id.photo); + nameView = view.findViewById(R.id.primary); + numberView = view.findViewById(R.id.secondary); + context = view.getContext(); + } + + /** + * Binds the ViewHolder with a cursor from {@link RemoteContactsCursorLoader} with the data found + * at the cursors current position. + */ + public void bind(SearchCursor cursor, String query) { + number = cursor.getString(Projections.PHONE_NUMBER); + String name = cursor.getString(Projections.PHONE_DISPLAY_NAME); + String label = getLabel(context.getResources(), cursor); + String secondaryInfo = + TextUtils.isEmpty(label) + ? number + : context.getString( + com.android.contacts.common.R.string.call_subject_type_and_number, label, number); + + nameView.setText(QueryBoldingUtil.getNameWithQueryBolded(query, name)); + numberView.setText(QueryBoldingUtil.getNameWithQueryBolded(query, secondaryInfo)); + + if (shouldShowPhoto(cursor)) { + nameView.setVisibility(View.VISIBLE); + photo.setVisibility(View.VISIBLE); + String photoUri = cursor.getString(Projections.PHONE_PHOTO_URI); + ContactPhotoManager.getInstance(context) + .loadDialerThumbnailOrPhoto( + photo, + getContactUri(cursor), + cursor.getLong(Projections.PHONE_PHOTO_ID), + photoUri == null ? null : Uri.parse(photoUri), + name, + LetterTileDrawable.TYPE_DEFAULT); + } else { + nameView.setVisibility(View.GONE); + photo.setVisibility(View.INVISIBLE); + } + } + + // Show the contact photo next to only the first number if a contact has multiple numbers + private boolean shouldShowPhoto(SearchCursor cursor) { + int currentPosition = cursor.getPosition(); + String currentLookupKey = cursor.getString(Projections.PHONE_LOOKUP_KEY); + cursor.moveToPosition(currentPosition - 1); + + if (!cursor.isHeader() && !cursor.isBeforeFirst()) { + String previousLookupKey = cursor.getString(Projections.PHONE_LOOKUP_KEY); + cursor.moveToPosition(currentPosition); + return !currentLookupKey.equals(previousLookupKey); + } + cursor.moveToPosition(currentPosition); + return true; + } + + // TODO(calderwoodra): unify this into a utility method with CallLogAdapter#getNumberType + private static String getLabel(Resources resources, Cursor cursor) { + int numberType = cursor.getInt(Projections.PHONE_TYPE); + String numberLabel = cursor.getString(Projections.PHONE_LABEL); + + // Returns empty label instead of "custom" if the custom label is empty. + if (numberType == Phone.TYPE_CUSTOM && TextUtils.isEmpty(numberLabel)) { + return ""; + } + return (String) Phone.getTypeLabel(resources, numberType, numberLabel); + } + + private static Uri getContactUri(Cursor cursor) { + long contactId = cursor.getLong(Projections.PHONE_ID); + String lookupKey = cursor.getString(Projections.PHONE_LOOKUP_KEY); + return ContactsContract.Contacts.getLookupUri(contactId, lookupKey); + } + + @Override + public void onClick(View v) { + TelecomUtil.placeCall( + context, new CallIntentBuilder(number, CallInitiationType.Type.REGULAR_SEARCH).build()); + } +} diff --git a/java/com/android/dialer/searchfragment/remote/RemoteContactsCursor.java b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursor.java new file mode 100644 index 000000000..d7c4f3805 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursor.java @@ -0,0 +1,105 @@ +/* + * 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.searchfragment.remote; + +import android.content.Context; +import android.database.Cursor; +import android.database.MatrixCursor; +import android.database.MergeCursor; +import android.support.annotation.Nullable; +import android.support.annotation.VisibleForTesting; +import com.android.dialer.common.Assert; +import com.android.dialer.searchfragment.common.SearchCursor; +import com.android.dialer.searchfragment.remote.RemoteDirectoriesCursorLoader.Directory; +import java.util.ArrayList; +import java.util.List; + +/** + * {@link MergeCursor} used for combining remote directory cursors into one cursor. + * + *

Usually a device with multiple Google accounts will have multiple remote directories returned + * by {@link RemoteDirectoriesCursorLoader}, each represented as a {@link Directory}. + * + *

This cursor merges them together with a header at the start of each cursor/list using {@link + * Directory#getDisplayName()} as the header text. + */ +@VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) +public final class RemoteContactsCursor extends MergeCursor implements SearchCursor { + + /** + * Returns a single cursor with headers inserted between each non-empty cursor. If all cursors are + * empty, null or closed, this method returns null. + */ + @Nullable + @VisibleForTesting(otherwise = VisibleForTesting.PACKAGE_PRIVATE) + public static RemoteContactsCursor newInstance( + Context context, Cursor[] cursors, List directories) { + Assert.checkArgument( + cursors.length == directories.size(), "Directories and cursors must be the same size."); + Cursor[] cursorsWithHeaders = insertHeaders(context, cursors, directories); + if (cursorsWithHeaders.length > 0) { + return new RemoteContactsCursor(cursorsWithHeaders); + } + return null; + } + + private RemoteContactsCursor(Cursor[] cursors) { + super(cursors); + } + + private static Cursor[] insertHeaders( + Context context, Cursor[] cursors, List directories) { + List cursorList = new ArrayList<>(); + for (int i = 0; i < cursors.length; i++) { + Cursor cursor = cursors[i]; + + if (cursor == null || cursor.isClosed()) { + continue; + } + + Directory directory = directories.get(i); + if (cursor.getCount() == 0) { + // Since the cursor isn't being merged in, we need to close it here. + cursor.close(); + continue; + } + + cursorList.add(createHeaderCursor(context, directory.getDisplayName())); + cursorList.add(cursor); + } + return cursorList.toArray(new Cursor[cursorList.size()]); + } + + private static MatrixCursor createHeaderCursor(Context context, String name) { + MatrixCursor headerCursor = new MatrixCursor(HEADER_PROJECTION, 1); + headerCursor.addRow(new String[] {context.getString(R.string.directory, name)}); + return headerCursor; + } + + /** Returns true if the current position is a header row. */ + @Override + public boolean isHeader() { + return !isClosed() && getColumnIndex(HEADER_PROJECTION[HEADER_TEXT_POSITION]) != -1; + } + + @Override + public boolean updateQuery(@Nullable String query) { + // When the query changes, a new network request is made for nearby places. Meaning this cursor + // will be closed and another created, so return false. + return false; + } +} diff --git a/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java new file mode 100644 index 000000000..771b7f183 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/RemoteContactsCursorLoader.java @@ -0,0 +1,106 @@ +/* + * 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.searchfragment.remote; + +import android.content.Context; +import android.content.CursorLoader; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.provider.ContactsContract; +import android.provider.ContactsContract.CommonDataKinds.Phone; +import android.support.annotation.VisibleForTesting; +import android.text.TextUtils; +import com.android.dialer.searchfragment.common.Projections; +import com.android.dialer.searchfragment.remote.RemoteDirectoriesCursorLoader.Directory; +import java.util.List; + +/** + * Cursor loader to load extended contacts on device. + * + *

This loader performs several database queries in serial and merges the resulting cursors + * together into {@link RemoteContactsCursor}. If there are no results, the loader will return a + * null cursor. + */ +public final class RemoteContactsCursorLoader extends CursorLoader { + + private static final Uri ENTERPRISE_CONTENT_FILTER_URI = + Uri.withAppendedPath(Phone.CONTENT_URI, "filter_enterprise"); + + private static final String IGNORE_NUMBER_TOO_LONG_CLAUSE = "length(" + Phone.NUMBER + ") < 1000"; + private static final String MAX_RESULTS = "20"; + + private final String query; + private final List directories; + private final Cursor[] cursors; + + public RemoteContactsCursorLoader(Context context, String query, List directories) { + super( + context, + null, + Projections.PHONE_PROJECTION, + IGNORE_NUMBER_TOO_LONG_CLAUSE, + null, + Phone.SORT_KEY_PRIMARY); + this.query = query; + this.directories = directories; + cursors = new Cursor[directories.size()]; + } + + @Override + public Cursor loadInBackground() { + for (int i = 0; i < directories.size(); i++) { + Directory directory = directories.get(i); + // Since the on device contacts could be queried as remote directories and we already query + // them in SearchContactsCursorLoader, avoid querying them again. + // TODO(calderwoodra): It's a happy coincidence that on device contacts don't have directory + // names set, leaving this todo to investigate a better way to isolate them from other remote + // directories. + if (TextUtils.isEmpty(directory.getDisplayName())) { + cursors[i] = null; + continue; + } + cursors[i] = + getContext() + .getContentResolver() + .query( + getContentFilterUri(query, directory.getId()), + getProjection(), + getSelection(), + getSelectionArgs(), + getSortOrder()); + } + return RemoteContactsCursor.newInstance(getContext(), cursors, directories); + } + + @VisibleForTesting + static Uri getContentFilterUri(String query, int directoryId) { + Uri baseUri = + VERSION.SDK_INT >= VERSION_CODES.N + ? ENTERPRISE_CONTENT_FILTER_URI + : Phone.CONTENT_FILTER_URI; + + return baseUri + .buildUpon() + .appendPath(query) + .appendQueryParameter(ContactsContract.DIRECTORY_PARAM_KEY, String.valueOf(directoryId)) + .appendQueryParameter(ContactsContract.REMOVE_DUPLICATE_ENTRIES, "true") + .appendQueryParameter(ContactsContract.LIMIT_PARAM_KEY, MAX_RESULTS) + .build(); + } +} diff --git a/java/com/android/dialer/searchfragment/remote/RemoteDirectoriesCursorLoader.java b/java/com/android/dialer/searchfragment/remote/RemoteDirectoriesCursorLoader.java new file mode 100644 index 000000000..327a62c7b --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/RemoteDirectoriesCursorLoader.java @@ -0,0 +1,77 @@ +/* + +* 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.searchfragment.remote; + +import android.content.Context; +import android.content.CursorLoader; +import android.database.Cursor; +import android.net.Uri; +import android.os.Build.VERSION; +import android.os.Build.VERSION_CODES; +import android.provider.ContactsContract; +import android.support.annotation.Nullable; +import android.support.annotation.VisibleForTesting; +import com.google.auto.value.AutoValue; + +/** CursorLoader to load the list of remote directories on the device. */ +public final class RemoteDirectoriesCursorLoader extends CursorLoader { + + /** Positions of columns in {@code PROJECTIONS}. */ + private static final int ID = 0; + + private static final int DISPLAY_NAME = 1; + private static final int PHOTO_SUPPORT = 2; + + @VisibleForTesting + static final String[] PROJECTION = { + ContactsContract.Directory._ID, + ContactsContract.Directory.DISPLAY_NAME, + ContactsContract.Directory.PHOTO_SUPPORT, + }; + + public RemoteDirectoriesCursorLoader(Context context) { + super(context, getContentUri(), PROJECTION, null, null, ContactsContract.Directory._ID); + } + + /** @return current cursor row represented as a {@link Directory}. */ + public static Directory readDirectory(Cursor cursor) { + return Directory.create( + cursor.getInt(ID), cursor.getString(DISPLAY_NAME), cursor.getInt(PHOTO_SUPPORT) != 0); + } + + private static Uri getContentUri() { + return VERSION.SDK_INT >= VERSION_CODES.N + ? ContactsContract.Directory.ENTERPRISE_CONTENT_URI + : ContactsContract.Directory.CONTENT_URI; + } + + /** POJO representing the results returned from {@link RemoteDirectoriesCursorLoader}. */ + @AutoValue + public abstract static class Directory { + public static Directory create(int id, @Nullable String displayName, boolean supportsPhotos) { + return new AutoValue_RemoteDirectoriesCursorLoader_Directory(id, displayName, supportsPhotos); + } + + abstract int getId(); + + /** Returns a user facing display name of the directory. Null if none exists. */ + abstract @Nullable String getDisplayName(); + + abstract boolean supportsPhotos(); + } +} diff --git a/java/com/android/dialer/searchfragment/remote/res/values-af/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-af/strings.xml new file mode 100644 index 000000000..9259a90ef --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-af/strings.xml @@ -0,0 +1,21 @@ + + + + + "Gids %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-am/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-am/strings.xml new file mode 100644 index 000000000..adf2cea9c --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-am/strings.xml @@ -0,0 +1,21 @@ + + + + + "ማውጫ %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-ar/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-ar/strings.xml new file mode 100644 index 000000000..545a629f1 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-ar/strings.xml @@ -0,0 +1,21 @@ + + + + + "دليل %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-az/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-az/strings.xml new file mode 100644 index 000000000..bd7cedafa --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-az/strings.xml @@ -0,0 +1,21 @@ + + + + + "Kataloq %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-b+sr+Latn/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-b+sr+Latn/strings.xml new file mode 100644 index 000000000..3f23ec936 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-b+sr+Latn/strings.xml @@ -0,0 +1,21 @@ + + + + + "Katalog %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-be/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-be/strings.xml new file mode 100644 index 000000000..da911a5e1 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-be/strings.xml @@ -0,0 +1,21 @@ + + + + + "Каталог %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-bg/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-bg/strings.xml new file mode 100644 index 000000000..6cd9a1cc6 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-bg/strings.xml @@ -0,0 +1,21 @@ + + + + + "Директория на %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-bn/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-bn/strings.xml new file mode 100644 index 000000000..007ae2ffd --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-bn/strings.xml @@ -0,0 +1,21 @@ + + + + + "সংগ্রহ %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-bs/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-bs/strings.xml new file mode 100644 index 000000000..396bc15a4 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-bs/strings.xml @@ -0,0 +1,21 @@ + + + + + "Imenik e-pošte %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-ca/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-ca/strings.xml new file mode 100644 index 000000000..c08206cda --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-ca/strings.xml @@ -0,0 +1,21 @@ + + + + + "Directori %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-cs/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-cs/strings.xml new file mode 100644 index 000000000..9a57bb432 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-cs/strings.xml @@ -0,0 +1,21 @@ + + + + + "Adresář %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-da/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-da/strings.xml new file mode 100644 index 000000000..9cbea4f4d --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-da/strings.xml @@ -0,0 +1,21 @@ + + + + + "Indeks %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-de/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-de/strings.xml new file mode 100644 index 000000000..8e6939d87 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-de/strings.xml @@ -0,0 +1,21 @@ + + + + + "Verzeichnis \"%1$s\"" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-el/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-el/strings.xml new file mode 100644 index 000000000..e099de2dc --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-el/strings.xml @@ -0,0 +1,21 @@ + + + + + "Κατάλογος %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-en-rAU/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-en-rAU/strings.xml new file mode 100644 index 000000000..39f8fda33 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-en-rAU/strings.xml @@ -0,0 +1,21 @@ + + + + + "Directory %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-en-rGB/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-en-rGB/strings.xml new file mode 100644 index 000000000..39f8fda33 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-en-rGB/strings.xml @@ -0,0 +1,21 @@ + + + + + "Directory %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-en-rIN/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-en-rIN/strings.xml new file mode 100644 index 000000000..39f8fda33 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-en-rIN/strings.xml @@ -0,0 +1,21 @@ + + + + + "Directory %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-es-rUS/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-es-rUS/strings.xml new file mode 100644 index 000000000..f4feb6c85 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-es-rUS/strings.xml @@ -0,0 +1,21 @@ + + + + + "Directorio %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-es/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-es/strings.xml new file mode 100644 index 000000000..5353c103a --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-es/strings.xml @@ -0,0 +1,21 @@ + + + + + "Directorio de %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-et/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-et/strings.xml new file mode 100644 index 000000000..4a110b046 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-et/strings.xml @@ -0,0 +1,21 @@ + + + + + "Kataloog %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-eu/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-eu/strings.xml new file mode 100644 index 000000000..ecc8286f2 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-eu/strings.xml @@ -0,0 +1,21 @@ + + + + + "%1$s direktorioa" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-fa/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-fa/strings.xml new file mode 100644 index 000000000..e4ec31dfb --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-fa/strings.xml @@ -0,0 +1,21 @@ + + + + + "فهرست %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-fi/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-fi/strings.xml new file mode 100644 index 000000000..787c4c9c7 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-fi/strings.xml @@ -0,0 +1,21 @@ + + + + + "%1$s-hakemisto" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-fr-rCA/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-fr-rCA/strings.xml new file mode 100644 index 000000000..87bfff151 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-fr-rCA/strings.xml @@ -0,0 +1,21 @@ + + + + + "Annuaire %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-fr/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-fr/strings.xml new file mode 100644 index 000000000..78fed92ba --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-fr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Dossier %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-gl/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-gl/strings.xml new file mode 100644 index 000000000..f4feb6c85 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-gl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Directorio %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-gu/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-gu/strings.xml new file mode 100644 index 000000000..f4a9e974e --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-gu/strings.xml @@ -0,0 +1,21 @@ + + + + + "નિર્દેશિકા %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-hi/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-hi/strings.xml new file mode 100644 index 000000000..80f784cb5 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-hi/strings.xml @@ -0,0 +1,21 @@ + + + + + "निर्देशिका %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-hr/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-hr/strings.xml new file mode 100644 index 000000000..51b521066 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-hr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Direktorij %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-hu/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-hu/strings.xml new file mode 100644 index 000000000..7a36911db --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-hu/strings.xml @@ -0,0 +1,21 @@ + + + + + "Könyvtár: %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-hy/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-hy/strings.xml new file mode 100644 index 000000000..59a4e8895 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-hy/strings.xml @@ -0,0 +1,21 @@ + + + + + "Գրացուցակ «%1$s»" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-in/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-in/strings.xml new file mode 100644 index 000000000..ceabfd1a5 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-in/strings.xml @@ -0,0 +1,21 @@ + + + + + "Direktori %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-is/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-is/strings.xml new file mode 100644 index 000000000..2838a6b6b --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-is/strings.xml @@ -0,0 +1,21 @@ + + + + + "Tengiliðaskrá %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-it/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-it/strings.xml new file mode 100644 index 000000000..39f8fda33 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-it/strings.xml @@ -0,0 +1,21 @@ + + + + + "Directory %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-iw/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-iw/strings.xml new file mode 100644 index 000000000..5e303672f --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-iw/strings.xml @@ -0,0 +1,21 @@ + + + + + "ספרייה %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-ja/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-ja/strings.xml new file mode 100644 index 000000000..3f992a8f6 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-ja/strings.xml @@ -0,0 +1,21 @@ + + + + + "「%1$s」ディレクトリ" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-ka/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-ka/strings.xml new file mode 100644 index 000000000..a4c319b3d --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-ka/strings.xml @@ -0,0 +1,21 @@ + + + + + "კატალოგი %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-kk/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-kk/strings.xml new file mode 100644 index 000000000..c85d1a852 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-kk/strings.xml @@ -0,0 +1,21 @@ + + + + + "%1$s каталогы" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-km/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-km/strings.xml new file mode 100644 index 000000000..c59f05024 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-km/strings.xml @@ -0,0 +1,21 @@ + + + + + "បញ្ជី %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-kn/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-kn/strings.xml new file mode 100644 index 000000000..a6a7f8d0f --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-kn/strings.xml @@ -0,0 +1,21 @@ + + + + + "%1$s ಡೈರೆಕ್ಟರಿ" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-ko/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-ko/strings.xml new file mode 100644 index 000000000..f7421bff0 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-ko/strings.xml @@ -0,0 +1,21 @@ + + + + + "디렉토리 %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-ky/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-ky/strings.xml new file mode 100644 index 000000000..da911a5e1 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-ky/strings.xml @@ -0,0 +1,21 @@ + + + + + "Каталог %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-lo/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-lo/strings.xml new file mode 100644 index 000000000..81c6c4f2c --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-lo/strings.xml @@ -0,0 +1,21 @@ + + + + + "ໄດເຣັກທໍຣີ %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-lt/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-lt/strings.xml new file mode 100644 index 000000000..323bd3e23 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-lt/strings.xml @@ -0,0 +1,21 @@ + + + + + "Katalogas „%1$s“" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-lv/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-lv/strings.xml new file mode 100644 index 000000000..248cf9b02 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-lv/strings.xml @@ -0,0 +1,21 @@ + + + + + "Direktorijs: %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-mk/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-mk/strings.xml new file mode 100644 index 000000000..1d84aaf8a --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-mk/strings.xml @@ -0,0 +1,21 @@ + + + + + "Адресар %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-ml/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-ml/strings.xml new file mode 100644 index 000000000..104270b6e --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-ml/strings.xml @@ -0,0 +1,21 @@ + + + + + "ഡയറക്റ്ററി %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-mn/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-mn/strings.xml new file mode 100644 index 000000000..ba31b9e1f --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-mn/strings.xml @@ -0,0 +1,21 @@ + + + + + "Директор %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-mr/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-mr/strings.xml new file mode 100644 index 000000000..5b6e3c410 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-mr/strings.xml @@ -0,0 +1,21 @@ + + + + + "डिरेक्टरी %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-ms/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-ms/strings.xml new file mode 100644 index 000000000..ceabfd1a5 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-ms/strings.xml @@ -0,0 +1,21 @@ + + + + + "Direktori %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-my/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-my/strings.xml new file mode 100644 index 000000000..de17783e3 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-my/strings.xml @@ -0,0 +1,21 @@ + + + + + "လမ်းညွှန် %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-nb/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-nb/strings.xml new file mode 100644 index 000000000..2e745abb5 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-nb/strings.xml @@ -0,0 +1,21 @@ + + + + + "Katalog – %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-ne/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-ne/strings.xml new file mode 100644 index 000000000..80f784cb5 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-ne/strings.xml @@ -0,0 +1,21 @@ + + + + + "निर्देशिका %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-nl/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-nl/strings.xml new file mode 100644 index 000000000..39f8fda33 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-nl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Directory %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-no/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-no/strings.xml new file mode 100644 index 000000000..2e745abb5 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-no/strings.xml @@ -0,0 +1,21 @@ + + + + + "Katalog – %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-pa/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-pa/strings.xml new file mode 100644 index 000000000..431bc557e --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-pa/strings.xml @@ -0,0 +1,21 @@ + + + + + "ਡਾਇਰੈਕਟਰੀ %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-pl/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-pl/strings.xml new file mode 100644 index 000000000..3f23ec936 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-pl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Katalog %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-pt-rBR/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-pt-rBR/strings.xml new file mode 100644 index 000000000..c03d95f10 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-pt-rBR/strings.xml @@ -0,0 +1,21 @@ + + + + + "Diretório %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-pt-rPT/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-pt-rPT/strings.xml new file mode 100644 index 000000000..c03d95f10 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-pt-rPT/strings.xml @@ -0,0 +1,21 @@ + + + + + "Diretório %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-pt/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-pt/strings.xml new file mode 100644 index 000000000..c03d95f10 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-pt/strings.xml @@ -0,0 +1,21 @@ + + + + + "Diretório %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-ro/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-ro/strings.xml new file mode 100644 index 000000000..64baf69eb --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-ro/strings.xml @@ -0,0 +1,21 @@ + + + + + "Directorul %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-ru/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-ru/strings.xml new file mode 100644 index 000000000..da911a5e1 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-ru/strings.xml @@ -0,0 +1,21 @@ + + + + + "Каталог %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-si/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-si/strings.xml new file mode 100644 index 000000000..d1174b76b --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-si/strings.xml @@ -0,0 +1,21 @@ + + + + + "නාමාවලිය %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-sk/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-sk/strings.xml new file mode 100644 index 000000000..8fe03fc0c --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-sk/strings.xml @@ -0,0 +1,21 @@ + + + + + "Adresár %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-sl/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-sl/strings.xml new file mode 100644 index 000000000..f9cdeca31 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-sl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Imenik %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-sq/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-sq/strings.xml new file mode 100644 index 000000000..1bfea605a --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-sq/strings.xml @@ -0,0 +1,21 @@ + + + + + "Direktoria %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-sr/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-sr/strings.xml new file mode 100644 index 000000000..da911a5e1 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-sr/strings.xml @@ -0,0 +1,21 @@ + + + + + "Каталог %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-sv/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-sv/strings.xml new file mode 100644 index 000000000..c9b7bd1be --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-sv/strings.xml @@ -0,0 +1,21 @@ + + + + + "Katalogen %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-sw/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-sw/strings.xml new file mode 100644 index 000000000..fc325bc52 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-sw/strings.xml @@ -0,0 +1,21 @@ + + + + + "Saraka %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-ta/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-ta/strings.xml new file mode 100644 index 000000000..fef939a1f --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-ta/strings.xml @@ -0,0 +1,21 @@ + + + + + "%1$s கோப்பகம்" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-te/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-te/strings.xml new file mode 100644 index 000000000..83224bed0 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-te/strings.xml @@ -0,0 +1,21 @@ + + + + + "డైరెక్టరీ %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-th/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-th/strings.xml new file mode 100644 index 000000000..524338897 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-th/strings.xml @@ -0,0 +1,21 @@ + + + + + "ไดเรกทอรี %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-tl/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-tl/strings.xml new file mode 100644 index 000000000..39f8fda33 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-tl/strings.xml @@ -0,0 +1,21 @@ + + + + + "Directory %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-tr/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-tr/strings.xml new file mode 100644 index 000000000..542ac695e --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-tr/strings.xml @@ -0,0 +1,21 @@ + + + + + "%1$s dizini" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-uk/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-uk/strings.xml new file mode 100644 index 000000000..da911a5e1 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-uk/strings.xml @@ -0,0 +1,21 @@ + + + + + "Каталог %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-ur/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-ur/strings.xml new file mode 100644 index 000000000..70d50a39a --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-ur/strings.xml @@ -0,0 +1,21 @@ + + + + + "ڈائرکٹری %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-uz/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-uz/strings.xml new file mode 100644 index 000000000..8959fbb09 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-uz/strings.xml @@ -0,0 +1,21 @@ + + + + + "%1$s katalogi" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-vi/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-vi/strings.xml new file mode 100644 index 000000000..9cd702a3c --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-vi/strings.xml @@ -0,0 +1,21 @@ + + + + + "Thư mục %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-zh-rCN/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-zh-rCN/strings.xml new file mode 100644 index 000000000..b7d58dff5 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-zh-rCN/strings.xml @@ -0,0 +1,21 @@ + + + + + "目录 %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-zh-rHK/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-zh-rHK/strings.xml new file mode 100644 index 000000000..bdfedbee1 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-zh-rHK/strings.xml @@ -0,0 +1,21 @@ + + + + + "目錄 %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-zh-rTW/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-zh-rTW/strings.xml new file mode 100644 index 000000000..bdfedbee1 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-zh-rTW/strings.xml @@ -0,0 +1,21 @@ + + + + + "目錄 %1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values-zu/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values-zu/strings.xml new file mode 100644 index 000000000..b089b39b4 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values-zu/strings.xml @@ -0,0 +1,21 @@ + + + + + "Uhla lwemibhalo ye-%1$s" + diff --git a/java/com/android/dialer/searchfragment/remote/res/values/strings.xml b/java/com/android/dialer/searchfragment/remote/res/values/strings.xml new file mode 100644 index 000000000..beabba135 --- /dev/null +++ b/java/com/android/dialer/searchfragment/remote/res/values/strings.xml @@ -0,0 +1,20 @@ + + + + + Directory %1$s + \ No newline at end of file -- cgit v1.2.3