1 /* 2 * Copyright (C) 2022 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package android.server.wm.jetpack.signed; 18 19 import static android.server.wm.jetpack.extensions.util.ExtensionsUtil.getWindowExtensions; 20 import static android.server.wm.jetpack.utils.ActivityEmbeddingUtil.EMBEDDED_ACTIVITY_ID; 21 import static android.server.wm.jetpack.utils.ActivityEmbeddingUtil.assumeActivityEmbeddingSupportedDevice; 22 import static android.server.wm.jetpack.utils.ActivityEmbeddingUtil.createSplitPairRuleBuilder; 23 import static android.server.wm.jetpack.utils.ActivityEmbeddingUtil.startActivityCrossUidInSplit; 24 import static android.server.wm.jetpack.utils.WindowManagerJetpackTestBase.EXTRA_EMBED_ACTIVITY; 25 import static android.server.wm.jetpack.utils.WindowManagerJetpackTestBase.EXTRA_SPLIT_RATIO; 26 27 import android.app.Activity; 28 import android.content.ComponentName; 29 import android.content.Intent; 30 import android.os.Bundle; 31 import android.server.wm.jetpack.extensions.util.TestValueCountConsumer; 32 import android.server.wm.jetpack.utils.TestActivityKnownEmbeddingCerts; 33 34 import androidx.window.extensions.embedding.ActivityEmbeddingComponent; 35 import androidx.window.extensions.embedding.SplitAttributes; 36 import androidx.window.extensions.embedding.SplitInfo; 37 import androidx.window.extensions.embedding.SplitPairRule; 38 39 import org.junit.AssumptionViolatedException; 40 41 import java.util.Collections; 42 import java.util.List; 43 44 /** 45 * A test activity that attempts to embed {@link TestActivityKnownEmbeddingCerts} when created. 46 * The app it belongs to is signed with a certificate that is recognized by the target app as a 47 * trusted embedding host. 48 */ 49 public class SignedEmbeddingActivity extends Activity { 50 51 @Override onCreate(Bundle savedInstanceState)52 protected void onCreate(Bundle savedInstanceState) { 53 super.onCreate(savedInstanceState); 54 55 if (getIntent().getBooleanExtra(EXTRA_EMBED_ACTIVITY, false)) { 56 startActivityInSplit(); 57 } 58 } 59 60 @Override onNewIntent(Intent intent)61 protected void onNewIntent(Intent intent) { 62 super.onNewIntent(intent); 63 64 if (intent.getBooleanExtra(EXTRA_EMBED_ACTIVITY, false)) { 65 startActivityInSplit(); 66 } 67 } 68 startActivityInSplit()69 void startActivityInSplit() { 70 ActivityEmbeddingComponent embeddingComponent; 71 try { 72 assumeActivityEmbeddingSupportedDevice(); 73 embeddingComponent = getWindowExtensions().getActivityEmbeddingComponent(); 74 } catch (AssumptionViolatedException e) { 75 // Embedding not supported 76 finish(); 77 return; 78 } 79 80 TestValueCountConsumer<List<SplitInfo>> splitInfoConsumer = new TestValueCountConsumer<>(); 81 embeddingComponent.setSplitInfoCallback(splitInfoConsumer); 82 SplitAttributes.SplitType splitType = new SplitAttributes.SplitType.RatioSplitType( 83 getIntent().getFloatExtra(EXTRA_SPLIT_RATIO, 0.5f)); 84 85 SplitPairRule splitPairRule = createSplitPairRuleBuilder( 86 activityActivityPair -> true /* activityActivityPredicate */, 87 activityIntentPair -> true /* activityIntentPredicate */, 88 parentWindowMetrics -> true /* parentWindowMetricsPredicate */) 89 .setDefaultSplitAttributes(new SplitAttributes.Builder() 90 .setSplitType(splitType).build()) 91 .build(); 92 embeddingComponent.setEmbeddingRules(Collections.singleton(splitPairRule)); 93 94 // Launch an activity from a different UID that recognizes this package's signature and 95 // verify that it is split with this activity. 96 startActivityCrossUidInSplit(this, 97 new ComponentName("android.server.wm.jetpack", 98 "android.server.wm.jetpack.utils.TestActivityKnownEmbeddingCerts"), 99 splitPairRule, splitInfoConsumer, EMBEDDED_ACTIVITY_ID, false /* verify */); 100 } 101 } 102