1504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee/* 2816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko * Copyright (C) 2015 The Android Open Source Project 3504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee * 4504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee * Licensed under the Apache License, Version 2.0 (the "License"); 5504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee * you may not use this file except in compliance with the License. 6504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee * You may obtain a copy of the License at 7504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee * 8504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee * http://www.apache.org/licenses/LICENSE-2.0 9504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee * 10504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee * Unless required by applicable law or agreed to in writing, software 11504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee * distributed under the License is distributed on an "AS IS" BASIS, 12504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee * See the License for the specific language governing permissions and 14504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee * limitations under the License. 15504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee */ 16504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee 17944779887775bd950cf1abf348d2df461593f6abLive Channels Teampackage com.android.tv.testing.utils; 18504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee 195e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Leeimport android.content.ComponentName; 20816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.ContentResolver; 21504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Leeimport android.content.Context; 22633eb826b8c97731dfc5ef12c7bf78a63734275dNick Chalkoimport android.content.pm.PackageManager; 235e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Leeimport android.content.pm.ServiceInfo; 24816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalkoimport android.content.res.Resources; 255e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Leeimport android.media.tv.TvInputInfo; 265e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Leeimport android.media.tv.TvInputManager; 27504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Leeimport android.net.Uri; 287d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalkoimport android.util.Log; 29a1589bd48e05abbee991e0cdd27fa402a5dc5001Live Channels Teamimport com.android.tv.common.CommonConstants; 30944779887775bd950cf1abf348d2df461593f6abLive Channels Teamimport com.android.tv.common.util.CommonUtils; 31504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Leeimport java.io.IOException; 32504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Leeimport java.io.InputStream; 33504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Leeimport java.io.OutputStream; 347d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalkoimport java.text.SimpleDateFormat; 357d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalkoimport java.util.Date; 367d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalkoimport java.util.Locale; 377d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalkoimport java.util.Random; 38504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee 3907b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko/** 4007b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko * An utility class for testing. 4107b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko * 42944779887775bd950cf1abf348d2df461593f6abLive Channels Team * @see CommonUtils#isRunningInTest 4307b043dc3db83d6d20f0e8513b946830ab00e37bNick Chalko */ 447d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalkopublic final class Utils { 4595961816a768da387f0b5523cf4363ace2044089Nick Chalko private static final String TAG = "Utils"; 467d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko 477d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko private static final long DEFAULT_RANDOM_SEED = getSeed(); 487d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko 49816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko public static String getUriStringForResource(Context context, int resId) { 50816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko if (resId == 0) { 51816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return ""; 52504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee } 53816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko Resources res = context.getResources(); 54816a4be1a0f34f6a48877c8afd3dbbca19eac435Nick Chalko return new Uri.Builder() 5595961816a768da387f0b5523cf4363ace2044089Nick Chalko .scheme(ContentResolver.SCHEME_ANDROID_RESOURCE) 5695961816a768da387f0b5523cf4363ace2044089Nick Chalko .authority(res.getResourcePackageName(resId)) 5795961816a768da387f0b5523cf4363ace2044089Nick Chalko .path(res.getResourceTypeName(resId)) 5895961816a768da387f0b5523cf4363ace2044089Nick Chalko .appendPath(res.getResourceEntryName(resId)) 5995961816a768da387f0b5523cf4363ace2044089Nick Chalko .build() 6095961816a768da387f0b5523cf4363ace2044089Nick Chalko .toString(); 61504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee } 62504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee 63504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee public static void copy(InputStream is, OutputStream os) throws IOException { 64504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee byte[] buffer = new byte[1024]; 65504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee int len; 66504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee while ((len = is.read(buffer)) != -1) { 67504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee os.write(buffer, 0, len); 68504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee } 69504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee } 70504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee 715e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee public static String getServiceNameFromInputId(Context context, String inputId) { 725e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee TvInputManager tim = (TvInputManager) context.getSystemService(Context.TV_INPUT_SERVICE); 735e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee for (TvInputInfo info : tim.getTvInputList()) { 745e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee if (info.getId().equals(inputId)) { 755e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee return info.getServiceInfo().name; 765e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee } 775e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee } 78614b728890014324da71112d38e25a55f94b31e8Dongwon Kang return null; 795e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee } 805e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee 815e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee public static String getInputIdFromComponentName(Context context, ComponentName name) { 825e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee TvInputManager tim = (TvInputManager) context.getSystemService(Context.TV_INPUT_SERVICE); 835e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee for (TvInputInfo info : tim.getTvInputList()) { 845e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee ServiceInfo si = info.getServiceInfo(); 855e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee if (new ComponentName(si.packageName, si.name).equals(name)) { 865e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee return info.getId(); 875e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee } 885e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee } 89614b728890014324da71112d38e25a55f94b31e8Dongwon Kang return null; 905e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee } 915e91a958ffdfcae33dd0614fe683b64535d76e03Chulwoo Lee 927d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko /** 9395961816a768da387f0b5523cf4363ace2044089Nick Chalko * Return the Random class which is needed to make random data for testing. Default seed of the 9495961816a768da387f0b5523cf4363ace2044089Nick Chalko * random is today's date. 957d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko */ 967d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko public static Random createTestRandom() { 977d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko return new Random(DEFAULT_RANDOM_SEED); 987d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko } 997d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko 1007d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko private static long getSeed() { 1017d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko // Set random seed as the date to track failed test data easily. 1027d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko SimpleDateFormat dateFormat = new SimpleDateFormat("yyyyMMdd", Locale.getDefault()); 1037d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko String today = dateFormat.format(new Date()); 1047d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko Log.d(TAG, "Today's random seed is " + today); 1057d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko return Long.valueOf(today); 1067d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko } 1077d67089aa1e9aa2123c3cd2f386d7019a1544db1Nick Chalko 10895961816a768da387f0b5523cf4363ace2044089Nick Chalko /** Checks whether TvActivity is enabled or not. */ 109633eb826b8c97731dfc5ef12c7bf78a63734275dNick Chalko public static boolean isTvActivityEnabled(Context context) { 110633eb826b8c97731dfc5ef12c7bf78a63734275dNick Chalko PackageManager pm = context.getPackageManager(); 111944779887775bd950cf1abf348d2df461593f6abLive Channels Team ComponentName name = 112a1589bd48e05abbee991e0cdd27fa402a5dc5001Live Channels Team new ComponentName(CommonConstants.BASE_PACKAGE, "com.android.tv.TvActivity"); 113633eb826b8c97731dfc5ef12c7bf78a63734275dNick Chalko int enabled = pm.getComponentEnabledSetting(name); 114633eb826b8c97731dfc5ef12c7bf78a63734275dNick Chalko return enabled == PackageManager.COMPONENT_ENABLED_STATE_ENABLED 115633eb826b8c97731dfc5ef12c7bf78a63734275dNick Chalko || enabled == PackageManager.COMPONENT_ENABLED_STATE_DEFAULT; 116633eb826b8c97731dfc5ef12c7bf78a63734275dNick Chalko } 117944779887775bd950cf1abf348d2df461593f6abLive Channels Team 118944779887775bd950cf1abf348d2df461593f6abLive Channels Team private Utils() {} 119504eb8170dc9d5749ef1baec6a95f6a064fdb4f5Ji-Hwan Lee} 120