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