| 2428 | } |
| 2429 | |
| 2430 | status_t ResourceTable::assignResourceIds() |
| 2431 | { |
| 2432 | const size_t N = mOrderedPackages.size(); |
| 2433 | size_t pi; |
| 2434 | status_t firstError = NO_ERROR; |
| 2435 | |
| 2436 | // First generate all bag attributes and assign indices. |
| 2437 | for (pi=0; pi<N; pi++) { |
| 2438 | sp<Package> p = mOrderedPackages.itemAt(pi); |
| 2439 | if (p == NULL || p->getTypes().size() == 0) { |
| 2440 | // Empty, skip! |
| 2441 | continue; |
| 2442 | } |
| 2443 | |
| 2444 | status_t err = p->applyPublicTypeOrder(); |
| 2445 | if (err != NO_ERROR && firstError == NO_ERROR) { |
| 2446 | firstError = err; |
| 2447 | } |
| 2448 | |
| 2449 | // Generate attributes... |
| 2450 | const size_t N = p->getOrderedTypes().size(); |
| 2451 | size_t ti; |
| 2452 | for (ti=0; ti<N; ti++) { |
| 2453 | sp<Type> t = p->getOrderedTypes().itemAt(ti); |
| 2454 | if (t == NULL) { |
| 2455 | continue; |
| 2456 | } |
| 2457 | const size_t N = t->getOrderedConfigs().size(); |
| 2458 | for (size_t ci=0; ci<N; ci++) { |
| 2459 | sp<ConfigList> c = t->getOrderedConfigs().itemAt(ci); |
| 2460 | if (c == NULL) { |
| 2461 | continue; |
| 2462 | } |
| 2463 | const size_t N = c->getEntries().size(); |
| 2464 | for (size_t ei=0; ei<N; ei++) { |
| 2465 | sp<Entry> e = c->getEntries().valueAt(ei); |
| 2466 | if (e == NULL) { |
| 2467 | continue; |
| 2468 | } |
| 2469 | status_t err = e->generateAttributes(this, p->getName()); |
| 2470 | if (err != NO_ERROR && firstError == NO_ERROR) { |
| 2471 | firstError = err; |
| 2472 | } |
| 2473 | } |
| 2474 | } |
| 2475 | } |
| 2476 | |
| 2477 | const SourcePos unknown(String8("????"), 0); |
| 2478 | sp<Type> attr = p->getType(String16("attr"), unknown); |
| 2479 | |
| 2480 | // Assign indices... |
| 2481 | for (ti=0; ti<N; ti++) { |
| 2482 | sp<Type> t = p->getOrderedTypes().itemAt(ti); |
| 2483 | if (t == NULL) { |
| 2484 | continue; |
| 2485 | } |
| 2486 | err = t->applyPublicEntryOrder(); |
| 2487 | if (err != NO_ERROR && firstError == NO_ERROR) { |
no test coverage detected