mirror of
https://github.com/processing/processing4.git
synced 2026-06-16 04:26:26 +02:00
adding icons, also better method for writing manifest when needed
This commit is contained in:
@@ -204,7 +204,7 @@ public class AndroidTool implements Tool, DeviceListener {
|
||||
"Building and launching...",
|
||||
"Creating project...");
|
||||
try {
|
||||
if (build.createProject() == null) {
|
||||
if (build.createProject(target) == null) {
|
||||
return;
|
||||
}
|
||||
try {
|
||||
@@ -264,7 +264,7 @@ public class AndroidTool implements Tool, DeviceListener {
|
||||
"Building and exporting...",
|
||||
"Creating project...");
|
||||
try {
|
||||
File tempFolder = build.createProject();
|
||||
File tempFolder = build.createProject("release");
|
||||
if (tempFolder == null) {
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -101,7 +101,7 @@ class Build {
|
||||
}
|
||||
|
||||
|
||||
public File createProject() {
|
||||
public File createProject(String target) {
|
||||
final Sketch sketch = editor.getSketch();
|
||||
|
||||
try {
|
||||
@@ -142,7 +142,7 @@ class Build {
|
||||
// writeAndroidManifest(androidXML, sketch.getName(), className);
|
||||
manifest.setClassName(className);
|
||||
File tempManifest = new File(tempBuildFolder, "AndroidManifest.xml");
|
||||
manifest.save(tempManifest);
|
||||
manifest.writeBuild(tempManifest, className, target.equals("debug"));
|
||||
|
||||
writeBuildProps(new File(tempBuildFolder, "build.properties"));
|
||||
buildFile = new File(tempBuildFolder, "build.xml");
|
||||
@@ -543,14 +543,74 @@ class Build {
|
||||
}
|
||||
|
||||
|
||||
private void writeRes(final File resFolder, final String className)
|
||||
throws RunnerException {
|
||||
final File layoutFolder = mkdirs(resFolder, "layout");
|
||||
final File layoutFile = new File(layoutFolder, "main.xml");
|
||||
static final String ICON_72 = "icon-72.png";
|
||||
static final String ICON_48 = "icon-48.png";
|
||||
static final String ICON_36 = "icon-36.png";
|
||||
|
||||
private void writeRes(File resFolder,
|
||||
String className) throws RunnerException {
|
||||
File layoutFolder = mkdirs(resFolder, "layout");
|
||||
File layoutFile = new File(layoutFolder, "main.xml");
|
||||
writeResLayoutMain(layoutFile);
|
||||
final File valuesFolder = mkdirs(resFolder, "values");
|
||||
final File stringsFile = new File(valuesFolder, "strings.xml");
|
||||
writeResValuesStrings(stringsFile, className);
|
||||
|
||||
// write the icon files
|
||||
File sketchFolder = editor.getSketch().getFolder();
|
||||
File localIcon36 = new File(sketchFolder, ICON_36);
|
||||
File localIcon48 = new File(sketchFolder, ICON_48);
|
||||
File localIcon72 = new File(sketchFolder, ICON_72);
|
||||
|
||||
// File drawableFolder = new File(resFolder, "drawable");
|
||||
// drawableFolder.mkdirs()
|
||||
File buildIcon48 = new File(resFolder, "drawable/icon.png");
|
||||
File buildIcon36 = new File(resFolder, "drawable-ldpi/icon.png");
|
||||
File buildIcon72 = new File(resFolder, "drawable-hdpi/icon.png");
|
||||
|
||||
if (!localIcon36.exists() &&
|
||||
!localIcon48.exists() &&
|
||||
!localIcon72.exists()) {
|
||||
// if no icons are in the sketch folder, then copy all the defaults
|
||||
if (new File(resFolder, "drawable-ldpi").mkdirs()) {
|
||||
PApplet.saveStream(buildIcon36, getClass().getResourceAsStream("data/icon-36.png"));
|
||||
} else {
|
||||
System.err.println("Could not create \"drawable-ldpi\" folder.");
|
||||
}
|
||||
if (new File(resFolder, "drawable").mkdirs()) {
|
||||
PApplet.saveStream(buildIcon48, getClass().getResourceAsStream("data/icon-48.png"));
|
||||
} else {
|
||||
System.err.println("Could not create \"drawable\" folder.");
|
||||
}
|
||||
if (new File(resFolder, "drawable-hdpi").mkdirs()) {
|
||||
PApplet.saveStream(buildIcon72, getClass().getResourceAsStream("data/icon-72.png"));
|
||||
} else {
|
||||
System.err.println("Could not create \"drawable-hdpi\" folder.");
|
||||
}
|
||||
} else {
|
||||
// if at least one of the icons already exists, then use that across the board
|
||||
try {
|
||||
if (localIcon36.exists()) {
|
||||
if (new File(resFolder, "drawable-ldpi").mkdirs()) {
|
||||
Base.copyFile(localIcon36, buildIcon36);
|
||||
}
|
||||
}
|
||||
if (localIcon48.exists()) {
|
||||
if (new File(resFolder, "drawable").mkdirs()) {
|
||||
Base.copyFile(localIcon48, buildIcon48);
|
||||
}
|
||||
}
|
||||
if (localIcon72.exists()) {
|
||||
if (new File(resFolder, "drawable-hdpi").mkdirs()) {
|
||||
Base.copyFile(localIcon72, buildIcon72);
|
||||
}
|
||||
}
|
||||
} catch (IOException e) {
|
||||
System.err.println("Problem while copying icons.");
|
||||
e.printStackTrace();
|
||||
}
|
||||
}
|
||||
|
||||
// final File valuesFolder = mkdirs(resFolder, "values");
|
||||
// final File stringsFile = new File(valuesFolder, "strings.xml");
|
||||
// writeResValuesStrings(stringsFile, className);
|
||||
}
|
||||
|
||||
|
||||
@@ -576,18 +636,20 @@ class Build {
|
||||
writer.close();
|
||||
}
|
||||
|
||||
|
||||
/** This recommended to be a string resource so that it can be localized. */
|
||||
private static void writeResValuesStrings(final File file,
|
||||
final String className) {
|
||||
final PrintWriter writer = PApplet.createWriter(file);
|
||||
writer.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
|
||||
writer.println("<resources>");
|
||||
writer.println(" <string name=\"app_name\">" + className + "</string>");
|
||||
writer.println("</resources>");
|
||||
writer.flush();
|
||||
writer.close();
|
||||
}
|
||||
|
||||
// This recommended to be a string resource so that it can be localized.
|
||||
// nah.. we're gonna be messing with it in the GUI anyway...
|
||||
// people can edit themselves if they need to
|
||||
// private static void writeResValuesStrings(final File file,
|
||||
// final String className) {
|
||||
// final PrintWriter writer = PApplet.createWriter(file);
|
||||
// writer.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
|
||||
// writer.println("<resources>");
|
||||
// writer.println(" <string name=\"app_name\">" + className + "</string>");
|
||||
// writer.println("</resources>");
|
||||
// writer.flush();
|
||||
// writer.close();
|
||||
// }
|
||||
|
||||
|
||||
private void writeLibraries(final File libsFolder, final File assetsFolder)
|
||||
|
||||
@@ -66,10 +66,12 @@ public class Manifest {
|
||||
return Build.basePackage + "." + sketch.getName().toLowerCase();
|
||||
}
|
||||
|
||||
|
||||
|
||||
// called by other classes who want an actual package name
|
||||
// internally, we'll figure this out ourselves whether it's filled or not
|
||||
public String getPackageName() {
|
||||
// return packageName;
|
||||
return xml.getString("package");
|
||||
String pkg = xml.getString("package");
|
||||
return pkg.length() == 0 ? defaultPackageName() : pkg;
|
||||
}
|
||||
|
||||
|
||||
@@ -128,14 +130,21 @@ public class Manifest {
|
||||
final PrintWriter writer = PApplet.createWriter(file);
|
||||
writer.println("<?xml version=\"1.0\" encoding=\"utf-8\"?>");
|
||||
writer.println("<manifest xmlns:android=\"http://schemas.android.com/apk/res/android\" ");
|
||||
writer.println(" package=\"" + defaultPackageName() + "\" ");
|
||||
// writer.println(" package=\"" + defaultPackageName() + "\" ");
|
||||
writer.println(" package=\"\" ");
|
||||
writer.println(" android:versionCode=\"1\" ");
|
||||
writer.println(" android:versionName=\"1.0\">");
|
||||
writer.println(" <uses-sdk android:minSdkVersion=\"" + Build.sdkVersion + "\" />");
|
||||
writer.println(" <application android:label=\"@string/app_name\"");
|
||||
// for now including this... we're wiring to a particular SDK version anyway...
|
||||
writer.println(" <uses-sdk android:minSdkVersion=\"" + Build.sdkVersion + "\" />");
|
||||
// writer.println(" <uses-sdk android:minSdkVersion=\"\" />"); // insert sdk version
|
||||
// writer.println(" <application android:label=\"@string/app_name\"");
|
||||
writer.println(" <application android:label=\"\""); // insert pretty name
|
||||
writer.println(" android:icon=\"@drawable/icon\"");
|
||||
writer.println(" android:debuggable=\"true\">");
|
||||
writer.println(" <activity android:name=\".NO_CLASS_SPECIFIED\"");
|
||||
writer.println(" android:label=\"@string/app_name\">");
|
||||
// writer.println(" <activity android:name=\".NO_CLASS_SPECIFIED\"");
|
||||
writer.println(" <activity android:name=\"\""); // insert class name prefixed w/ dot
|
||||
// writer.println(" android:label=\"@string/app_name\">"); // pretty name
|
||||
writer.println(" android:label=\"\">");
|
||||
writer.println(" <intent-filter>");
|
||||
writer.println(" <action android:name=\"android.intent.action.MAIN\" />");
|
||||
writer.println(" <category android:name=\"android.intent.category.LAUNCHER\" />");
|
||||
@@ -148,6 +157,38 @@ public class Manifest {
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Save a new version of the manifest info to the build location.
|
||||
* Also fill in any missing attributes that aren't yet set properly.
|
||||
*/
|
||||
protected void writeBuild(File file, String className, boolean debug) {
|
||||
// package name, or default
|
||||
String p = xml.getString("package").trim();
|
||||
if (p.length() == 0) {
|
||||
xml.setString("package", defaultPackageName());
|
||||
}
|
||||
|
||||
// app name and label, or the class name
|
||||
XMLElement app = xml.getChild("application");
|
||||
String label = app.getString("android:label");
|
||||
if (label.length() == 0) {
|
||||
app.setString("android:label", className);
|
||||
}
|
||||
app.setString("android:debuggable", debug ? "true" : "false");
|
||||
|
||||
XMLElement activity = app.getChild("activity");
|
||||
activity.setString("android:name", "." + className); // this has to be right
|
||||
label = activity.getString("android:label");
|
||||
if (label.length() == 0) {
|
||||
activity.setString("android:label", className);
|
||||
}
|
||||
|
||||
PrintWriter writer = PApplet.createWriter(file);
|
||||
xml.write(writer);
|
||||
writer.close();
|
||||
}
|
||||
|
||||
|
||||
protected void load() {
|
||||
// Sketch sketch = editor.getSketch();
|
||||
// File manifestFile = new File(sketch.getFolder(), MANIFEST_XML);
|
||||
@@ -192,23 +233,12 @@ public class Manifest {
|
||||
* Save to the sketch folder, so that it can be copied in later.
|
||||
*/
|
||||
protected void save() {
|
||||
save(getManifestFile());
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Save to another location (such as the temp build folder).
|
||||
*/
|
||||
protected void save(File file) {
|
||||
// Sketch sketch = editor.getSketch();
|
||||
// File manifestFile = new File(sketch.getFolder(), MANIFEST_XML);
|
||||
// File manifestFile
|
||||
PrintWriter writer = PApplet.createWriter(file);
|
||||
PrintWriter writer = PApplet.createWriter(getManifestFile());
|
||||
xml.write(writer);
|
||||
writer.close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
private File getManifestFile() {
|
||||
return new File(sketch.getFolder(), MANIFEST_XML);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user