• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2019 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.car.frameworkpackagestubs;
18 
19 import android.app.Activity;
20 import android.content.pm.PackageManager;
21 import android.os.Bundle;
22 import android.widget.Toast;
23 
24 /**
25  * Contains different stub classes.
26  *
27  * <p>This handles the intents to avoid app crashing and notify the function is not supported.
28  *
29  * <p>These are broken out so that the intent filters are easier to track and so that individual
30  * ones can create more specific messages if desired.
31  */
32 public final class Stubs {
33 
34     /**
35      * Base class for stubs.
36      *
37      * <p>Shows a toast and finishes.
38      *
39      * <p>Subclasses can override {@link #getMessage()} to customize the message. Subclasses can
40      * override {@link #setResultImp()} if to return a result.
41      */
42     private static class BaseActivity extends Activity {
43 
44         private Toast mToast;
45 
46         @Override
onCreate(Bundle savedInstanceState)47         protected void onCreate(Bundle savedInstanceState) {
48             super.onCreate(savedInstanceState);
49             showToast();
50             setResultImp();
51             finish();
52         }
53 
getMessage()54         protected CharSequence getMessage() {
55             return getResources().getString(R.string.message_not_supported);
56         }
57 
58         /* No result is expected by default */
setResultImp()59         protected void setResultImp() {}
60 
showToast()61         private void showToast() {
62             cancelToast();
63             mToast = Toast.makeText(this, getMessage(), Toast.LENGTH_LONG);
64             mToast.show();
65         }
66 
cancelToast()67         private void cancelToast() {
68             if (mToast != null) {
69                 mToast.cancel();
70             }
71         }
72     }
73 
74     /**
75      * Stub activity for Browser events.
76      */
77     public static class BrowserStub extends BaseActivity { }
78 
79     /**
80      * Stub activity for Calendar events.
81      */
82     public static class CalendarStub extends BaseActivity { }
83 
84     /**
85      * Stub activity for Contacts events.
86      */
87     public static class ContactsStub extends BaseActivity { }
88 
89     /**
90      * Stub activity for Desk Clock events.
91      */
92     public static class DeskClockStub extends BaseActivity { }
93 
94     /**
95      * Stub activity for Dialer events.
96      */
97     public static class DialerStub extends BaseActivity { }
98 
99     /**
100      * Stub activity for media events.
101      */
102     public static class MediaStub extends BaseActivity { }
103 
104     /**
105      * Stub activity for setting events.
106      */
107     public static class SettingsStub extends BaseActivity { }
108 
109     /**
110      * Stub activity for android.settings.MANAGE_UNKNOWN_APP_SOURCES intent. It returns
111      * RESULT_CANCELED for startActivityForResult() according to CDD Application Packaging
112      * Compatibility.
113      */
114     public static class ManageExternalSourcesActivityStub extends BaseActivity {
115         @Override
getMessage()116         protected CharSequence getMessage() {
117             return getResources().getString(R.string.manage_unknown_app_sources_not_supported);
118         }
119 
120         @Override
setResultImp()121         protected void setResultImp() {
122             setResult(RESULT_CANCELED);
123         }
124     }
125 
126     /**
127      * Stub activity for ignore background data restriction setting.
128      */
129     public static class IgnoreBackgroundDataRestrictionsSettingsStub extends BaseActivity { }
130 
131     /**
132      * Stub activity for ignore battery optimization setting.
133      */
134     public static class IgnoreBatteryOptimizationSettingsStub extends BaseActivity { }
135 
136     /**
137      * Stub activity for request battery optimization.
138      */
139     public static class RequestIgnoreBatteryOptimizationsStub extends BaseActivity { }
140 
141     /**
142      * Stub activity for webview setting.
143      */
144     public static class WebViewSettingsStub extends BaseActivity { }
145 
146     /**
147      * Stub activity for picture in picture settings.
148      */
149     public static class PictureInPictureSettingsStub extends BaseActivity {
150         @Override
getMessage()151         protected CharSequence getMessage() {
152             if (!getPackageManager().hasSystemFeature(PackageManager.FEATURE_PICTURE_IN_PICTURE)) {
153                 return getResources().getString(R.string.pip_not_supported);
154             }
155             return super.getMessage();
156         }
157     }
158 
159     /** Stub activity for DocumentsUI intents. */
160     public static class DocumentsUIStub extends BaseActivity {
161         @Override
getMessage()162         protected CharSequence getMessage() {
163             return getResources().getString(R.string.documentsui_not_supported);
164         }
165     }
166 
167     /** Stub activity for DocumentsUI intents expecting the result. */
168     public static class DocumentsUIStubWithResult extends DocumentsUIStub {
169         @Override
setResultImp()170         protected void setResultImp() {
171             setResult(RESULT_CANCELED);
172         }
173     }
174 }
175