/* * Copyright (C) 2013 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.android.tools.idea.rendering.multi; import com.google.common.collect.Lists; import com.google.common.collect.Sets; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import java.util.Collection; import java.util.Set; /** * The {@linkplain RenderPreviewMode} records what type of configurations to * render in the layout editor */ public enum RenderPreviewMode { /** * Generate a set of default previews with maximum variation */ DEFAULT, /** * Preview all the locales */ LOCALES, /** * Preview all the screen sizes */ SCREENS, /** * Preview layout as included in other layouts */ INCLUDES, /** * Preview all the variations of this layout */ VARIATIONS, /** * Show bi-directional (e.g. left to right and right to left) layouts */ RTL, /** * Show a manually configured set of previews */ CUSTOM, /** * Show the layout across major API levels. */ API_LEVELS, /** * No previews */ NONE; /** Gets the current render preview mode (across layouts and projects) */ @NotNull public static RenderPreviewMode getCurrent() { return ourCurrent; } /** Sets the current render preview mode (across layouts and projects). Not persisted. */ public static void setCurrent(@NotNull RenderPreviewMode current) { if (ourCurrent != current) { ourCurrent = current; ourDeletedIds = null; } } private static Collection<String> ourDeletedIds; /** * Returns true if the given id has been marked as deleted */ public static boolean isDeletedId(@Nullable String id) { return ourDeletedIds != null && id != null && ourDeletedIds.contains(id); } /** * Record the given preview id as deleted. This allows you to semi-persistently * delete for example a given locale or screen size, and as you switch to other * layouts (and the set of previews are updated for the new layout) the given * type of preview continues to stay hidden -- until you switch preview modes. */ public static void deleteId(@Nullable String id) { if (id != null) { if (ourDeletedIds == null) { ourDeletedIds = Sets.newHashSet(); } ourDeletedIds.add(id); } } private static RenderPreviewMode ourCurrent = NONE; /** * Returns true if this preview mode includes device frames around the layouts */ public boolean showsDeviceFrames() { return this == SCREENS; } }