Add a null home activity to Shell.apk

In configurations where AOSP Settings.apk is not included, there might
not be any home activity. E.g. CSI doesn't have Settings.apk.

This CL adds a null home activity to Shell.apk, which is in CSI,
so the framework can be in a sane state. Without such null home
activity in CSI, package manager fails to install any APKs.

Bug: 148044842
Test: $ lunch csi_arm64-userdebug; m -j
      # Flash CSI to a Pixel (with AVB disabled) and reboot
      $ m DeviceHealthChecks
      $ adb install $OUT/testcases/DeviceHealthTests/arm64/DeviceHealthTests.apk
      Performing Streamed Install
      Success

Change-Id: I87999e30298bbe42af64f28e88fc6dc5975f1ca3
This commit is contained in:
Isaac Chen
2020-01-21 17:00:34 +08:00
parent 40cae1c0c9
commit 6b1c4a9e09
3 changed files with 103 additions and 0 deletions

View File

@@ -265,6 +265,22 @@
android:excludeFromRecents="true"
android:exported="false" />
<!--
The following is used as a no-op/null home activity when
no other MAIN/HOME activity is present (e.g., in CSI).
-->
<activity android:name=".NullHome"
android:excludeFromRecents="true"
android:label=""
android:screenOrientation="nosensor">
<!-- The priority here is set to be lower than that for Settings -->
<intent-filter android:priority="-1100">
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.HOME" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
<receiver
android:name=".BugreportReceiver"
android:permission="android.permission.DUMP">

View File

@@ -0,0 +1,44 @@
<?xml version="1.0" encoding="utf-8"?>
<!--
~ Copyright (C) 2020 The Android Open Source Project
~
~ Licensed under the Apache License, Version 2.0 (the "License");
~ you may not use this file except in compliance with the License.
~ You may obtain a copy of the License at
~
~ http://www.apache.org/licenses/LICENSE-2.0
~
~ Unless required by applicable law or agreed to in writing, software
~ distributed under the License is distributed on an "AS IS" BASIS,
~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
~ See the License for the specific language governing permissions and
~ limitations under the License
-->
<FrameLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#80000000"
android:forceHasOverlappingRendering="false">
<LinearLayout
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_gravity="center"
android:layout_marginStart="16dp"
android:layout_marginEnd="16dp">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="40sp"
android:textColor="?android:attr/textColorPrimary"
android:text="@*android:string/android_start_title"/>
<ProgressBar
style="@android:style/Widget.Material.ProgressBar.Horizontal"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="12.75dp"
android:colorControlActivated="?android:attr/textColorPrimary"
android:indeterminate="true"/>
</LinearLayout>
</FrameLayout>

View File

@@ -0,0 +1,43 @@
/*
* Copyright (C) 2020 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.android.shell;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
/**
* This covers the fallback case where no launcher is available.
* Usually Settings.apk has one fallback home activity.
* Settings.apk, however, is not part of CSI, which needs to be
* standalone (bootable and testable).
*/
public class NullHome extends Activity {
private static final String TAG = "NullHome";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.i(TAG, "onCreate");
setContentView(R.layout.null_home_finishing_boot);
}
protected void onDestroy() {
super.onDestroy();
Log.i(TAG, "onDestroy");
}
}