blob: cfaeec9096eda8ff46936a946edbaaecdb508416 [file] [log] [blame]
Jason Monka80bfb52017-11-16 17:15:37 -05001/*
2 * Copyright (C) 2017 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 */
16package android.app;
17
18import android.annotation.NonNull;
19import android.annotation.Nullable;
20import android.content.BroadcastReceiver;
21import android.content.ContentProvider;
22import android.content.Intent;
23
24/**
25 * Interface used to control the instantiation of manifest elements.
26 *
27 * @see #instantiateApplication
28 * @see #instantiateActivity
29 * @see #instantiateService
30 * @see #instantiateReceiver
31 * @see #instantiateProvider
32 */
33public class AppComponentFactory {
34
35 /**
36 * Allows application to override the creation of the application object. This can be used to
37 * perform things such as dependency injection or class loader changes to these
38 * classes.
Jason Monkc1386962018-03-28 17:46:03 -040039 * <p>
40 * This method is only intended to provide a hook for instantiation. It does not provide
41 * earlier access to the Application object. The returned object will not be initialized
42 * as a Context yet and should not be used to interact with other android APIs.
Jason Monka80bfb52017-11-16 17:15:37 -050043 *
44 * @param cl The default classloader to use for instantiation.
45 * @param className The class to be instantiated.
46 */
47 public @NonNull Application instantiateApplication(@NonNull ClassLoader cl,
48 @NonNull String className)
49 throws InstantiationException, IllegalAccessException, ClassNotFoundException {
50 return (Application) cl.loadClass(className).newInstance();
51 }
52
53 /**
54 * Allows application to override the creation of activities. This can be used to
55 * perform things such as dependency injection or class loader changes to these
56 * classes.
Jason Monkc1386962018-03-28 17:46:03 -040057 * <p>
58 * This method is only intended to provide a hook for instantiation. It does not provide
59 * earlier access to the Activity object. The returned object will not be initialized
60 * as a Context yet and should not be used to interact with other android APIs.
Jason Monka80bfb52017-11-16 17:15:37 -050061 *
62 * @param cl The default classloader to use for instantiation.
63 * @param className The class to be instantiated.
64 * @param intent Intent creating the class.
65 */
66 public @NonNull Activity instantiateActivity(@NonNull ClassLoader cl, @NonNull String className,
67 @Nullable Intent intent)
68 throws InstantiationException, IllegalAccessException, ClassNotFoundException {
69 return (Activity) cl.loadClass(className).newInstance();
70 }
71
72 /**
73 * Allows application to override the creation of receivers. This can be used to
74 * perform things such as dependency injection or class loader changes to these
75 * classes.
76 *
77 * @param cl The default classloader to use for instantiation.
78 * @param className The class to be instantiated.
79 * @param intent Intent creating the class.
80 */
81 public @NonNull BroadcastReceiver instantiateReceiver(@NonNull ClassLoader cl,
82 @NonNull String className, @Nullable Intent intent)
83 throws InstantiationException, IllegalAccessException, ClassNotFoundException {
84 return (BroadcastReceiver) cl.loadClass(className).newInstance();
85 }
86
87 /**
88 * Allows application to override the creation of services. This can be used to
89 * perform things such as dependency injection or class loader changes to these
90 * classes.
Jason Monkc1386962018-03-28 17:46:03 -040091 * <p>
92 * This method is only intended to provide a hook for instantiation. It does not provide
93 * earlier access to the Service object. The returned object will not be initialized
94 * as a Context yet and should not be used to interact with other android APIs.
Jason Monka80bfb52017-11-16 17:15:37 -050095 *
96 * @param cl The default classloader to use for instantiation.
97 * @param className The class to be instantiated.
98 * @param intent Intent creating the class.
99 */
100 public @NonNull Service instantiateService(@NonNull ClassLoader cl,
101 @NonNull String className, @Nullable Intent intent)
102 throws InstantiationException, IllegalAccessException, ClassNotFoundException {
103 return (Service) cl.loadClass(className).newInstance();
104 }
105
106 /**
107 * Allows application to override the creation of providers. This can be used to
108 * perform things such as dependency injection or class loader changes to these
109 * classes.
Jason Monkc1386962018-03-28 17:46:03 -0400110 * <p>
111 * This method is only intended to provide a hook for instantiation. It does not provide
112 * earlier access to the ContentProvider object. The returned object will not be initialized
113 * with a Context yet and should not be used to interact with other android APIs.
Jason Monka80bfb52017-11-16 17:15:37 -0500114 *
115 * @param cl The default classloader to use for instantiation.
116 * @param className The class to be instantiated.
117 */
118 public @NonNull ContentProvider instantiateProvider(@NonNull ClassLoader cl,
119 @NonNull String className)
120 throws InstantiationException, IllegalAccessException, ClassNotFoundException {
121 return (ContentProvider) cl.loadClass(className).newInstance();
122 }
123
124 /**
125 * @hide
126 */
Jason Monkc1386962018-03-28 17:46:03 -0400127 public static final AppComponentFactory DEFAULT = new AppComponentFactory();
Jason Monka80bfb52017-11-16 17:15:37 -0500128}