TunerInputInfoUtils.java revision 65fda1eaa94968bb55d5ded10dcb0b3f37fb05f2
165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko/*
265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Copyright (C) 2016 The Android Open Source Project
365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko *
465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Licensed under the Apache License, Version 2.0 (the "License");
565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * you may not use this file except in compliance with the License.
665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * You may obtain a copy of the License at
765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko *
865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko *      http://www.apache.org/licenses/LICENSE-2.0
965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko *
1065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Unless required by applicable law or agreed to in writing, software
1165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * distributed under the License is distributed on an "AS IS" BASIS,
1265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * See the License for the specific language governing permissions and
1465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * limitations under the License.
1565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko */
1665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
1765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkopackage com.android.tv.tuner.util;
1865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
1965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.annotation.TargetApi;
2065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.content.ComponentName;
2165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.content.Context;
2265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.media.tv.TvInputInfo;
2365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.media.tv.TvInputManager;
2465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.os.Build;
2565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.support.annotation.Nullable;
2665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.support.v4.os.BuildCompat;
2765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport android.util.Log;
2865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
2965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport com.android.tv.common.feature.CommonFeatures;
3065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport com.android.tv.tuner.R;
3165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport com.android.tv.tuner.TunerHal;
3265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkoimport com.android.tv.tuner.tvinput.TunerTvInputService;
3365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
3465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko/**
3565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko * Utility class for providing tuner input info.
3665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko */
3765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalkopublic class TunerInputInfoUtils {
3865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    private static final String TAG = "TunerInputInfoUtils";
3965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    private static final boolean DEBUG = false;
4065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
4165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    /**
4265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     * Builds tuner input's info.
4365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     */
4465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    @Nullable
4565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    @TargetApi(Build.VERSION_CODES.N)
4665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    public static TvInputInfo buildTunerInputInfo(Context context, boolean fromBuiltInTuner) {
4765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        int numOfDevices = TunerHal.getTunerCount(context);
4865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        if (numOfDevices == 0) {
4965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            return null;
5065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        }
5165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        TvInputInfo.Builder builder = new TvInputInfo.Builder(context, new ComponentName(context,
5265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                TunerTvInputService.class));
5365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        if (fromBuiltInTuner) {
5465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            builder.setLabel(R.string.bt_app_name);
5565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        } else {
5665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            builder.setLabel(R.string.ut_app_name);
5765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        }
5865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        try {
5965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            return builder.setCanRecord(CommonFeatures.DVR.isEnabled(context))
6065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                    .setTunerCount(numOfDevices)
6165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                    .build();
6265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        } catch (NullPointerException e) {
6365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            // TunerTvInputService is not enabled.
6465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            return null;
6565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        }
6665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    }
6765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
6865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    /**
6965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     * Updates tuner input's info.
7065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     *
7165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     * @param context {@link Context} instance
7265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     */
7365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    public static void updateTunerInputInfo(Context context) {
7465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        if (BuildCompat.isAtLeastN()) {
7565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            if (DEBUG) Log.d(TAG, "updateTunerInputInfo()");
7665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            TvInputInfo info = buildTunerInputInfo(context, isBuiltInTuner(context));
7765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            if (info != null) {
7865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                ((TvInputManager) context.getSystemService(Context.TV_INPUT_SERVICE))
7965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                        .updateTvInputInfo(info);
8065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                if (DEBUG) {
8165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                    Log.d(TAG, "TvInputInfo [" + info.loadLabel(context)
8265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                            + "] updated: " + info.toString());
8365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                }
8465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            } else {
8565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                if (DEBUG) {
8665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                    Log.d(TAG, "Updating tuner input's info failed. Input is not ready yet.");
8765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko                }
8865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko            }
8965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        }
9065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    }
9165fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko
9265fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    /**
9365fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     * Returns if the current tuner service is for a built-in tuner.
9465fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     *
9565fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     * @param context {@link Context} instance
9665fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko     */
9765fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    public static boolean isBuiltInTuner(Context context) {
9865fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko        return TunerHal.getTunerType(context) == TunerHal.TUNER_TYPE_BUILT_IN;
9965fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko    }
10065fda1eaa94968bb55d5ded10dcb0b3f37fb05f2Nick Chalko}
101