treat application/activity names in AndroidManifest.xml as dot-prefixed when they don't contain any dots

This commit is contained in:
Mis012
2024-03-07 15:44:21 +01:00
parent 6d587a19e5
commit ecaf968da1
2 changed files with 11 additions and 25 deletions

View File

@@ -52,9 +52,10 @@ public class Activity extends ContextWrapper implements Window.Callback {
InputStream inStream = ClassLoader.getSystemClassLoader().getResourceAsStream("AndroidManifest.xml"); InputStream inStream = ClassLoader.getSystemClassLoader().getResourceAsStream("AndroidManifest.xml");
AndroidManifestBlock block = AndroidManifestBlock.load(inStream); AndroidManifestBlock block = AndroidManifestBlock.load(inStream);
className = block.getMainActivity().searchAttributeByResourceId(AndroidManifestBlock.ID_name).getValueAsString(); className = block.getMainActivity().searchAttributeByResourceId(AndroidManifestBlock.ID_name).getValueAsString();
if (className.startsWith(".")) { if(className.indexOf('.') == -1)
className = "." + className;
if (className.startsWith("."))
className = block.getPackageName() + className; className = block.getPackageName() + className;
}
} else { } else {
className = className.replace('/', '.'); className = className.replace('/', '.');
} }
@@ -206,30 +207,14 @@ public class Activity extends ContextWrapper implements Window.Callback {
public void setContentView(int layoutResID) throws Exception { public void setContentView(int layoutResID) throws Exception {
System.out.println("- setContentView - yay!"); System.out.println("- setContentView - yay!");
XmlResourceParser xpp = Context.this_application.getResources().getLayout(layoutResID); root_view = layout_inflater.inflate(layoutResID, null, false);
root_view = layout_inflater.inflate(xpp, null, false);
System.out.println("~~~~~~~~~~~"); System.out.println("~~~~~~~~~~~");
System.out.println(root_view); System.out.println(root_view);
System.out.println(root_view.widget); System.out.printf("%x\n", root_view.id);
System.out.println("~~~~~~~~~~~"); System.out.println("~~~~~~~~~~~");
setContentView(root_view); setContentView(root_view);
/* Window w = new Window();
w.setTitle(this.toString());
w.setDefaultSize(540, 960);
w.add(root_view.widget);
w.showAll();
w.connect(new Window.DeleteEvent() {
public boolean onDeleteEvent(Widget source, Event event) {
Gtk.mainQuit();
return false;
}
});*/
} }
public void setContentView(View view, ViewGroup.LayoutParams layoutParams) { public void setContentView(View view, ViewGroup.LayoutParams layoutParams) {
@@ -238,10 +223,11 @@ public class Activity extends ContextWrapper implements Window.Callback {
public void setContentView(View view) { public void setContentView(View view) {
window.setContentView(view); window.setContentView(view);
onContentChanged();
} }
public <T extends android.view.View> T findViewById(int id) { public <T extends android.view.View> T findViewById(int id) {
System.out.println("- findViewById - asked for view with id: " + id); System.out.printf("- findViewById - asked for view with id: %x\n", id);
View view = null; View view = null;
if (window.contentView != null) if (window.contentView != null)
view = window.contentView.findViewById(id); view = window.contentView.findViewById(id);
@@ -339,8 +325,7 @@ public class Activity extends ContextWrapper implements Window.Callback {
@Override @Override
public void onContentChanged() { public void onContentChanged() {
// TODO Auto-generated method stub System.out.println("- onContentChanged - yay!");
throw new UnsupportedOperationException("Unimplemented method 'onContentChanged'");
} }
public boolean onCreateOptionsMenu(Menu menu) { public boolean onCreateOptionsMenu(Menu menu) {

View File

@@ -101,9 +101,10 @@ public class Context extends Object {
Application application; Application application;
ResXmlAttribute application_name = manifest.getApplicationElement().searchAttributeByResourceId(AndroidManifestBlock.ID_name); ResXmlAttribute application_name = manifest.getApplicationElement().searchAttributeByResourceId(AndroidManifestBlock.ID_name);
String className = (application_name != null) ? application_name.getValueAsString() : "android.app.Application"; String className = (application_name != null) ? application_name.getValueAsString() : "android.app.Application";
if (className.startsWith(".")) { if(className.indexOf('.') == -1)
className = "." + className;
if (className.startsWith("."))
className = manifest.getPackageName() + className; className = manifest.getPackageName() + className;
}
Class<? extends Application> cls = Class.forName(className).asSubclass(Application.class); Class<? extends Application> cls = Class.forName(className).asSubclass(Application.class);
Constructor<? extends Application> constructor = cls.getConstructor(); Constructor<? extends Application> constructor = cls.getConstructor();
application = constructor.newInstance(); application = constructor.newInstance();