VmTerminalApp: Non-interactive installation for debug and development
For debuggable build, download automatically starts if /sdcard/linux
exists.
Plus, also added KEYCODE_BUTTON_START supports for automation on user
build.
Bug: 376759235
Test: Manual, T/H
Change-Id: I8f3c2b19120c68b14cf391e421a7ef1cc7357f9b
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java
index 1abba85..83c6b4c 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerActivity.java
@@ -29,11 +29,13 @@
import android.os.RemoteException;
import android.text.format.Formatter;
import android.util.Log;
+import android.view.KeyEvent;
import android.view.View;
import android.widget.CheckBox;
import android.widget.TextView;
import com.android.internal.annotations.VisibleForTesting;
+import com.android.virtualization.vmlauncher.InstallUtils;
import com.google.android.material.progressindicator.LinearProgressIndicator;
import com.google.android.material.snackbar.Snackbar;
@@ -45,7 +47,6 @@
private static final String TAG = "LinuxInstaller";
private static final long ESTIMATED_IMG_SIZE_BYTES = FileUtils.parseSize("350MB");
- static final String EXTRA_AUTO_DOWNLOAD = "auto_download";
private ExecutorService mExecutorService;
private CheckBox mWaitForWifiCheckbox;
@@ -80,17 +81,25 @@
requestInstall();
});
- if (getIntent().getBooleanExtra(EXTRA_AUTO_DOWNLOAD, false)) {
- Log.i(TAG, "Auto downloading");
- requestInstall();
- }
-
Intent intent = new Intent(this, InstallerService.class);
mInstallerServiceConnection = new InstallerServiceConnection(this);
if (!bindService(intent, mInstallerServiceConnection, Context.BIND_AUTO_CREATE)) {
handleCriticalError(new Exception("Failed to connect to installer service"));
}
+ }
+ @Override
+ public void onResume() {
+ super.onResume();
+
+ if (Build.isDebuggable() && InstallUtils.payloadFromExternalStorageExists()) {
+ Snackbar.make(
+ findViewById(android.R.id.content),
+ "Auto installing",
+ Snackbar.LENGTH_LONG)
+ .show();
+ requestInstall();
+ }
}
@Override
@@ -103,6 +112,15 @@
super.onDestroy();
}
+ @Override
+ public boolean onKeyUp(int keyCode, KeyEvent event) {
+ if (keyCode == KeyEvent.KEYCODE_BUTTON_START) {
+ requestInstall();
+ return true;
+ }
+ return super.onKeyUp(keyCode, event);
+ }
+
@VisibleForTesting
public boolean waitForInstallCompleted(long timeoutMillis) {
return mInstallCompleted.block(timeoutMillis);
diff --git a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.java b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.java
index b785416..f97f16f 100644
--- a/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.java
+++ b/android/TerminalApp/java/com/android/virtualization/terminal/InstallerService.java
@@ -17,8 +17,6 @@
package com.android.virtualization.terminal;
import android.app.Notification;
-import android.app.NotificationChannel;
-import android.app.NotificationManager;
import android.app.PendingIntent;
import android.app.Service;
import android.content.Intent;
@@ -122,16 +120,21 @@
}
private void requestInstall() {
- Log.i(TAG, "Installing..");
+ synchronized (mLock) {
+ if (mIsInstalling) {
+ Log.i(TAG, "already installing..");
+ return;
+ } else {
+ Log.i(TAG, "installing..");
+ mIsInstalling = true;
+ }
+ }
// Make service to be long running, even after unbind() when InstallerActivity is destroyed
// The service will still be destroyed if task is remove.
startService(new Intent(this, InstallerService.class));
startForeground(
NOTIFICATION_ID, mNotification, ServiceInfo.FOREGROUND_SERVICE_TYPE_SPECIAL_USE);
- synchronized (mLock) {
- mIsInstalling = true;
- }
mExecutorService.execute(
() -> {
diff --git a/tests/Terminal/src/com/android/virtualization/terminal/TerminalAppTest.java b/tests/Terminal/src/com/android/virtualization/terminal/TerminalAppTest.java
index 6400438..fd07973 100644
--- a/tests/Terminal/src/com/android/virtualization/terminal/TerminalAppTest.java
+++ b/tests/Terminal/src/com/android/virtualization/terminal/TerminalAppTest.java
@@ -56,7 +56,6 @@
Intent intent = new Intent(mTargetContext, InstallerActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
- intent.putExtra(InstallerActivity.EXTRA_AUTO_DOWNLOAD, true);
if (mInstr.startActivitySync(intent) instanceof InstallerActivity activity) {
assertTrue(