/*
* Copyright (C) 2012 Sony Mobile Communications AB
*
* This file is part of ApkAnalyser.
*
* 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 andreflect;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import andreflect.xml.XmlParser;
import andreflect.xml.XmlParser.XmlLine;
import brut.androlib.res.data.ResResSpec;
public class DexResSpec {
private final ResResSpec m_spec;
private final HashSet<ResResSpec> m_referenceSpec;
private final ArrayList<XmlParser.XmlLine> m_referenceXml;
private final ArrayList<DexReferenceCache.LoadConstRes> m_referenceCode;
public static final int ISSUE_MISSING_RESOURCE = 8;
public static final int ISSUE_NO_DEFAULT = 4;
public static final int ISSUE_NO_DPI = 2;
public static final int ISSUE_MISS_LANGUAGE = 1;
public static final int NO_ISSUE = 0;
private int m_issue = NO_ISSUE;
public DexResSpec(ResResSpec spec) {
m_spec = spec;
m_referenceSpec = null;
m_referenceXml = null;
m_referenceCode = null;
}
public DexResSpec(ResResSpec spec, HashSet<ResResSpec> referenceSpec, ArrayList<XmlLine> referenceXml, ArrayList<DexReferenceCache.LoadConstRes> referenceCode) {
m_spec = spec;
m_referenceSpec = referenceSpec;
m_referenceXml = referenceXml;
m_referenceCode = referenceCode;
}
public static String getIssueName(int filter) {
switch (filter) {
case ISSUE_MISSING_RESOURCE:
return "MISSING RESOURCE";
case ISSUE_NO_DPI:
return "NO DPI SPECIFIED";
case ISSUE_NO_DEFAULT:
return "NO DEFAULT RESOURCE";
case ISSUE_MISS_LANGUAGE:
return "MISSING SOME LANGUAGE TRANSLATION";
default:
return null;
}
}
public void setIssue(int issue) {
m_issue = issue;
}
public int getIssue() {
return m_issue;
}
public ResResSpec getResSpec() {
return m_spec;
}
public String getName() {
return String.format("%08X", m_spec.getId().id);
}
public String getType() {
if (m_spec.getType() == null) {
return "";
}
return m_spec.getType().getName();
}
public static String getRefName(ResResSpec spec) {
return spec.getName() + " : " + spec.getType().getName() + " " + String.format("%08X", spec.getId().id);
}
public static String getRefName(XmlParser.XmlLine xmlLine) {
return xmlLine.toString();
}
public static String getRefName(DexReferenceCache.LoadConstRes loadConst) {
return loadConst.toString();
}
public Set<ResResSpec> getResReference() {
return m_referenceSpec;
}
public List<XmlParser.XmlLine> getXmlReference() {
return m_referenceXml;
}
public List<DexReferenceCache.LoadConstRes> getCodeReference() {
return m_referenceCode;
}
public int getSumReference() {
return getCountXmlReference() + getCountCodeReference() + getCountSpecReference();
}
public int getCountSpecReference() {
return m_referenceSpec.size();
}
public int getCountXmlReference() {
return m_referenceXml.size();
}
public int getCountCodeReference() {
return m_referenceCode.size();
}
}