• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 // Copyright 2018 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4 
5 package org.chromium.testing.local;
6 
7 import android.content.ComponentName;
8 import android.content.pm.ActivityInfo;
9 import android.content.pm.PackageInfo;
10 import android.content.pm.PackageManager;
11 
12 import org.robolectric.annotation.Implementation;
13 import org.robolectric.annotation.Implements;
14 import org.robolectric.shadows.ShadowApplicationPackageManager;
15 
16 /**
17  * Uses {@link PackageManager#getPackageInfo()} to retrieve ActivityInfo. This enables registering
18  * activities via {@link ShadowPackageManager#addPackage()}.
19  */
20 @Implements(className = "android.app.ApplicationPackageManager")
21 public class CustomShadowApplicationPackageManager extends ShadowApplicationPackageManager {
22     @Implementation
23     @Override
getActivityInfo(ComponentName component, int flags)24     public ActivityInfo getActivityInfo(ComponentName component, int flags)
25             throws PackageManager.NameNotFoundException {
26         PackageInfo packageInfo = getPackageInfo(component.getPackageName(), flags);
27         if (packageInfo.activities != null) {
28             for (ActivityInfo activityInfo : packageInfo.activities) {
29                 if (component.getClassName().equals(activityInfo.targetActivity)) {
30                     return activityInfo;
31                 }
32             }
33         }
34         return super.getActivityInfo(component, flags);
35     }
36 }
37