1d6124a176326169bc87cb29823ca2dc906689680Tor Norbye/* 2d6124a176326169bc87cb29823ca2dc906689680Tor Norbye * Copyright (C) 2012 The Android Open Source Project 3d6124a176326169bc87cb29823ca2dc906689680Tor Norbye * 4d6124a176326169bc87cb29823ca2dc906689680Tor Norbye * Licensed under the Eclipse Public License, Version 1.0 (the "License"); 5d6124a176326169bc87cb29823ca2dc906689680Tor Norbye * you may not use this file except in compliance with the License. 6d6124a176326169bc87cb29823ca2dc906689680Tor Norbye * You may obtain a copy of the License at 7d6124a176326169bc87cb29823ca2dc906689680Tor Norbye * 8d6124a176326169bc87cb29823ca2dc906689680Tor Norbye * http://www.eclipse.org/org/documents/epl-v10.php 9d6124a176326169bc87cb29823ca2dc906689680Tor Norbye * 10d6124a176326169bc87cb29823ca2dc906689680Tor Norbye * Unless required by applicable law or agreed to in writing, software 11d6124a176326169bc87cb29823ca2dc906689680Tor Norbye * distributed under the License is distributed on an "AS IS" BASIS, 12d6124a176326169bc87cb29823ca2dc906689680Tor Norbye * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13d6124a176326169bc87cb29823ca2dc906689680Tor Norbye * See the License for the specific language governing permissions and 14d6124a176326169bc87cb29823ca2dc906689680Tor Norbye * limitations under the License. 15d6124a176326169bc87cb29823ca2dc906689680Tor Norbye */ 16d6124a176326169bc87cb29823ca2dc906689680Tor Norbyepackage com.android.ide.eclipse.adt.internal.lint; 17d6124a176326169bc87cb29823ca2dc906689680Tor Norbye 18ab035b633d3bb74047364973f326c33a42c8891cTor Norbyeimport static com.android.SdkConstants.ATTR_ALLOW_BACKUP; 1912d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_BASELINE_ALIGNED; 2012d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_CONTENT_DESCRIPTION; 2112d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_INPUT_TYPE; 2212d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_PERMISSION; 2312d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.ATTR_TRANSLATABLE; 2412d4581faa6438941e65a9dc83213be34c6ca970Tor Norbyeimport static com.android.SdkConstants.VALUE_FALSE; 25d6124a176326169bc87cb29823ca2dc906689680Tor Norbye 26d6124a176326169bc87cb29823ca2dc906689680Tor Norbyeimport com.android.tools.lint.checks.AccessibilityDetector; 27d6124a176326169bc87cb29823ca2dc906689680Tor Norbyeimport com.android.tools.lint.checks.InefficientWeightDetector; 28ab035b633d3bb74047364973f326c33a42c8891cTor Norbyeimport com.android.tools.lint.checks.ManifestOrderDetector; 29d6124a176326169bc87cb29823ca2dc906689680Tor Norbyeimport com.android.tools.lint.checks.SecurityDetector; 30d6124a176326169bc87cb29823ca2dc906689680Tor Norbyeimport com.android.tools.lint.checks.TextFieldDetector; 319a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbyeimport com.android.tools.lint.checks.TranslationDetector; 32d6124a176326169bc87cb29823ca2dc906689680Tor Norbye 33d6124a176326169bc87cb29823ca2dc906689680Tor Norbyeimport org.eclipse.core.resources.IMarker; 34d6124a176326169bc87cb29823ca2dc906689680Tor Norbye 35d6124a176326169bc87cb29823ca2dc906689680Tor Norbye/** Shared fix class for various builtin attributes */ 36d6124a176326169bc87cb29823ca2dc906689680Tor Norbyefinal class SetAttributeFix extends SetPropertyFix { 37d6124a176326169bc87cb29823ca2dc906689680Tor Norbye private SetAttributeFix(String id, IMarker marker) { 38d6124a176326169bc87cb29823ca2dc906689680Tor Norbye super(id, marker); 39d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } 40d6124a176326169bc87cb29823ca2dc906689680Tor Norbye 41d6124a176326169bc87cb29823ca2dc906689680Tor Norbye @Override 42d6124a176326169bc87cb29823ca2dc906689680Tor Norbye protected String getAttribute() { 43d6124a176326169bc87cb29823ca2dc906689680Tor Norbye if (mId.equals(AccessibilityDetector.ISSUE.getId())) { 44d6124a176326169bc87cb29823ca2dc906689680Tor Norbye return ATTR_CONTENT_DESCRIPTION; 45d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } else if (mId.equals(InefficientWeightDetector.BASELINE_WEIGHTS.getId())) { 4612d4581faa6438941e65a9dc83213be34c6ca970Tor Norbye return ATTR_BASELINE_ALIGNED; 47d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } else if (mId.equals(SecurityDetector.EXPORTED_SERVICE.getId())) { 4812d4581faa6438941e65a9dc83213be34c6ca970Tor Norbye return ATTR_PERMISSION; 49d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } else if (mId.equals(TextFieldDetector.ISSUE.getId())) { 50d6124a176326169bc87cb29823ca2dc906689680Tor Norbye return ATTR_INPUT_TYPE; 519a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye } else if (mId.equals(TranslationDetector.MISSING.getId())) { 529a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye return ATTR_TRANSLATABLE; 53ab035b633d3bb74047364973f326c33a42c8891cTor Norbye } else if (mId.equals(ManifestOrderDetector.ALLOW_BACKUP.getId())) { 54ab035b633d3bb74047364973f326c33a42c8891cTor Norbye return ATTR_ALLOW_BACKUP; 55d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } else { 56d6124a176326169bc87cb29823ca2dc906689680Tor Norbye assert false : mId; 57d6124a176326169bc87cb29823ca2dc906689680Tor Norbye return ""; 58d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } 59d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } 60d6124a176326169bc87cb29823ca2dc906689680Tor Norbye 61d6124a176326169bc87cb29823ca2dc906689680Tor Norbye @Override 629a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye protected boolean isAndroidAttribute() { 639a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye if (mId.equals(TranslationDetector.MISSING.getId())) { 649a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye return false; 659a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye } 669a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye 679a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye return true; 689a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye } 699a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye 709a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye @Override 71d6124a176326169bc87cb29823ca2dc906689680Tor Norbye public String getDisplayString() { 72d6124a176326169bc87cb29823ca2dc906689680Tor Norbye if (mId.equals(AccessibilityDetector.ISSUE.getId())) { 73d6124a176326169bc87cb29823ca2dc906689680Tor Norbye return "Add content description attribute"; 74d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } else if (mId.equals(InefficientWeightDetector.BASELINE_WEIGHTS.getId())) { 75d6124a176326169bc87cb29823ca2dc906689680Tor Norbye return "Set baseline attribute"; 76d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } else if (mId.equals(TextFieldDetector.ISSUE.getId())) { 77d6124a176326169bc87cb29823ca2dc906689680Tor Norbye return "Set input type"; 78d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } else if (mId.equals(SecurityDetector.EXPORTED_SERVICE.getId())) { 79d6124a176326169bc87cb29823ca2dc906689680Tor Norbye return "Add permission attribute"; 809a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye } else if (mId.equals(TranslationDetector.MISSING.getId())) { 819a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye return "Mark this as a non-translatable resource"; 82ab035b633d3bb74047364973f326c33a42c8891cTor Norbye } else if (mId.equals(ManifestOrderDetector.ALLOW_BACKUP.getId())) { 83ab035b633d3bb74047364973f326c33a42c8891cTor Norbye return "Set the allowBackup attribute to true or false"; 84d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } else { 85d6124a176326169bc87cb29823ca2dc906689680Tor Norbye assert false : mId; 86d6124a176326169bc87cb29823ca2dc906689680Tor Norbye return ""; 87d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } 88d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } 89d6124a176326169bc87cb29823ca2dc906689680Tor Norbye 90d6124a176326169bc87cb29823ca2dc906689680Tor Norbye @Override 919a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye public String getAdditionalProposalInfo() { 929a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye String help = super.getAdditionalProposalInfo(); 939a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye 949a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye if (mId.equals(TranslationDetector.MISSING.getId())) { 959a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye help = "<b>Adds translatable=\"false\" to this <string>.</b><br><br>" + help; 969a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye } 979a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye 989a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye return help; 999a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye } 1009a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye 1019a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye @Override 102d6124a176326169bc87cb29823ca2dc906689680Tor Norbye protected boolean invokeCodeCompletion() { 103d6124a176326169bc87cb29823ca2dc906689680Tor Norbye return mId.equals(SecurityDetector.EXPORTED_SERVICE.getId()) 104ab035b633d3bb74047364973f326c33a42c8891cTor Norbye || mId.equals(TextFieldDetector.ISSUE.getId()) 105ab035b633d3bb74047364973f326c33a42c8891cTor Norbye || mId.equals(ManifestOrderDetector.ALLOW_BACKUP.getId()); 106d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } 107d6124a176326169bc87cb29823ca2dc906689680Tor Norbye 108d6124a176326169bc87cb29823ca2dc906689680Tor Norbye @Override 1099a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye public boolean selectValue() { 1109a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye if (mId.equals(TranslationDetector.MISSING.getId())) { 1119a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye return false; 1129a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye } else { 1139a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye return super.selectValue(); 1149a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye } 1159a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye } 1169a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye 1179a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye @Override 118d6124a176326169bc87cb29823ca2dc906689680Tor Norbye protected String getProposal() { 119d6124a176326169bc87cb29823ca2dc906689680Tor Norbye if (mId.equals(InefficientWeightDetector.BASELINE_WEIGHTS.getId())) { 120d6124a176326169bc87cb29823ca2dc906689680Tor Norbye return VALUE_FALSE; 1219a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye } else if (mId.equals(TranslationDetector.MISSING.getId())) { 1229a666a7cf24a78455482b79b4fbe4c1eba0481ceTor Norbye return VALUE_FALSE; 123d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } 124d6124a176326169bc87cb29823ca2dc906689680Tor Norbye 125d6124a176326169bc87cb29823ca2dc906689680Tor Norbye return super.getProposal(); 126d6124a176326169bc87cb29823ca2dc906689680Tor Norbye } 12712d4581faa6438941e65a9dc83213be34c6ca970Tor Norbye} 128