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}