blob: 9cd09e63e00ac4479fda4e08d73f51ae9fb283c9 [file] [log] [blame]
/*
* Copyright 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.managedprovisioning.common;
import android.content.res.Resources;
import com.android.managedprovisioning.R;
import java.util.List;
/**
* Concatenates {@link String}s in an i18n safe way.
* <p>
* 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>
*/
public class StringConcatenator {
private final Resources mResources;
public StringConcatenator(Resources resources) {
mResources = resources;
}
public String join(List<String> items) {
if (items == null) {
return null;
}
if (items.isEmpty()) {
return "";
}
final int count = items.size();
if (count == 1) {
return items.get(0);
}
if (count == 2) {
return mResources.getString(R.string.join_two_items, items.get(0), items.get(1));
}
String result = items.get(count - 2);
for (int i = count - 3; i >= 0; i--) {
result = mResources.getString( // not the fastest, but good enough
i == 0 ? R.string.join_many_items_first : R.string.join_many_items_middle,
items.get(i), result);
}
result = mResources.getString(R.string.join_many_items_last, result, items.get(count - 1));
return result;
}
}