| 2526 | } |
| 2527 | |
| 2528 | status_t |
| 2529 | writeProguardForLayouts(ProguardKeepSet* keep, const sp<AaptAssets>& assets) |
| 2530 | { |
| 2531 | status_t err; |
| 2532 | |
| 2533 | // tag:attribute pairs that should be checked in layout files. |
| 2534 | KeyedVector<String8, Vector<NamespaceAttributePair> > kLayoutTagAttrPairs; |
| 2535 | addTagAttrPair(&kLayoutTagAttrPairs, "view", NULL, "class"); |
| 2536 | addTagAttrPair(&kLayoutTagAttrPairs, "fragment", NULL, "class"); |
| 2537 | addTagAttrPair(&kLayoutTagAttrPairs, "fragment", RESOURCES_ANDROID_NAMESPACE, "name"); |
| 2538 | |
| 2539 | // tag:attribute pairs that should be checked in xml files. |
| 2540 | KeyedVector<String8, Vector<NamespaceAttributePair> > kXmlTagAttrPairs; |
| 2541 | addTagAttrPair(&kXmlTagAttrPairs, "PreferenceScreen", RESOURCES_ANDROID_NAMESPACE, "fragment"); |
| 2542 | addTagAttrPair(&kXmlTagAttrPairs, "header", RESOURCES_ANDROID_NAMESPACE, "fragment"); |
| 2543 | |
| 2544 | const Vector<sp<AaptDir> >& dirs = assets->resDirs(); |
| 2545 | const size_t K = dirs.size(); |
| 2546 | for (size_t k=0; k<K; k++) { |
| 2547 | const sp<AaptDir>& d = dirs.itemAt(k); |
| 2548 | const String8& dirName = d->getLeaf(); |
| 2549 | const char* startTag = NULL; |
| 2550 | const KeyedVector<String8, Vector<NamespaceAttributePair> >* tagAttrPairs = NULL; |
| 2551 | if ((dirName == String8("layout")) || (strncmp(dirName.string(), "layout-", 7) == 0)) { |
| 2552 | tagAttrPairs = &kLayoutTagAttrPairs; |
| 2553 | } else if ((dirName == String8("xml")) || (strncmp(dirName.string(), "xml-", 4) == 0)) { |
| 2554 | startTag = "PreferenceScreen"; |
| 2555 | tagAttrPairs = &kXmlTagAttrPairs; |
| 2556 | } else if ((dirName == String8("menu")) || (strncmp(dirName.string(), "menu-", 5) == 0)) { |
| 2557 | startTag = "menu"; |
| 2558 | tagAttrPairs = NULL; |
| 2559 | } else { |
| 2560 | continue; |
| 2561 | } |
| 2562 | |
| 2563 | const KeyedVector<String8,sp<AaptGroup> > groups = d->getFiles(); |
| 2564 | const size_t N = groups.size(); |
| 2565 | for (size_t i=0; i<N; i++) { |
| 2566 | const sp<AaptGroup>& group = groups.valueAt(i); |
| 2567 | const DefaultKeyedVector<AaptGroupEntry, sp<AaptFile> >& files = group->getFiles(); |
| 2568 | const size_t M = files.size(); |
| 2569 | for (size_t j=0; j<M; j++) { |
| 2570 | err = writeProguardForXml(keep, files.valueAt(j), startTag, tagAttrPairs); |
| 2571 | if (err < 0) { |
| 2572 | return err; |
| 2573 | } |
| 2574 | } |
| 2575 | } |
| 2576 | } |
| 2577 | // Handle the overlays |
| 2578 | sp<AaptAssets> overlay = assets->getOverlay(); |
| 2579 | if (overlay.get()) { |
| 2580 | return writeProguardForLayouts(keep, overlay); |
| 2581 | } |
| 2582 | |
| 2583 | return NO_ERROR; |
| 2584 | } |
| 2585 |
no test coverage detected