blob: 7aaf69d3355ce2201bfb44f6f7b01bdaaf158d9e [file] [log] [blame]
/*
* Copyright (C) 2013 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.sdklib.repository.local;
import com.android.annotations.NonNull;
import com.android.annotations.Nullable;
import com.android.sdklib.repository.NoPreviewRevision;
import com.android.sdklib.repository.descriptors.IPkgDesc;
import com.android.sdklib.repository.descriptors.IPkgDescExtra;
import com.android.sdklib.repository.descriptors.IdDisplay;
import com.android.sdklib.repository.descriptors.PkgDesc;
import java.io.File;
import java.util.Properties;
public class LocalExtraPkgInfo extends LocalPkgInfo {
private final @NonNull IPkgDescExtra mDesc;
public LocalExtraPkgInfo(@NonNull LocalSdk localSdk,
@NonNull File localDir,
@NonNull Properties sourceProps,
@NonNull IdDisplay vendor,
@NonNull String path,
@Nullable String displayName,
@NonNull String[] oldPaths,
@NonNull NoPreviewRevision revision) {
super(localSdk, localDir, sourceProps);
mDesc = (IPkgDescExtra) PkgDesc.Builder.newExtra(
vendor,
path,
displayName,
oldPaths,
revision).create();
}
@NonNull
@Override
public IPkgDesc getDesc() {
return mDesc;
}
@NonNull
public String[] getOldPaths() {
return mDesc.getOldPaths();
}
// --- helpers ---
/**
* Used to produce a suitable name-display based on the extra's path
* and vendor display string in addon-3 schemas.
*
* @param vendor The vendor id of the extra.
* @param extraPath The non-null path of the extra.
* @return A non-null display name based on the extra's path id.
*/
public static String getPrettyName(@Nullable IdDisplay vendor, @NonNull String extraPath) {
String name = extraPath;
// In the past, we used to save the extras in a folder vendor-path,
// and that "vendor" would end up in the path when we reload the extra from
// disk. Detect this and compensate.
String disp = vendor == null ? null : vendor.getDisplay();
if (disp != null && disp.length() > 0) {
if (name.startsWith(disp + "-")) { //$NON-NLS-1$
name = name.substring(disp.length() + 1);
}
}
// Uniformize all spaces in the name
if (name != null) {
name = name.replaceAll("[ _\t\f-]+", " ").trim(); //$NON-NLS-1$ //$NON-NLS-2$
}
if (name == null || name.length() == 0) {
name = "Unknown Extra";
}
if (disp != null && disp.length() > 0) {
name = disp + " " + name; //$NON-NLS-1$
name = name.replaceAll("[ _\t\f-]+", " ").trim(); //$NON-NLS-1$ //$NON-NLS-2$
}
// Look at all lower case characters in range [1..n-1] and replace them by an upper
// case if they are preceded by a space. Also upper cases the first character of the
// string.
boolean changed = false;
char[] chars = name.toCharArray();
for (int n = chars.length - 1, i = 0; i < n; i++) {
if (Character.isLowerCase(chars[i]) && (i == 0 || chars[i - 1] == ' ')) {
chars[i] = Character.toUpperCase(chars[i]);
changed = true;
}
}
if (changed) {
name = new String(chars);
}
// Special case: reformat a few typical acronyms.
name = name.replaceAll(" Usb ", " USB "); //$NON-NLS-1$
name = name.replaceAll(" Api ", " API "); //$NON-NLS-1$
return name;
}
}