aboutsummaryrefslogtreecommitdiff
path: root/src/com/android/tv/receiver
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/tv/receiver')
-rw-r--r--src/com/android/tv/receiver/BootCompletedReceiver.java27
-rw-r--r--src/com/android/tv/receiver/GlobalKeyReceiver.java52
-rw-r--r--src/com/android/tv/receiver/PackageIntentsReceiver.java12
3 files changed, 76 insertions, 15 deletions
diff --git a/src/com/android/tv/receiver/BootCompletedReceiver.java b/src/com/android/tv/receiver/BootCompletedReceiver.java
index 8d6c5a14..369e7d54 100644
--- a/src/com/android/tv/receiver/BootCompletedReceiver.java
+++ b/src/com/android/tv/receiver/BootCompletedReceiver.java
@@ -21,13 +21,15 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
+import android.os.Build;
import android.util.Log;
import com.android.tv.Features;
import com.android.tv.TvActivity;
import com.android.tv.TvApplication;
-import com.android.tv.common.feature.CommonFeatures;
-import com.android.tv.dvr.DvrRecordingService;
+import com.android.tv.dvr.recorder.DvrRecordingService;
+import com.android.tv.dvr.recorder.RecordingScheduler;
+import com.android.tv.recommendation.ChannelPreviewUpdater;
import com.android.tv.recommendation.NotificationService;
import com.android.tv.util.OnboardingUtils;
import com.android.tv.util.SetupUtils;
@@ -49,12 +51,20 @@ public class BootCompletedReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
+ if (!TvApplication.getSingletons(context).getTvInputManagerHelper().hasTvInputManager()) {
+ Log.wtf(TAG, "Stopping because device does not have a TvInputManager");
+ return;
+ }
if (DEBUG) Log.d(TAG, "boot completed " + intent);
TvApplication.setCurrentRunningProcess(context, true);
- // Start {@link NotificationService}.
- Intent notificationIntent = new Intent(context, NotificationService.class);
- notificationIntent.setAction(NotificationService.ACTION_SHOW_RECOMMENDATION);
- context.startService(notificationIntent);
+
+ if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
+ ChannelPreviewUpdater.getInstance(context).updatePreviewDataForChannelsImmediately();
+ } else {
+ Intent notificationIntent = new Intent(context, NotificationService.class);
+ notificationIntent.setAction(NotificationService.ACTION_SHOW_RECOMMENDATION);
+ context.startService(notificationIntent);
+ }
// Grant permission to already set up packages after the system has finished booting.
SetupUtils.grantEpgPermissionToSetUpPackages(context);
@@ -74,8 +84,9 @@ public class BootCompletedReceiver extends BroadcastReceiver {
}
}
- if (CommonFeatures.DVR.isEnabled(context)) {
- DvrRecordingService.startService(context);
+ RecordingScheduler scheduler = TvApplication.getSingletons(context).getRecordingScheduler();
+ if (scheduler != null) {
+ scheduler.updateAndStartServiceIfNeeded();
}
}
}
diff --git a/src/com/android/tv/receiver/GlobalKeyReceiver.java b/src/com/android/tv/receiver/GlobalKeyReceiver.java
index 8cd4fdf1..cc8e76c4 100644
--- a/src/com/android/tv/receiver/GlobalKeyReceiver.java
+++ b/src/com/android/tv/receiver/GlobalKeyReceiver.java
@@ -19,7 +19,8 @@ package com.android.tv.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
-import android.media.tv.TvContract;
+import android.os.AsyncTask;
+import android.provider.Settings;
import android.util.Log;
import android.view.KeyEvent;
@@ -31,27 +32,64 @@ import com.android.tv.TvApplication;
public class GlobalKeyReceiver extends BroadcastReceiver {
private static final boolean DEBUG = false;
private static final String TAG = "GlobalKeyReceiver";
+
private static final String ACTION_GLOBAL_BUTTON = "android.intent.action.GLOBAL_BUTTON";
+ // Settings.Secure.USER_SETUP_COMPLETE is hidden.
+ private static final String SETTINGS_USER_SETUP_COMPLETE = "user_setup_complete";
+
+ private static long sLastEventTime;
+ private static boolean sUserSetupComplete;
@Override
public void onReceive(Context context, Intent intent) {
+ if (!TvApplication.getSingletons(context).getTvInputManagerHelper().hasTvInputManager()) {
+ Log.wtf(TAG, "Stopping because device does not have a TvInputManager");
+ return;
+ }
TvApplication.setCurrentRunningProcess(context, true);
+ Context appContext = context.getApplicationContext();
+ if (DEBUG) Log.d(TAG, "onReceive: " + intent);
+ if (sUserSetupComplete) {
+ handleIntent(appContext, intent);
+ } else {
+ new AsyncTask<Void, Void, Boolean>() {
+ @Override
+ protected Boolean doInBackground(Void... params) {
+ return Settings.Secure.getInt(appContext.getContentResolver(),
+ SETTINGS_USER_SETUP_COMPLETE, 0) != 0;
+ }
+
+ @Override
+ protected void onPostExecute(Boolean setupComplete) {
+ if (DEBUG) Log.d(TAG, "Is setup complete: " + setupComplete);
+ sUserSetupComplete = setupComplete;
+ if (sUserSetupComplete) {
+ handleIntent(appContext, intent);
+ }
+ }
+ }.execute();
+ }
+ }
+
+ private void handleIntent(Context appContext, Intent intent) {
if (ACTION_GLOBAL_BUTTON.equals(intent.getAction())) {
KeyEvent event = intent.getParcelableExtra(Intent.EXTRA_KEY_EVENT);
- if (DEBUG) Log.d(TAG, "onReceive: " + event);
+ if (DEBUG) Log.d(TAG, "handleIntent: " + event);
int keyCode = event.getKeyCode();
int action = event.getAction();
- if (action == KeyEvent.ACTION_UP) {
+ long eventTime = event.getEventTime();
+ if (action == KeyEvent.ACTION_UP && sLastEventTime != eventTime) {
+ // Workaround for b/23947504, the same key event may be sent twice, filter it.
+ sLastEventTime = eventTime;
switch (keyCode) {
case KeyEvent.KEYCODE_GUIDE:
- context.startActivity(
- new Intent(Intent.ACTION_VIEW, TvContract.Programs.CONTENT_URI));
+ ((TvApplication) appContext).handleGuideKey();
break;
case KeyEvent.KEYCODE_TV:
- ((TvApplication) context.getApplicationContext()).handleTvKey();
+ ((TvApplication) appContext).handleTvKey();
break;
case KeyEvent.KEYCODE_TV_INPUT:
- ((TvApplication) context.getApplicationContext()).handleTvInputKey();
+ ((TvApplication) appContext).handleTvInputKey();
break;
default:
// Do nothing
diff --git a/src/com/android/tv/receiver/PackageIntentsReceiver.java b/src/com/android/tv/receiver/PackageIntentsReceiver.java
index 26d000e7..124172f0 100644
--- a/src/com/android/tv/receiver/PackageIntentsReceiver.java
+++ b/src/com/android/tv/receiver/PackageIntentsReceiver.java
@@ -19,17 +19,29 @@ package com.android.tv.receiver;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
+import android.net.Uri;
+import android.util.Log;
import com.android.tv.TvApplication;
+import com.android.tv.util.Partner;
/**
* A class for handling the broadcast intents from PackageManager.
*/
public class PackageIntentsReceiver extends BroadcastReceiver {
+ private static final String TAG = "PackageIntentsReceiver";
@Override
public void onReceive(Context context, Intent intent) {
+ if (!TvApplication.getSingletons(context).getTvInputManagerHelper().hasTvInputManager()) {
+ Log.wtf(TAG, "Stopping because device does not have a TvInputManager");
+ return;
+ }
TvApplication.setCurrentRunningProcess(context, true);
((TvApplication) context.getApplicationContext()).handleInputCountChanged();
+
+ Uri uri = intent.getData();
+ final String packageName = (uri != null ? uri.getSchemeSpecificPart() : null);
+ Partner.reset(context, packageName);
}
}