aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/TvApplication.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/TvApplication.java')
-rw-r--r--src/com/android/tv/TvApplication.java453
1 files changed, 174 insertions, 279 deletions
diff --git a/src/com/android/tv/TvApplication.java b/src/com/android/tv/TvApplication.java
index 0c7c0fd1..826317b9 100644
--- a/src/com/android/tv/TvApplication.java
+++ b/src/com/android/tv/TvApplication.java
@@ -18,11 +18,9 @@ package com.android.tv;
import android.annotation.TargetApi;
import android.app.Activity;
-import android.app.Application;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
-import android.content.IntentFilter;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager;
@@ -30,32 +28,25 @@ import android.media.tv.TvContract;
import android.media.tv.TvInputInfo;
import android.media.tv.TvInputManager;
import android.media.tv.TvInputManager.TvInputCallback;
-import android.os.AsyncTask;
import android.os.Build;
import android.os.Bundle;
-import android.os.StrictMode;
import android.support.annotation.Nullable;
-import android.support.annotation.VisibleForTesting;
import android.text.TextUtils;
import android.util.Log;
import android.view.KeyEvent;
-
-import com.android.tv.analytics.Analytics;
-import com.android.tv.analytics.StubAnalytics;
-import com.android.tv.analytics.StubAnalytics;
-import com.android.tv.analytics.Tracker;
-import com.android.tv.common.BuildConfig;
-import com.android.tv.common.SharedPreferencesUtils;
-import com.android.tv.common.SoftPreconditions;
-import com.android.tv.common.TvCommonUtils;
+import com.android.tv.common.BaseApplication;
+import com.android.tv.common.concurrent.NamedThreadFactory;
import com.android.tv.common.feature.CommonFeatures;
+import com.android.tv.common.recording.RecordingStorageStatusManager;
import com.android.tv.common.ui.setup.animation.SetupAnimationHelper;
-import com.android.tv.config.DefaultConfigManager;
-import com.android.tv.config.RemoteConfig;
+import com.android.tv.common.util.Clock;
+import com.android.tv.common.util.Debug;
+import com.android.tv.common.util.SharedPreferencesUtils;
import com.android.tv.data.ChannelDataManager;
import com.android.tv.data.PreviewDataManager;
import com.android.tv.data.ProgramDataManager;
import com.android.tv.data.epg.EpgFetcher;
+import com.android.tv.data.epg.EpgFetcherImpl;
import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrDataManagerImpl;
import com.android.tv.dvr.DvrManager;
@@ -63,93 +54,81 @@ import com.android.tv.dvr.DvrScheduleManager;
import com.android.tv.dvr.DvrStorageStatusManager;
import com.android.tv.dvr.DvrWatchedPositionManager;
import com.android.tv.dvr.recorder.RecordingScheduler;
-import com.android.tv.perf.EventNames;
-import com.android.tv.perf.PerformanceMonitor;
-import com.android.tv.perf.StubPerformanceMonitor;
-import com.android.tv.perf.TimerEvent;
+import com.android.tv.dvr.ui.browse.DvrBrowseActivity;
import com.android.tv.recommendation.ChannelPreviewUpdater;
import com.android.tv.recommendation.RecordedProgramPreviewUpdater;
import com.android.tv.tuner.TunerInputController;
-import com.android.tv.tuner.TunerPreferences;
-import com.android.tv.tuner.tvinput.TunerTvInputService;
import com.android.tv.tuner.util.TunerInputInfoUtils;
-import com.android.tv.util.AccountHelper;
-import com.android.tv.util.Clock;
-import com.android.tv.util.Debug;
-import com.android.tv.util.PermissionUtils;
import com.android.tv.util.SetupUtils;
-import com.android.tv.util.SystemProperties;
import com.android.tv.util.TvInputManagerHelper;
import com.android.tv.util.Utils;
-
import java.util.List;
+import java.util.concurrent.Executor;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
-public class TvApplication extends Application implements ApplicationSingletons {
+/**
+ * Live TV application.
+ *
+ * <p>This includes all the Google specific hooks.
+ */
+public abstract class TvApplication extends BaseApplication implements TvSingletons, Starter {
private static final String TAG = "TvApplication";
private static final boolean DEBUG = false;
- private static final TimerEvent sAppStartTimer = StubPerformanceMonitor.startBootstrapTimer();
- /**
- * An instance of {@link ApplicationSingletons}. Note that this can be set directly only for the
- * test purpose.
- */
- @VisibleForTesting
- public static ApplicationSingletons sAppSingletons;
+ /** Namespace for LiveChannels configs. LiveChannels configs are kept in piper. */
+ public static final String CONFIGNS_P4 = "configns:p4";
/**
- * Broadcast Action: The user has updated LC to a new version that supports tuner input.
- * {@link com.android.tv.tuner.TunerInputController} will recevice this intent to check
- * the existence of tuner input when the new version is first launched.
+ * Broadcast Action: The user has updated LC to a new version that supports tuner input. {@link
+ * TunerInputController} will receive this intent to check the existence of tuner input when the
+ * new version is first launched.
*/
public static final String ACTION_APPLICATION_FIRST_LAUNCHED =
- "com.android.tv.action.APPLICATION_FIRST_LAUNCHED";
+ " com.android.tv.action.APPLICATION_FIRST_LAUNCHED";
+
private static final String PREFERENCE_IS_FIRST_LAUNCH = "is_first_launch";
- private RemoteConfig mRemoteConfig;
+ private static final NamedThreadFactory THREAD_FACTORY = new NamedThreadFactory("tv-app-db");
+ private static final ExecutorService DB_EXECUTOR =
+ Executors.newSingleThreadExecutor(THREAD_FACTORY);
+
private String mVersionName = "";
private final MainActivityWrapper mMainActivityWrapper = new MainActivityWrapper();
private SelectInputActivity mSelectInputActivity;
- private Analytics mAnalytics;
- private Tracker mTracker;
- private TvInputManagerHelper mTvInputManagerHelper;
private ChannelDataManager mChannelDataManager;
private volatile ProgramDataManager mProgramDataManager;
private PreviewDataManager mPreviewDataManager;
private DvrManager mDvrManager;
private DvrScheduleManager mDvrScheduleManager;
private DvrDataManager mDvrDataManager;
- private DvrStorageStatusManager mDvrStorageStatusManager;
private DvrWatchedPositionManager mDvrWatchedPositionManager;
private RecordingScheduler mRecordingScheduler;
- @Nullable
- private InputSessionManager mInputSessionManager;
- private AccountHelper mAccountHelper;
+ private RecordingStorageStatusManager mDvrStorageStatusManager;
+ @Nullable private InputSessionManager mInputSessionManager;
+ // STOP-SHIP: Remove this variable when Tuner Process is split to another application.
// When this variable is null, we don't know in which process TvApplication runs.
private Boolean mRunningInMainProcess;
- private PerformanceMonitor mPerformanceMonitor;
+ private TvInputManagerHelper mTvInputManagerHelper;
+ private boolean mStarted;
+ private EpgFetcher mEpgFetcher;
+ private TunerInputController mTunerInputController;
@Override
public void onCreate() {
super.onCreate();
- if (!PermissionUtils.hasInternet(this)) {
- // When an isolated process starts, just skip all the initialization.
- return;
- }
- Debug.getTimer(Debug.TAG_START_UP_TIMER).start();
- Debug.getTimer(Debug.TAG_START_UP_TIMER).log("Start TvApplication.onCreate");
- SharedPreferencesUtils.initialize(this, new Runnable() {
- @Override
- public void run() {
- if (mRunningInMainProcess != null && mRunningInMainProcess) {
- checkTunerServiceOnFirstLaunch();
- }
- }
- });
- // TunerPreferences is used to enable/disable the tuner input even when TUNER feature is
- // disabled.
- TunerPreferences.initialize(this);
+ SharedPreferencesUtils.initialize(
+ this,
+ new Runnable() {
+ @Override
+ public void run() {
+ if (mRunningInMainProcess != null && mRunningInMainProcess) {
+ checkTunerServiceOnFirstLaunch();
+ }
+ }
+ });
try {
PackageInfo pInfo = getPackageManager().getPackageInfo(getPackageName(), 0);
mVersionName = pInfo.versionName;
@@ -159,73 +138,47 @@ public class TvApplication extends Application implements ApplicationSingletons
}
Log.i(TAG, "Starting Live TV " + getVersionName());
- // Only set StrictMode for ENG builds because the build server only produces userdebug
- // builds.
- if (BuildConfig.ENG && SystemProperties.ALLOW_STRICT_MODE.getValue()) {
- StrictMode.ThreadPolicy.Builder threadPolicyBuilder =
- new StrictMode.ThreadPolicy.Builder().detectAll().penaltyLog();
- StrictMode.VmPolicy.Builder vmPolicyBuilder =
- new StrictMode.VmPolicy.Builder().detectAll().penaltyDeath();
- if (!TvCommonUtils.isRunningInTest()) {
- threadPolicyBuilder.penaltyDialog();
- }
- StrictMode.setThreadPolicy(threadPolicyBuilder.build());
- StrictMode.setVmPolicy(vmPolicyBuilder.build());
- }
- if (BuildConfig.ENG && !SystemProperties.ALLOW_ANALYTICS_IN_ENG.getValue()) {
- mAnalytics = StubAnalytics.getInstance(this);
- } else {
- mAnalytics = StubAnalytics.getInstance(this);
- }
- mTracker = mAnalytics.getDefaultTracker();
- getTvInputManagerHelper();
// In SetupFragment, transitions are set in the constructor. Because the fragment can be
// created in Activity.onCreate() by the framework, SetupAnimationHelper should be
// initialized here before Activity.onCreate() is called.
+ mEpgFetcher = EpgFetcherImpl.create(this);
SetupAnimationHelper.initialize(this);
-
+ getTvInputManagerHelper();
Log.i(TAG, "Started Live TV " + mVersionName);
Debug.getTimer(Debug.TAG_START_UP_TIMER).log("finish TvApplication.onCreate");
- getPerformanceMonitor().stopTimer(sAppStartTimer, EventNames.APPLICATION_ONCREATE);
}
- private void setCurrentRunningProcess(boolean isMainProcess) {
- if (mRunningInMainProcess != null) {
- SoftPreconditions.checkState(isMainProcess == mRunningInMainProcess);
+ /** Initializes application. It is a noop if called twice. */
+ @Override
+ public void start() {
+ if (mStarted) {
return;
}
- Debug.getTimer(Debug.TAG_START_UP_TIMER).log(
- "start TvApplication.setCurrentRunningProcess");
- mRunningInMainProcess = isMainProcess;
- if (CommonFeatures.DVR.isEnabled(this)) {
- mDvrStorageStatusManager = new DvrStorageStatusManager(this, mRunningInMainProcess);
- }
- new AsyncTask<Void, Void, Void>() {
- @Override
- protected Void doInBackground(Void... params) {
- // Fetch remote config
- getRemoteConfig().fetch(null);
- return null;
- }
- }.execute();
+ mStarted = true;
+ mRunningInMainProcess = true;
+ Debug.getTimer(Debug.TAG_START_UP_TIMER).log("start TvApplication.start");
if (mRunningInMainProcess) {
- getTvInputManagerHelper().addCallback(new TvInputCallback() {
- @Override
- public void onInputAdded(String inputId) {
- if (Features.TUNER.isEnabled(TvApplication.this) && TextUtils.equals(inputId,
- TunerTvInputService.getInputId(TvApplication.this))) {
- TunerInputInfoUtils.updateTunerInputInfo(TvApplication.this);
- }
- handleInputCountChanged();
- }
-
- @Override
- public void onInputRemoved(String inputId) {
- handleInputCountChanged();
- }
- });
- if (Features.TUNER.isEnabled(this)) {
+ getTvInputManagerHelper()
+ .addCallback(
+ new TvInputCallback() {
+ @Override
+ public void onInputAdded(String inputId) {
+ if (TvFeatures.TUNER.isEnabled(TvApplication.this)
+ && TextUtils.equals(
+ inputId, getEmbeddedTunerInputId())) {
+ TunerInputInfoUtils.updateTunerInputInfo(
+ TvApplication.this);
+ }
+ handleInputCountChanged();
+ }
+
+ @Override
+ public void onInputRemoved(String inputId) {
+ handleInputCountChanged();
+ }
+ });
+ if (TvFeatures.TUNER.isEnabled(this)) {
// If the tuner input service is added before the app is started, we need to
// handle it here.
TunerInputInfoUtils.updateTunerInputInfo(TvApplication.this);
@@ -235,58 +188,61 @@ public class TvApplication extends Application implements ApplicationSingletons
mDvrManager = new DvrManager(this);
mRecordingScheduler = RecordingScheduler.createScheduler(this);
}
- EpgFetcher.getInstance(this).startRoutineService();
+ mEpgFetcher.startRoutineService();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
ChannelPreviewUpdater.getInstance(this).startRoutineService();
RecordedProgramPreviewUpdater.getInstance(this)
.updatePreviewDataForRecordedPrograms();
}
}
- Debug.getTimer(Debug.TAG_START_UP_TIMER).log(
- "finish TvApplication.setCurrentRunningProcess");
+ Debug.getTimer(Debug.TAG_START_UP_TIMER).log("finish TvApplication.start");
}
private void checkTunerServiceOnFirstLaunch() {
- SharedPreferences sharedPreferences = this.getSharedPreferences(
- SharedPreferencesUtils.SHARED_PREF_FEATURES, Context.MODE_PRIVATE);
+ SharedPreferences sharedPreferences =
+ this.getSharedPreferences(
+ SharedPreferencesUtils.SHARED_PREF_FEATURES, Context.MODE_PRIVATE);
boolean isFirstLaunch = sharedPreferences.getBoolean(PREFERENCE_IS_FIRST_LAUNCH, true);
if (isFirstLaunch) {
if (DEBUG) Log.d(TAG, "Congratulations, it's the first launch!");
- TunerInputController.onCheckingUsbTunerStatus(this, ACTION_APPLICATION_FIRST_LAUNCHED);
+ getTunerInputController()
+ .onCheckingUsbTunerStatus(this, ACTION_APPLICATION_FIRST_LAUNCHED);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(PREFERENCE_IS_FIRST_LAUNCH, false);
editor.apply();
}
}
- /**
- * Returns the {@link DvrManager}.
- */
+ @Override
+ public EpgFetcher getEpgFetcher() {
+ return mEpgFetcher;
+ }
+
+ @Override
+ public synchronized SetupUtils getSetupUtils() {
+ return SetupUtils.createForTvSingletons(this);
+ }
+
+ /** Returns the {@link DvrManager}. */
@Override
public DvrManager getDvrManager() {
return mDvrManager;
}
- /**
- * Returns the {@link DvrScheduleManager}.
- */
+ /** Returns the {@link DvrScheduleManager}. */
@Override
public DvrScheduleManager getDvrScheduleManager() {
return mDvrScheduleManager;
}
- /**
- * Returns the {@link RecordingScheduler}.
- */
+ /** Returns the {@link RecordingScheduler}. */
@Override
@Nullable
public RecordingScheduler getRecordingScheduler() {
return mRecordingScheduler;
}
- /**
- * Returns the {@link DvrWatchedPositionManager}.
- */
+ /** Returns the {@link DvrWatchedPositionManager}. */
@Override
public DvrWatchedPositionManager getDvrWatchedPositionManager() {
if (mDvrWatchedPositionManager == null) {
@@ -304,25 +260,7 @@ public class TvApplication extends Application implements ApplicationSingletons
return mInputSessionManager;
}
- /**
- * Returns the {@link Analytics}.
- */
- @Override
- public Analytics getAnalytics() {
- return mAnalytics;
- }
-
- /**
- * Returns the default tracker.
- */
- @Override
- public Tracker getTracker() {
- return mTracker;
- }
-
- /**
- * Returns {@link ChannelDataManager}.
- */
+ /** Returns {@link ChannelDataManager}. */
@Override
public ChannelDataManager getChannelDataManager() {
if (mChannelDataManager == null) {
@@ -337,23 +275,22 @@ public class TvApplication extends Application implements ApplicationSingletons
return mChannelDataManager != null && mChannelDataManager.isDbLoadFinished();
}
- /**
- * Returns {@link ProgramDataManager}.
- */
+ /** Returns {@link ProgramDataManager}. */
@Override
public ProgramDataManager getProgramDataManager() {
if (mProgramDataManager != null) {
return mProgramDataManager;
}
- Utils.runInMainThreadAndWait(new Runnable() {
- @Override
- public void run() {
- if (mProgramDataManager == null) {
- mProgramDataManager = new ProgramDataManager(TvApplication.this);
- mProgramDataManager.start();
- }
- }
- });
+ Utils.runInMainThreadAndWait(
+ new Runnable() {
+ @Override
+ public void run() {
+ if (mProgramDataManager == null) {
+ mProgramDataManager = new ProgramDataManager(TvApplication.this);
+ mProgramDataManager.start();
+ }
+ }
+ });
return mProgramDataManager;
}
@@ -362,9 +299,7 @@ public class TvApplication extends Application implements ApplicationSingletons
return mProgramDataManager != null && mProgramDataManager.isCurrentProgramsLoadFinished();
}
- /**
- * Returns {@link PreviewDataManager}.
- */
+ /** Returns {@link PreviewDataManager}. */
@TargetApi(Build.VERSION_CODES.O)
@Override
public PreviewDataManager getPreviewDataManager() {
@@ -375,9 +310,7 @@ public class TvApplication extends Application implements ApplicationSingletons
return mPreviewDataManager;
}
- /**
- * Returns {@link DvrDataManager}.
- */
+ /** Returns {@link DvrDataManager}. */
@TargetApi(Build.VERSION_CODES.N)
@Override
public DvrDataManager getDvrDataManager() {
@@ -389,53 +322,39 @@ public class TvApplication extends Application implements ApplicationSingletons
return mDvrDataManager;
}
- /**
- * Returns {@link DvrStorageStatusManager}.
- */
- @TargetApi(Build.VERSION_CODES.N)
- @Override
- public DvrStorageStatusManager getDvrStorageStatusManager() {
- return mDvrStorageStatusManager;
- }
-
- /**
- * Returns {@link TvInputManagerHelper}.
- */
@Override
- public TvInputManagerHelper getTvInputManagerHelper() {
- if (mTvInputManagerHelper == null) {
- mTvInputManagerHelper = new TvInputManagerHelper(this);
- mTvInputManagerHelper.start();
+ @TargetApi(Build.VERSION_CODES.N)
+ public RecordingStorageStatusManager getRecordingStorageStatusManager() {
+ if (mDvrStorageStatusManager == null) {
+ mDvrStorageStatusManager = new DvrStorageStatusManager(this);
}
- return mTvInputManagerHelper;
+ return mDvrStorageStatusManager;
}
- /**
- * Returns the main activity information.
- */
+ /** Returns the main activity information. */
@Override
public MainActivityWrapper getMainActivityWrapper() {
return mMainActivityWrapper;
}
- /**
- * Returns the {@link AccountHelper}.
- */
+ /** Returns {@link TvInputManagerHelper}. */
@Override
- public AccountHelper getAccountHelper() {
- if (mAccountHelper == null) {
- mAccountHelper = new AccountHelper(getApplicationContext());
+ public TvInputManagerHelper getTvInputManagerHelper() {
+ if (mTvInputManagerHelper == null) {
+ mTvInputManagerHelper = new TvInputManagerHelper(this);
+ mTvInputManagerHelper.start();
}
- return mAccountHelper;
+ return mTvInputManagerHelper;
}
@Override
- public RemoteConfig getRemoteConfig() {
- if (mRemoteConfig == null) {
- // No need to synchronize this, it does not hurt to create two and throw one away.
- mRemoteConfig = DefaultConfigManager.createInstance(this).getRemoteConfig();
+ public synchronized TunerInputController getTunerInputController() {
+ if (mTunerInputController == null) {
+ mTunerInputController =
+ new TunerInputController(
+ ComponentName.unflattenFromString(getEmbeddedTunerInputId()));
}
- return mRemoteConfig;
+ return mTunerInputController;
}
@Override
@@ -443,17 +362,9 @@ public class TvApplication extends Application implements ApplicationSingletons
return mRunningInMainProcess != null && mRunningInMainProcess;
}
- @Override
- public PerformanceMonitor getPerformanceMonitor() {
- if (mPerformanceMonitor == null) {
- mPerformanceMonitor = StubPerformanceMonitor.initialize(this);
- }
- return mPerformanceMonitor;
- }
-
/**
- * SelectInputActivity is set in {@link SelectInputActivity#onCreate} and cleared in
- * {@link SelectInputActivity#onDestroy}.
+ * SelectInputActivity is set in {@link SelectInputActivity#onCreate} and cleared in {@link
+ * SelectInputActivity#onDestroy}.
*/
public void setSelectInputActivity(SelectInputActivity activity) {
mSelectInputActivity = activity;
@@ -467,18 +378,19 @@ public class TvApplication extends Application implements ApplicationSingletons
}
}
- /**
- * Handles the global key KEYCODE_TV.
- */
+ /** Handles the global key KEYCODE_TV. */
public void handleTvKey() {
if (!mMainActivityWrapper.isResumed()) {
startMainActivity(null);
}
}
- /**
- * Handles the global key KEYCODE_TV_INPUT.
- */
+ /** Handles the global key KEYCODE_DVR. */
+ public void handleDvrKey() {
+ startActivity(new Intent(this, DvrBrowseActivity.class));
+ }
+
+ /** Handles the global key KEYCODE_TV_INPUT. */
public void handleTvInputKey() {
TvInputManager tvInputManager = (TvInputManager) getSystemService(Context.TV_INPUT_SERVICE);
List<TvInputInfo> tvInputs = tvInputManager.getTvInputList();
@@ -497,22 +409,25 @@ public class TvApplication extends Application implements ApplicationSingletons
if (inputCount < 2) {
return;
}
- Activity activityToHandle = mMainActivityWrapper.isResumed()
- ? mMainActivityWrapper.getMainActivity() : mSelectInputActivity;
+ Activity activityToHandle =
+ mMainActivityWrapper.isResumed()
+ ? mMainActivityWrapper.getMainActivity()
+ : mSelectInputActivity;
if (activityToHandle != null) {
// If startActivity is called, MainActivity.onPause is unnecessarily called. To
// prevent it, MainActivity.dispatchKeyEvent is directly called.
activityToHandle.dispatchKeyEvent(
new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_TV_INPUT));
- activityToHandle.dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_UP,
- KeyEvent.KEYCODE_TV_INPUT));
+ activityToHandle.dispatchKeyEvent(
+ new KeyEvent(KeyEvent.ACTION_UP, KeyEvent.KEYCODE_TV_INPUT));
} else if (mMainActivityWrapper.isStarted()) {
Bundle extras = new Bundle();
extras.putString(Utils.EXTRA_KEY_ACTION, Utils.EXTRA_ACTION_SHOW_TV_INPUT);
startMainActivity(extras);
} else {
- startActivity(new Intent(this, SelectInputActivity.class).setFlags(
- Intent.FLAG_ACTIVITY_NEW_TASK));
+ startActivity(
+ new Intent(this, SelectInputActivity.class)
+ .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK));
}
}
@@ -520,8 +435,8 @@ public class TvApplication extends Application implements ApplicationSingletons
// The use of FLAG_ACTIVITY_NEW_TASK enables arbitrary applications to access the intent
// sent to the root activity. Having said that, we should be fine here since such an intent
// does not carry any important user data.
- Intent intent = new Intent(this, MainActivity.class)
- .setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
+ Intent intent =
+ new Intent(this, MainActivity.class).setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
if (extras != null) {
intent.putExtras(extras);
}
@@ -538,36 +453,39 @@ public class TvApplication extends Application implements ApplicationSingletons
}
/**
- * Checks the input counts and enable/disable TvActivity. Also updates the input list in
- * {@link SetupUtils}.
+ * Checks the input counts and enable/disable TvActivity. Also upda162 the input list in {@link
+ * SetupUtils}.
*/
+ @Override
public void handleInputCountChanged() {
handleInputCountChanged(false, false, false);
}
/**
- * Checks the input counts and enable/disable TvActivity. Also updates the input list in
- * {@link SetupUtils}.
+ * Checks the input counts and enable/disable TvActivity. Also updates the input list in {@link
+ * SetupUtils}.
*
- * @param calledByTunerServiceChanged true if it is called when TunerTvInputService
- * is enabled or disabled.
+ * @param calledByTunerServiceChanged true if it is called when BaseTunerTvInputService is
+ * enabled or disabled.
* @param tunerServiceEnabled it's available only when calledByTunerServiceChanged is true.
- * @param dontKillApp when TvActivity is enabled or disabled by this method, the app restarts
- * by default. But, if dontKillApp is true, the app won't restart.
+ * @param dontKillApp when TvActivity is enabled or disabled by this method, the app restarts by
+ * default. But, if dontKillApp is true, the app won't restart.
*/
- public void handleInputCountChanged(boolean calledByTunerServiceChanged,
- boolean tunerServiceEnabled, boolean dontKillApp) {
+ public void handleInputCountChanged(
+ boolean calledByTunerServiceChanged, boolean tunerServiceEnabled, boolean dontKillApp) {
TvInputManager inputManager = (TvInputManager) getSystemService(Context.TV_INPUT_SERVICE);
- boolean enable = (calledByTunerServiceChanged && tunerServiceEnabled)
- || Features.UNHIDE.isEnabled(TvApplication.this);
+ boolean enable =
+ (calledByTunerServiceChanged && tunerServiceEnabled)
+ || TvFeatures.UNHIDE.isEnabled(TvApplication.this);
if (!enable) {
List<TvInputInfo> inputs = inputManager.getTvInputList();
boolean skipTunerInputCheck = false;
// Enable the TvActivity only if there is at least one tuner type input.
if (!skipTunerInputCheck) {
for (TvInputInfo input : inputs) {
- if (calledByTunerServiceChanged && !tunerServiceEnabled
- && TunerTvInputService.getInputId(this).equals(input.getId())) {
+ if (calledByTunerServiceChanged
+ && !tunerServiceEnabled
+ && getEmbeddedTunerInputId().equals(input.getId())) {
continue;
}
if (input.getType() == TvInputInfo.TYPE_TUNER) {
@@ -580,43 +498,20 @@ public class TvApplication extends Application implements ApplicationSingletons
}
PackageManager packageManager = getPackageManager();
ComponentName name = new ComponentName(this, TvActivity.class);
- int newState = enable ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED :
- PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
+ int newState =
+ enable
+ ? PackageManager.COMPONENT_ENABLED_STATE_ENABLED
+ : PackageManager.COMPONENT_ENABLED_STATE_DISABLED;
if (packageManager.getComponentEnabledSetting(name) != newState) {
- packageManager.setComponentEnabledSetting(name, newState,
- dontKillApp ? PackageManager.DONT_KILL_APP : 0);
+ packageManager.setComponentEnabledSetting(
+ name, newState, dontKillApp ? PackageManager.DONT_KILL_APP : 0);
Log.i(TAG, (enable ? "Un-hide" : "Hide") + " Live TV.");
}
- SetupUtils.getInstance(TvApplication.this).onInputListUpdated(inputManager);
- }
-
- /**
- * Returns the @{@link ApplicationSingletons} using the application context.
- */
- public static ApplicationSingletons getSingletons(Context context) {
- // No need to be "synchronized" because this doesn't create any instance.
- if (sAppSingletons == null) {
- sAppSingletons = (ApplicationSingletons) context.getApplicationContext();
- }
- return sAppSingletons;
+ getSetupUtils().onInputListUpdated(inputManager);
}
- /**
- * Sets true, if TvApplication is running on the main process. If TvApplication runs on
- * tuner process or other process, it sets false.
- *
- * Note: it should be called at the beginning of Service.onCreate Activity.onCreate, or
- * BroadcastReceiver.onCreate. When it is firstly called after launch, it runs process
- * specific initializations.
- */
- public static void setCurrentRunningProcess(Context context, boolean isMainProcess) {
- // TODO(b/63064354) TvApplication should not have to know if it is "the main process"
- if (context.getApplicationContext() instanceof TvApplication) {
- TvApplication tvApplication = (TvApplication) context.getApplicationContext();
- tvApplication.setCurrentRunningProcess(isMainProcess);
- } else {
- // Application context can be MockTvApplication.
- Log.w(TAG, "It is not a context of TvApplication");
- }
+ @Override
+ public Executor getDbExecutor() {
+ return DB_EXECUTOR;
}
}