14f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout/* 24f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * Copyright (C) 2014 The Android Open Source Project 34f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * 44f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except 54f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * in compliance with the License. You may obtain a copy of the License at 64f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * 74f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * http://www.apache.org/licenses/LICENSE-2.0 84f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * 94f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * Unless required by applicable law or agreed to in writing, software distributed under the License 104f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express 114f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * or implied. See the License for the specific language governing permissions and limitations under 124f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * the License. 134f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout */ 144f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stoutpackage android.support.v17.leanback.widget; 154f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout 164f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stoutimport android.graphics.Color; 174f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stoutimport android.graphics.drawable.ColorDrawable; 184f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stoutimport android.os.Build; 194f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stoutimport android.view.View; 204f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout 214f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout/** 224f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * Helper for setting rounded rectangle backgrounds on a view. 234f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout */ 244f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stoutfinal class RoundedRectHelper { 254f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout 264f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout private final static RoundedRectHelper sInstance = new RoundedRectHelper(); 274f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout private Impl mImpl; 284f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout 294f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout /** 304f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * Returns an instance of the helper. 314f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout */ 324f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout public static RoundedRectHelper getInstance() { 334f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout return sInstance; 344f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout } 354f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout 364f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout /** 374f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * Sets a rounded rectangle background on the given view, and clips the view to the 384f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * background. If clipping isn't supported on the android runtime, a simple rectangle 394f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * background is set instead. 404f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * 414f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * @param view The view to be modified 424f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * @param color The color of the background 434f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout */ 444f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout public void setRoundedRectBackground(View view, int color) { 454f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout mImpl.setRoundedRectBackground(view, color); 464f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout } 474f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout 484f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout /** 494f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * Clears the background of the view to transparent. 504f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * 514f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * @param view The view to be modified 524f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout */ 534f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout public void clearBackground(View view) { 544f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout mImpl.clearBackground(view); 554f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout } 564f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout 574f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout static interface Impl { 584f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout public void setRoundedRectBackground(View view, int color); 594f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout public void clearBackground(View view); 604f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout } 614f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout 624f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout /** 634f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * Implementation used prior to L. 644f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout */ 654f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout private static final class StubImpl implements Impl { 664f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout @Override 674f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout public void setRoundedRectBackground(View view, int color) { 684f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout // We could set a rounded rect background, but we don't 694f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout // because we can't do setClipToOutline. 704f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout // So just set a regular rectangle. 714f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout view.setBackgroundColor(color); 724f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout } 734f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout 744f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout @Override 754f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout public void clearBackground(View view) { 764f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout view.setBackground(null); 774f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout } 784f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout } 794f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout 804f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout /** 814f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout * Implementation used on api 21 (and above). 824f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout */ 834f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout private static final class Api21Impl implements Impl { 844f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout @Override 854f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout public void setRoundedRectBackground(View view, int color) { 864f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout RoundedRectHelperApi21.setRoundedRectBackground(view, color); 874f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout } 884f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout 894f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout @Override 904f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout public void clearBackground(View view) { 914f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout RoundedRectHelperApi21.clearBackground(view); 924f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout } 934f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout } 944f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout 954f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout private RoundedRectHelper() { 96a52784195525cdb1f2bb4d8dde1b8b314f480957Chet Haase if (Build.VERSION.SDK_INT >= 21) { 974f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout mImpl = new Api21Impl(); 984f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout } else { 994f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout mImpl = new StubImpl(); 1004f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout } 1014f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout } 1024f34a05cdf73b68c3b2eb8678f740ab15225126aCraig Stout} 103