97 lines
2.7 KiB
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();
|
|
}
|
|
}
|
|
}
|