Loading tools/aapt/Command.cpp +50 −42 Original line number Diff line number Diff line Loading @@ -540,7 +540,7 @@ static bool hasFeature(const char* name, const FeatureGroup& grp, } static void addImpliedFeature(KeyedVector<String8, ImpliedFeature>* impliedFeatures, const char* name, const char* reason, bool sdk23) { const char* name, const String8& reason, bool sdk23) { String8 name8(name); ssize_t idx = impliedFeatures->indexOfKey(name8); if (idx < 0) { Loading @@ -553,7 +553,7 @@ static void addImpliedFeature(KeyedVector<String8, ImpliedFeature>* impliedFeatu if (feature->impliedBySdk23 && !sdk23) { feature->impliedBySdk23 = false; } feature->reasons.add(String8(reason)); feature->reasons.add(reason); } static void printFeatureGroupImpl(const FeatureGroup& grp, Loading Loading @@ -651,50 +651,58 @@ static void addImpliedFeaturesForPermission(const int targetSdk, const String8& bool impliedBySdk23Permission) { if (name == "android.permission.CAMERA") { addImpliedFeature(impliedFeatures, "android.hardware.camera", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("requested %s permission", name.string()), impliedBySdk23Permission); } else if (name == "android.permission.ACCESS_FINE_LOCATION") { if (targetSdk < SDK_LOLLIPOP) { addImpliedFeature(impliedFeatures, "android.hardware.location.gps", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); addImpliedFeature(impliedFeatures, "android.hardware.location", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); } else if (name == "android.permission.ACCESS_MOCK_LOCATION") { String8::format("requested %s permission", name.string()), impliedBySdk23Permission); addImpliedFeature(impliedFeatures, "android.hardware.location.gps", String8::format("targetSdkVersion < %d", SDK_LOLLIPOP), impliedBySdk23Permission); } addImpliedFeature(impliedFeatures, "android.hardware.location", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("requested %s permission", name.string()), impliedBySdk23Permission); } else if (name == "android.permission.ACCESS_COARSE_LOCATION") { if (targetSdk < SDK_LOLLIPOP) { addImpliedFeature(impliedFeatures, "android.hardware.location.network", String8::format("requested %s permission", name.string()), impliedBySdk23Permission); addImpliedFeature(impliedFeatures, "android.hardware.location.network", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("targetSdkVersion < %d", SDK_LOLLIPOP), impliedBySdk23Permission); } addImpliedFeature(impliedFeatures, "android.hardware.location", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); } else if (name == "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" || String8::format("requested %s permission", name.string()), impliedBySdk23Permission); } else if (name == "android.permission.ACCESS_MOCK_LOCATION" || name == "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" || name == "android.permission.INSTALL_LOCATION_PROVIDER") { addImpliedFeature(impliedFeatures, "android.hardware.location", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("requested %s permission", name.string()), impliedBySdk23Permission); } else if (name == "android.permission.BLUETOOTH" || name == "android.permission.BLUETOOTH_ADMIN") { if (targetSdk > 4) { if (targetSdk > SDK_DONUT) { addImpliedFeature(impliedFeatures, "android.hardware.bluetooth", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("requested %s permission", name.string()), impliedBySdk23Permission); addImpliedFeature(impliedFeatures, "android.hardware.bluetooth", "targetSdkVersion > 4", impliedBySdk23Permission); String8::format("targetSdkVersion > %d", SDK_DONUT), impliedBySdk23Permission); } } else if (name == "android.permission.RECORD_AUDIO") { addImpliedFeature(impliedFeatures, "android.hardware.microphone", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("requested %s permission", name.string()), impliedBySdk23Permission); } else if (name == "android.permission.ACCESS_WIFI_STATE" || name == "android.permission.CHANGE_WIFI_STATE" || name == "android.permission.CHANGE_WIFI_MULTICAST_STATE") { addImpliedFeature(impliedFeatures, "android.hardware.wifi", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("requested %s permission", name.string()), impliedBySdk23Permission); } else if (name == "android.permission.CALL_PHONE" || name == "android.permission.CALL_PRIVILEGED" || name == "android.permission.MODIFY_PHONE_STATE" || Loading @@ -707,7 +715,7 @@ static void addImpliedFeaturesForPermission(const int targetSdk, const String8& name == "android.permission.WRITE_APN_SETTINGS" || name == "android.permission.WRITE_SMS") { addImpliedFeature(impliedFeatures, "android.hardware.telephony", String8("requested a telephony permission").string(), String8("requested a telephony permission"), impliedBySdk23Permission); } } Loading Loading @@ -1659,17 +1667,17 @@ int doDump(Bundle* bundle) if (error == "") { if (orien == 0 || orien == 6 || orien == 8) { // Requests landscape, sensorLandscape, or reverseLandscape. addImpliedFeature(&impliedFeatures, "android.hardware.screen.landscape", "one or more activities have specified a " "landscape orientation", addImpliedFeature( &impliedFeatures, "android.hardware.screen.landscape", String8("one or more activities have specified a " "landscape orientation"), false); } else if (orien == 1 || orien == 7 || orien == 9) { // Requests portrait, sensorPortrait, or reversePortrait. addImpliedFeature(&impliedFeatures, "android.hardware.screen.portrait", "one or more activities have specified a " "portrait orientation", addImpliedFeature( &impliedFeatures, "android.hardware.screen.portrait", String8("one or more activities have specified a " "portrait orientation"), false); } } Loading Loading @@ -2026,7 +2034,7 @@ int doDump(Bundle* bundle) // directly or implied, required or not), then the faketouch feature is implied. if (!hasFeature("android.hardware.touchscreen", commonFeatures, impliedFeatures)) { addImpliedFeature(&impliedFeatures, "android.hardware.faketouch", "default feature for all apps", false); String8("default feature for all apps"), false); } const size_t numFeatureGroups = featureGroups.size(); Loading Loading
tools/aapt/Command.cpp +50 −42 Original line number Diff line number Diff line Loading @@ -540,7 +540,7 @@ static bool hasFeature(const char* name, const FeatureGroup& grp, } static void addImpliedFeature(KeyedVector<String8, ImpliedFeature>* impliedFeatures, const char* name, const char* reason, bool sdk23) { const char* name, const String8& reason, bool sdk23) { String8 name8(name); ssize_t idx = impliedFeatures->indexOfKey(name8); if (idx < 0) { Loading @@ -553,7 +553,7 @@ static void addImpliedFeature(KeyedVector<String8, ImpliedFeature>* impliedFeatu if (feature->impliedBySdk23 && !sdk23) { feature->impliedBySdk23 = false; } feature->reasons.add(String8(reason)); feature->reasons.add(reason); } static void printFeatureGroupImpl(const FeatureGroup& grp, Loading Loading @@ -651,50 +651,58 @@ static void addImpliedFeaturesForPermission(const int targetSdk, const String8& bool impliedBySdk23Permission) { if (name == "android.permission.CAMERA") { addImpliedFeature(impliedFeatures, "android.hardware.camera", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("requested %s permission", name.string()), impliedBySdk23Permission); } else if (name == "android.permission.ACCESS_FINE_LOCATION") { if (targetSdk < SDK_LOLLIPOP) { addImpliedFeature(impliedFeatures, "android.hardware.location.gps", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); addImpliedFeature(impliedFeatures, "android.hardware.location", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); } else if (name == "android.permission.ACCESS_MOCK_LOCATION") { String8::format("requested %s permission", name.string()), impliedBySdk23Permission); addImpliedFeature(impliedFeatures, "android.hardware.location.gps", String8::format("targetSdkVersion < %d", SDK_LOLLIPOP), impliedBySdk23Permission); } addImpliedFeature(impliedFeatures, "android.hardware.location", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("requested %s permission", name.string()), impliedBySdk23Permission); } else if (name == "android.permission.ACCESS_COARSE_LOCATION") { if (targetSdk < SDK_LOLLIPOP) { addImpliedFeature(impliedFeatures, "android.hardware.location.network", String8::format("requested %s permission", name.string()), impliedBySdk23Permission); addImpliedFeature(impliedFeatures, "android.hardware.location.network", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("targetSdkVersion < %d", SDK_LOLLIPOP), impliedBySdk23Permission); } addImpliedFeature(impliedFeatures, "android.hardware.location", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); } else if (name == "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" || String8::format("requested %s permission", name.string()), impliedBySdk23Permission); } else if (name == "android.permission.ACCESS_MOCK_LOCATION" || name == "android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" || name == "android.permission.INSTALL_LOCATION_PROVIDER") { addImpliedFeature(impliedFeatures, "android.hardware.location", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("requested %s permission", name.string()), impliedBySdk23Permission); } else if (name == "android.permission.BLUETOOTH" || name == "android.permission.BLUETOOTH_ADMIN") { if (targetSdk > 4) { if (targetSdk > SDK_DONUT) { addImpliedFeature(impliedFeatures, "android.hardware.bluetooth", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("requested %s permission", name.string()), impliedBySdk23Permission); addImpliedFeature(impliedFeatures, "android.hardware.bluetooth", "targetSdkVersion > 4", impliedBySdk23Permission); String8::format("targetSdkVersion > %d", SDK_DONUT), impliedBySdk23Permission); } } else if (name == "android.permission.RECORD_AUDIO") { addImpliedFeature(impliedFeatures, "android.hardware.microphone", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("requested %s permission", name.string()), impliedBySdk23Permission); } else if (name == "android.permission.ACCESS_WIFI_STATE" || name == "android.permission.CHANGE_WIFI_STATE" || name == "android.permission.CHANGE_WIFI_MULTICAST_STATE") { addImpliedFeature(impliedFeatures, "android.hardware.wifi", String8::format("requested %s permission", name.string()) .string(), impliedBySdk23Permission); String8::format("requested %s permission", name.string()), impliedBySdk23Permission); } else if (name == "android.permission.CALL_PHONE" || name == "android.permission.CALL_PRIVILEGED" || name == "android.permission.MODIFY_PHONE_STATE" || Loading @@ -707,7 +715,7 @@ static void addImpliedFeaturesForPermission(const int targetSdk, const String8& name == "android.permission.WRITE_APN_SETTINGS" || name == "android.permission.WRITE_SMS") { addImpliedFeature(impliedFeatures, "android.hardware.telephony", String8("requested a telephony permission").string(), String8("requested a telephony permission"), impliedBySdk23Permission); } } Loading Loading @@ -1659,17 +1667,17 @@ int doDump(Bundle* bundle) if (error == "") { if (orien == 0 || orien == 6 || orien == 8) { // Requests landscape, sensorLandscape, or reverseLandscape. addImpliedFeature(&impliedFeatures, "android.hardware.screen.landscape", "one or more activities have specified a " "landscape orientation", addImpliedFeature( &impliedFeatures, "android.hardware.screen.landscape", String8("one or more activities have specified a " "landscape orientation"), false); } else if (orien == 1 || orien == 7 || orien == 9) { // Requests portrait, sensorPortrait, or reversePortrait. addImpliedFeature(&impliedFeatures, "android.hardware.screen.portrait", "one or more activities have specified a " "portrait orientation", addImpliedFeature( &impliedFeatures, "android.hardware.screen.portrait", String8("one or more activities have specified a " "portrait orientation"), false); } } Loading Loading @@ -2026,7 +2034,7 @@ int doDump(Bundle* bundle) // directly or implied, required or not), then the faketouch feature is implied. if (!hasFeature("android.hardware.touchscreen", commonFeatures, impliedFeatures)) { addImpliedFeature(&impliedFeatures, "android.hardware.faketouch", "default feature for all apps", false); String8("default feature for all apps"), false); } const size_t numFeatureGroups = featureGroups.size(); Loading