MATCH_EXTERNAL was introduced in api level 28, which was after the initial version of this application. This caused a bug for suggestions which assumed the enumeration was total. This also includes a defensive check + log warning for unkown flags. Test: Build and Run Change-Id: I153985b5fd576baf80545b4737648745b421f11e
104 lines
4.1 KiB
Java
104 lines
4.1 KiB
Java
/*
|
|
* Copyright (C) 2018 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 com.example.android.intentplayground;
|
|
|
|
import java.util.Arrays;
|
|
import java.util.HashSet;
|
|
import java.util.Set;
|
|
import java.util.stream.Collectors;
|
|
|
|
import static java.util.Collections.emptySet;
|
|
|
|
/**
|
|
* Represents the different intent flags related to activities and tasks.
|
|
*/
|
|
enum IntentFlag {
|
|
SINGLE_TOP ("FLAG_ACTIVITY_SINGLE_TOP", emptySet(), emptySet(), emptySet()),
|
|
BROUGHT_TO_FRONT ("FLAG_ACTIVITY_BROUGHT_TO_FRONT", emptySet(), emptySet(), emptySet()),
|
|
NEW_TASK ("FLAG_ACTIVITY_NEW_TASK", emptySet(), emptySet(), emptySet()),
|
|
CLEAR_TASK ("FLAG_ACTIVITY_CLEAR_TASK", emptySet(), emptySet(), setOf(NEW_TASK)),
|
|
CLEAR_TOP ("FLAG_ACTIVITY_CLEAR_TOP", setOf(SINGLE_TOP, NEW_TASK), emptySet(), emptySet()),
|
|
MATCH_EXTERNAL("FLAG_ACTIVITY_MATCH_EXTERNAL", emptySet(), emptySet(), emptySet()),
|
|
MULTIPLE_TASK ("FLAG_ACTIVITY_MULTIPLE_TASK", emptySet(), emptySet(), setOf(NEW_TASK)),
|
|
NEW_DOCUMENT ("FLAG_ACTIVITY_NEW_DOCUMENT", setOf(MULTIPLE_TASK), emptySet(),
|
|
emptySet()),
|
|
RETAIN_IN_RECENTS ("FLAG_ACTIVITY_RETAIN_IN_RECENTS", setOf(NEW_DOCUMENT),
|
|
emptySet(), emptySet()),
|
|
CLEAR_WHEN_TASK_RESET ("FLAG_ACTIVITY_CLEAR_WHEN_TASK_RESET", emptySet(), emptySet(),
|
|
emptySet()),
|
|
EXCLUDE_FROM_RECENTS ("FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS", emptySet(), setOf(RETAIN_IN_RECENTS),
|
|
emptySet()),
|
|
FORWARD_RESULT ("FLAG_ACTIVITY_FORWARD_RESULT", emptySet(), emptySet(), emptySet()),
|
|
LAUNCHED_FROM_HISTORY ("FLAG_ACTIVITY_LAUNCHED_FROM_HISTORY", emptySet(), emptySet(),
|
|
emptySet()),
|
|
LAUNCH_ADJACENT ("FLAG_ACTIVITY_LAUNCH_ADJACENT", setOf(MULTIPLE_TASK), emptySet(),
|
|
setOf(NEW_TASK)),
|
|
NO_ANIMATION ("FLAG_ACTIVITY_NO_ANIMATION", emptySet(), emptySet(), emptySet()),
|
|
NO_HISTORY ("FLAG_ACTIVITY_NO_HISTORY", emptySet(), emptySet(), emptySet()),
|
|
NO_USER_ACTION ("FLAG_ACTIVITY_NO_USER_ACTION", emptySet(), emptySet(), emptySet()),
|
|
PREVIOUS_IS_TOP ("FLAG_ACTIVITY_PREVIOUS_IS_TOP", emptySet(), emptySet(), emptySet()),
|
|
REORDER_TO_FRONT ("FLAG_ACTIVITY_REORDER_TO_FRONT", emptySet(), setOf(CLEAR_TOP), emptySet()),
|
|
RESET_TASK_IF_NEEDED ("FLAG_ACTIVITY_RESET_TASK_IF_NEEDED", emptySet(), emptySet(), emptySet()),
|
|
TASK_ON_HOME ("FLAG_ACTIVITY_TASK_ON_HOME", emptySet(), emptySet(), setOf(NEW_TASK));
|
|
|
|
public String name;
|
|
private Set<IntentFlag> mComplements = new HashSet<>();
|
|
private Set<IntentFlag> mConflicts = new HashSet<>();
|
|
private Set<IntentFlag> mRequests = new HashSet<>();
|
|
|
|
IntentFlag(String name, Set<IntentFlag> complements, Set<IntentFlag> conflicts,
|
|
Set<IntentFlag> requests) {
|
|
this.name = name;
|
|
this.mComplements = complements;
|
|
this.mConflicts = conflicts;
|
|
this.mRequests = requests;
|
|
}
|
|
|
|
/**
|
|
* @return A set of flags that complement the action of this flag.
|
|
*/
|
|
public Set<IntentFlag> getComplements() {
|
|
return mComplements;
|
|
}
|
|
|
|
/**
|
|
* @return A set of flags that conflict with the action of this flag.
|
|
*/
|
|
public Set<IntentFlag> getConflicts() {
|
|
return mConflicts;
|
|
}
|
|
|
|
/**
|
|
* @return A set of flags that are necessary for the action of this flag.
|
|
*/
|
|
public Set<IntentFlag> getRequests() {
|
|
return mRequests;
|
|
}
|
|
|
|
public String getName() {
|
|
return name;
|
|
}
|
|
|
|
/**
|
|
* Convenience method to create a set of intent flags.
|
|
*/
|
|
protected static Set<IntentFlag> setOf(IntentFlag... flags) {
|
|
return Arrays.stream(flags).collect(Collectors.toSet());
|
|
}
|
|
}
|
|
|