Activity: implement getTitle/setTitle

also set the title from AndroidManifest.xml
this is used by some androidx AppCompat widgets
This commit is contained in:
Mis012
2024-04-07 21:33:32 +02:00
parent 1e64babfd4
commit b1d4a69c6b
2 changed files with 26 additions and 5 deletions

View File

@@ -164,6 +164,14 @@ public class AndroidManifestBlock extends ResXmlDocument {
} }
return null; return null;
} }
public ResXmlElement getActivityByName(String name){
for(ResXmlElement activity:listActivities()){
ResXmlAttribute attribute = activity.searchAttributeByResourceId(AndroidManifestBlock.ID_name);
if(name != null && attribute != null && name.equals(attribute.getValueAsString()))
return activity;
}
return null;
}
public List<ResXmlElement> listActivities(){ public List<ResXmlElement> listActivities(){
return listActivities(true); return listActivities(true);
} }

View File

@@ -22,6 +22,7 @@ import android.view.Window;
import android.view.WindowManager; import android.view.WindowManager;
import android.view.WindowManagerImpl; import android.view.WindowManagerImpl;
import com.reandroid.arsc.chunk.xml.AndroidManifestBlock; import com.reandroid.arsc.chunk.xml.AndroidManifestBlock;
import com.reandroid.arsc.chunk.xml.ResXmlAttribute;
import java.io.IOException; import java.io.IOException;
import java.io.InputStream; import java.io.InputStream;
import java.lang.reflect.Constructor; import java.lang.reflect.Constructor;
@@ -41,6 +42,7 @@ public class Activity extends ContextWrapper implements Window.Callback {
private int pendingResultCode; private int pendingResultCode;
private Intent pendingData; private Intent pendingData;
private boolean paused = false; private boolean paused = false;
private CharSequence title = null;
List<Fragment> fragments = new ArrayList<>(); List<Fragment> fragments = new ArrayList<>();
/** /**
@@ -72,6 +74,15 @@ public class Activity extends ContextWrapper implements Window.Callback {
super(null); super(null);
layout_inflater = new LayoutInflater(); layout_inflater = new LayoutInflater();
intent = new Intent(); intent = new Intent();
ResXmlAttribute label;
if((label = manifest.getActivityByName(getClass().getName()).searchAttributeByResourceId(AndroidManifestBlock.ID_label)) != null
|| (label = manifest.getApplicationElement().searchAttributeByResourceId(AndroidManifestBlock.ID_label)) != null) {
if(label.getValueType() == com.reandroid.arsc.value.ValueType.STRING)
setTitle(label.getValueAsString());
else
setTitle(getString(label.getData()));
}
} }
public View root_view; public View root_view;
@@ -337,10 +348,6 @@ public class Activity extends ContextWrapper implements Window.Callback {
return layout_inflater; return layout_inflater;
} }
public CharSequence getTitle() {
return "Title";
}
public boolean isChangingConfigurations() {return false;} public boolean isChangingConfigurations() {return false;}
@Override @Override
@@ -402,7 +409,13 @@ public class Activity extends ContextWrapper implements Window.Callback {
} }
} }
public void setTitle(CharSequence title) {} public void setTitle(CharSequence title) {
this.title = title;
}
public CharSequence getTitle() {
return title;
}
public void onBackPressed() { public void onBackPressed() {
finish(); finish();