1b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak/* 2b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * Copyright 2017, The Android Open Source Project 3b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * 4b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * Licensed under the Apache License, Version 2.0 (the "License"); 5b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * you may not use this file except in compliance with the License. 6b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * You may obtain a copy of the License at 7b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * 8b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * http://www.apache.org/licenses/LICENSE-2.0 9b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * 10b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * Unless required by applicable law or agreed to in writing, software 11b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * distributed under the License is distributed on an "AS IS" BASIS, 12b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * See the License for the specific language governing permissions and 14b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * limitations under the License. 15b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak */ 16b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzakpackage com.android.managedprovisioning.common; 17b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak 18b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzakimport android.content.res.Resources; 19b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak 20b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzakimport com.android.managedprovisioning.R; 21b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak 22b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzakimport java.util.List; 23b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak 24b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak/** 25b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * Concatenates {@link String}s in an i18n safe way. 26b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * <p> 27b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak * Based on the implementation from <a href="https://android.googlesource.com/platform/packages/apps/Settings/+/2d566e7/src/com/android/settings/applications/AppPermissionSettings.java#136">com.android.settings.applications.AppPermissionSettings</a> 28b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak */ 29b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzakpublic class StringConcatenator { 30b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak private final Resources mResources; 31b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak 32b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak public StringConcatenator(Resources resources) { 33b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak mResources = resources; 34b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak } 35b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak 36b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak public String join(List<String> items) { 37b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak if (items == null) { 38b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak return null; 39b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak } 40b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak 41b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak if (items.isEmpty()) { 42b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak return ""; 43b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak } 44b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak 45b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak final int count = items.size(); 46b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak 47b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak if (count == 1) { 48b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak return items.get(0); 49b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak } 50b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak 51b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak if (count == 2) { 52b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak return mResources.getString(R.string.join_two_items, items.get(0), items.get(1)); 53b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak } 54b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak 55b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak String result = items.get(count - 2); 56b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak for (int i = count - 3; i >= 0; i--) { 57b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak result = mResources.getString( // not the fastest, but good enough 58b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak i == 0 ? R.string.join_many_items_first : R.string.join_many_items_middle, 59b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak items.get(i), result); 60b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak } 61b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak result = mResources.getString(R.string.join_many_items_last, result, items.get(count - 1)); 62b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak return result; 63b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak } 64b9a9b872b7bd51a738dfef1b55fe1990d3ecb309Jakub Gielzak}