1 /*
2  * Copyright (C) 2021 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 com.android.bedstead.nene.context;
18 
19 import android.content.pm.PackageManager;
20 
21 import androidx.test.platform.app.InstrumentationRegistry;
22 
23 import com.android.bedstead.nene.TestApis;
24 import com.android.bedstead.nene.exceptions.NeneException;
25 import com.android.bedstead.nene.users.UserReference;
26 
27 /** Test APIs related to Context. */
28 public final class Context {
29 
30     private static final String ANDROID_PACKAGE = "android";
31 
32     private static final android.content.Context sInstrumentedContext =
33             InstrumentationRegistry.getInstrumentation().getTargetContext();
34     private static final android.content.Context sInstrumentationContext =
35             InstrumentationRegistry.getInstrumentation().getContext();
36     private final TestApis mTestApis;
37 
Context(TestApis testApis)38     public Context(TestApis testApis) {
39         mTestApis = testApis;
40     }
41 
42     /**
43      * Get the {@link android.content.Context} for the instrumented test app.
44      */
instrumentedContext()45     public android.content.Context instrumentedContext() {
46         return sInstrumentedContext;
47     }
48 
49     /**
50      * Get the {@link android.content.Context} for the instrumented test app in another user.
51      */
instrumentedContextAsUser(UserReference user)52     public android.content.Context instrumentedContextAsUser(UserReference user) {
53         return sInstrumentedContext.createContextAsUser(user.userHandle(), /* flags= */ 0);
54     }
55 
56     /**
57      * Get the {@link android.content.Context} for the instrumentation app.
58      */
instrumentationContext()59     public android.content.Context instrumentationContext() {
60         return sInstrumentationContext;
61     }
62 
63     /**
64      * Get the {@link android.content.Context} for the instrumentation app in another user.
65      */
instrumentationContextAsUser(UserReference user)66     public android.content.Context instrumentationContextAsUser(UserReference user) {
67         return sInstrumentationContext.createContextAsUser(user.userHandle(), /* flags= */ 0);
68     }
69 
70     /**
71      * Get the {@link android.content.Context} for the "android" package in the given user.
72      */
androidContextAsUser(UserReference user)73     public android.content.Context androidContextAsUser(UserReference user) {
74         try {
75             return sInstrumentedContext.createPackageContextAsUser(
76                     ANDROID_PACKAGE, /* flags= */ 0, user.userHandle());
77         } catch (PackageManager.NameNotFoundException e) {
78             throw new NeneException("Could not find android installed in user " + user, e);
79         }
80     }
81 }
82