/* * Copyright (C) 2011 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package androidx.core.content; import android.content.Intent; import android.os.Build; import androidx.annotation.NonNull; /** * Helper for accessing features in {@link android.content.Intent}. */ public final class IntentCompat { private IntentCompat() { /* Hide constructor */ } /** * A constant String that is associated with the Intent, used with * {@link android.content.Intent#ACTION_SEND} to supply an alternative to * {@link android.content.Intent#EXTRA_TEXT} * as HTML formatted text. Note that you must also supply * {@link android.content.Intent#EXTRA_TEXT}. */ public static final String EXTRA_HTML_TEXT = "android.intent.extra.HTML_TEXT"; /** * Used as a boolean extra field in {@link android.content.Intent#ACTION_VIEW} intents to * indicate that content should immediately be played without any intermediate screens that * require additional user input, e.g. a profile selection screen or a details page. */ public static final String EXTRA_START_PLAYBACK = "android.intent.extra.START_PLAYBACK"; /** * Indicates an activity optimized for Leanback mode, and that should * be displayed in the Leanback launcher. */ public static final String CATEGORY_LEANBACK_LAUNCHER = "android.intent.category.LEANBACK_LAUNCHER"; /** * Make an Intent for the main activity of an application, without * specifying a specific activity to run but giving a selector to find * the activity. This results in a final Intent that is structured * the same as when the application is launched from * Home. For anything else that wants to launch an application in the * same way, it is important that they use an Intent structured the same * way, and can use this function to ensure this is the case. * *

The returned Intent has {@link Intent#ACTION_MAIN} as its action, and includes the * category {@link Intent#CATEGORY_LAUNCHER}. This does not have * {@link Intent#FLAG_ACTIVITY_NEW_TASK} set, though typically you will want * to do that through {@link Intent#addFlags(int)} on the returned Intent. * * @param selectorAction The action name of the Intent's selector. * @param selectorCategory The name of a category to add to the Intent's * selector. * @return Returns a newly created Intent that can be used to launch the * activity as a main application entry. */ @NonNull public static Intent makeMainSelectorActivity(@NonNull String selectorAction, @NonNull String selectorCategory) { if (Build.VERSION.SDK_INT >= 15) { return Intent.makeMainSelectorActivity(selectorAction, selectorCategory); } else { // Before api 15 you couldn't set a selector intent. // Fall back and just return an intent with the requested action/category, // even though it won't be a proper "main" intent. Intent intent = new Intent(selectorAction); intent.addCategory(selectorCategory); return intent; } } }