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 &lt;string&gt;.</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