]> git.tdb.fi Git - builder.git/blobdiff - source/androidmanifestgenerator.cpp
Redesign how tools are run
[builder.git] / source / androidmanifestgenerator.cpp
index 719bf95d16672e1f53cfdc9d5c2aa8cdfa3c717a..0c489825824784a6af316572406a1d338a256691 100644 (file)
@@ -3,6 +3,7 @@
 #include "androidmanifestfile.h"
 #include "androidmanifestgenerator.h"
 #include "component.h"
+#include "internaltask.h"
 #include "sharedlibrary.h"
 #include "sourcepackage.h"
 
@@ -11,39 +12,37 @@ using namespace Msp;
 
 AndroidManifestGenerator::AndroidManifestGenerator(Builder &b):
        Tool(b, "AMG")
-{ }
-
-Target *AndroidManifestGenerator::create_target(const list<Target *> &, const string &)
 {
-       throw logic_error("not implemented");
+       set_run_internal(_run);
 }
 
-Task *AndroidManifestGenerator::run(const Target &target) const
+Target *AndroidManifestGenerator::create_target(const vector<Target *> &, const string &)
 {
-       const AndroidManifestFile &manifest = dynamic_cast<const AndroidManifestFile &>(target);
-       Worker *worker = new Worker(manifest);
-       return new InternalTask(worker);
+       throw logic_error("not implemented");
 }
 
-
-AndroidManifestGenerator::Worker::Worker(const AndroidManifestFile &m):
-       manifest(m)
-{ }
-
-void AndroidManifestGenerator::Worker::main()
+bool AndroidManifestGenerator::_run(const AndroidManifestFile &manifest)
 {
        const Component &comp = *manifest.get_component();
        const SourcePackage &pkg = comp.get_package();
 
+       BuildInfo binfo;
+       manifest.collect_build_info(binfo);
+
        IO::BufferedFile out(manifest.get_path().str(), IO::M_WRITE);
        out.write("<?xml version=\"1.0\" encoding=\"utf-8\"?>\n");
        IO::print(out, "<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" package=\"%s\">\n", comp.get_name());
        out.write("\t<uses-sdk android:minSdkVersion=\"9\" />\n");
        // TODO Make the icon name configurable
-       IO::print(out, "\t<application android:icon=\"@drawable/icon\" android:label=\"%s\" android:hasCode=\"false\">\n", pkg.get_label());
+       bool debuggable = binfo.debug;
+       IO::print(out, "\t<application android:icon=\"@drawable/icon\" android:label=\"%s\" android:hasCode=\"false\" android:debuggable=\"%s\">\n", pkg.get_label(), debuggable);
        if(SharedLibrary *native_lib = manifest.get_native_library())
        {
-               out.write("\t\t<activity android:name=\"android.app.NativeActivity\">\n");
+               out.write("\t\t<activity android:name=\"android.app.NativeActivity\"");
+               const string &orientation = manifest.get_orientation();
+               if(!orientation.empty())
+                       IO::print(out, " android:screenOrientation=\"%s\"", orientation);
+               out.write(">\n");
                IO::print(out, "\t\t\t<meta-data android:name=\"android.app.lib_name\" android:value=\"%s\" />\n", native_lib->get_libname());
                out.write("\t\t\t<intent-filter>\n");
                out.write("\t\t\t\t<action android:name=\"android.intent.action.MAIN\" />\n");
@@ -52,10 +51,9 @@ void AndroidManifestGenerator::Worker::main()
                out.write("\t\t</activity>\n");
        }
        out.write("\t</application>\n");
-       const set<string> &permissions = manifest.get_permissions();
-       for(set<string>::const_iterator i=permissions.begin(); i!=permissions.end(); ++i)
-               IO::print(out, "\t<uses-permission android:name=\"%s\" />\n", *i);
+       for(const string &p: manifest.get_permissions())
+               IO::print(out, "\t<uses-permission android:name=\"%s\" />\n", p);
        out.write("</manifest>\n");
 
-       status = Task::SUCCESS;
+       return true;
 }