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