termux-x11/app/src/main/java/com/termux/x11/TermuxX11StarterReceiver.java

97 lines
2.7 KiB
Java

package com.termux.x11;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.os.IBinder;
import android.os.ParcelFileDescriptor;
import android.os.RemoteException;
import android.util.Log;
import android.widget.Toast;
import com.termux.x11.common.ITermuxX11Internal;
import java.io.FileOutputStream;
import java.io.IOException;
public class TermuxX11StarterReceiver extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (intent != null)
handleIntent(intent);
Intent main = new Intent(this, MainActivity.class);
main.putExtra(LorieService.LAUNCHED_BY_COMPATION, 1);
main.setFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(main);
finish();
}
private void log(String s) {
Log.e("NewIntent", s);
}
private void handleIntent(Intent intent) {
final String extraName = "com.termux.x11.starter";
Bundle bundle;
IBinder token;
ITermuxX11Internal svc;
ParcelFileDescriptor pfd = null;
String toastText;
// We do not use Object.equals(Object obj) for the case same intent was passed twice
if (intent == null)
return;
toastText = intent.getStringExtra("toast");
if (toastText != null)
Toast.makeText(this, toastText, Toast.LENGTH_LONG).show();
bundle = intent.getBundleExtra(extraName);
if (bundle == null) {
log("Got intent without " + extraName + " bundle");
return;
}
token = bundle.getBinder("");
if (token == null) {
log("got " + extraName + " extra but it has no Binder token");
return;
}
svc = ITermuxX11Internal.Stub.asInterface(token);
if (svc == null) {
log("Could not create " + extraName + " service proxy");
return;
}
try {
pfd = svc.getWaylandFD();
if (pfd != null)
LorieService.adoptWaylandFd(pfd.getFd());
} catch (Exception e) {
log("Failed to receive ParcelFileDescriptor");
e.printStackTrace();
}
try {
pfd = svc.getLogFD();
if (pfd != null) {
LorieService.startLogcatForFd(pfd.getFd());
}
} catch (Exception e) {
log("Failed to receive ParcelFileDescriptor");
e.printStackTrace();
}
try {
svc.finish();
} catch (RemoteException e) {
e.printStackTrace();
}
}
}