aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorLive Channels Team <no-reply@google.com>2018-01-16 13:03:26 -0800
committerNick Chalko <nchalko@google.com>2018-01-16 15:02:20 -0800
commitff75e39b569fb119c58a2b4f013d8a62cc725c75 (patch)
tree82c7b3e908473988f13c06e4fea09a66ab1c30ec /src
parent4a5144ac8c51c4d89d1359e13e37fcd7f928ed9a (diff)
downloadTV-ff75e39b569fb119c58a2b4f013d8a62cc725c75.tar.gz
Project import generated by Copybara.
PiperOrigin-RevId: 182099521 Change-Id: I213983755c98da36ab2cff3f7cfa494e1a1f082c
Diffstat (limited to 'src')
-rw-r--r--src/com/android/tv/MainActivity.java1
-rw-r--r--src/com/android/tv/SetupPassthroughActivity.java1
-rw-r--r--src/com/android/tv/TvFeatures.java1
-rw-r--r--src/com/android/tv/data/epg/EpgFetcherImpl.java43
-rw-r--r--src/com/android/tv/data/epg/EpgReader.java3
-rw-r--r--src/com/android/tv/guide/ProgramTableAdapter.java1
-rw-r--r--src/com/android/tv/onboarding/WelcomeFragment.java90
-rw-r--r--src/com/android/tv/receiver/PackageIntentsReceiver.java2
-rw-r--r--src/com/android/tv/tuner/TunerInputController.java2
-rw-r--r--src/com/android/tv/ui/sidepanel/DeveloperOptionFragment.java1
10 files changed, 125 insertions, 20 deletions
diff --git a/src/com/android/tv/MainActivity.java b/src/com/android/tv/MainActivity.java
index 17adeb7d..22ee9321 100644
--- a/src/com/android/tv/MainActivity.java
+++ b/src/com/android/tv/MainActivity.java
@@ -95,6 +95,7 @@ import com.android.tv.dvr.data.ScheduledRecording;
import com.android.tv.dvr.recorder.ConflictChecker;
import com.android.tv.dvr.ui.DvrStopRecordingFragment;
import com.android.tv.dvr.ui.DvrUiHelper;
+
import com.android.tv.menu.Menu;
import com.android.tv.onboarding.OnboardingActivity;
import com.android.tv.parental.ContentRatingsManager;
diff --git a/src/com/android/tv/SetupPassthroughActivity.java b/src/com/android/tv/SetupPassthroughActivity.java
index 3ca5be77..40d38118 100644
--- a/src/com/android/tv/SetupPassthroughActivity.java
+++ b/src/com/android/tv/SetupPassthroughActivity.java
@@ -33,6 +33,7 @@ import com.android.tv.data.ChannelDataManager;
import com.android.tv.data.ChannelDataManager.Listener;
import com.android.tv.data.epg.EpgFetcher;
import com.android.tv.data.epg.EpgInputWhiteList;
+
import com.android.tv.util.SetupUtils;
import com.android.tv.util.TvInputManagerHelper;
import com.android.tv.util.Utils;
diff --git a/src/com/android/tv/TvFeatures.java b/src/com/android/tv/TvFeatures.java
index 81cc576b..64141e8c 100644
--- a/src/com/android/tv/TvFeatures.java
+++ b/src/com/android/tv/TvFeatures.java
@@ -38,6 +38,7 @@ import com.android.tv.common.feature.TestableFeature;
import com.android.tv.common.util.PermissionUtils;
+
/**
* List of {@link Feature} for the Live TV App.
*
diff --git a/src/com/android/tv/data/epg/EpgFetcherImpl.java b/src/com/android/tv/data/epg/EpgFetcherImpl.java
index 59839593..fbbb0dda 100644
--- a/src/com/android/tv/data/epg/EpgFetcherImpl.java
+++ b/src/com/android/tv/data/epg/EpgFetcherImpl.java
@@ -54,6 +54,8 @@ import com.android.tv.data.ChannelDataManager;
import com.android.tv.data.ChannelLogoFetcher;
import com.android.tv.data.Lineup;
import com.android.tv.data.Program;
+
+
import com.android.tv.perf.EventNames;
import com.android.tv.perf.PerformanceMonitor;
import com.android.tv.perf.TimerEvent;
@@ -113,7 +115,6 @@ public class EpgFetcherImpl implements EpgFetcher {
private final ChannelDataManager mChannelDataManager;
private final EpgReader mEpgReader;
private final PerformanceMonitor mPerformanceMonitor;
- private final EpgInputWhiteList mEpgInputWhiteList;
private FetchAsyncTask mFetchTask;
private FetchDuringScanHandler mFetchDuringScanHandler;
private long mEpgTimeStamp;
@@ -135,7 +136,6 @@ public class EpgFetcherImpl implements EpgFetcher {
PerformanceMonitor performanceMonitor = tvSingletons.getPerformanceMonitor();
EpgReader epgReader = tvSingletons.providesEpgReader().get();
Clock clock = tvSingletons.getClock();
- EpgInputWhiteList epgInputWhiteList = new EpgInputWhiteList(tvSingletons.getRemoteConfig());
int routineIntervalMs =
(int)
RemoteConfigUtils.getRemoteConfig(
@@ -147,8 +147,8 @@ public class EpgFetcherImpl implements EpgFetcher {
epgReader,
performanceMonitor,
clock,
- routineIntervalMs,
- epgInputWhiteList);
+ routineIntervalMs
+ );
}
@VisibleForTesting
@@ -158,8 +158,8 @@ public class EpgFetcherImpl implements EpgFetcher {
EpgReader epgReader,
PerformanceMonitor performanceMonitor,
Clock clock,
- long routineIntervalMs,
- EpgInputWhiteList epgInputWhiteList) {
+ long routineIntervalMs
+ ) {
mContext = context;
mChannelDataManager = channelDataManager;
mEpgReader = epgReader;
@@ -169,7 +169,6 @@ public class EpgFetcherImpl implements EpgFetcher {
routineIntervalMs <= 0
? TimeUnit.HOURS.toMillis(DEFAULT_ROUTINE_INTERVAL_HOUR)
: TimeUnit.HOURS.toMillis(routineIntervalMs);
- mEpgInputWhiteList = epgInputWhiteList;
mEpgDataExpiredTimeLimitMs = routineIntervalMs * 2;
mFastFetchDurationSec = FAST_FETCH_DURATION_SEC + routineIntervalMs / 1000;
}
@@ -306,6 +305,7 @@ public class EpgFetcherImpl implements EpgFetcher {
}
@MainThread
+ @Override
public void stopFetchingJob() {
if (DEBUG) Log.d(TAG, "Try to stop routinely fetching job...");
if (mFetchTask != null) {
@@ -351,7 +351,6 @@ public class EpgFetcherImpl implements EpgFetcher {
if (DEBUG) Log.d(TAG, "Cannot start routine service: scanning channels.");
return false;
}
-
return true;
}
@@ -511,7 +510,6 @@ public class EpgFetcherImpl implements EpgFetcher {
return numbers.size();
}
-
@VisibleForTesting
class FetchAsyncTask extends AsyncTask<Void, Void, Integer> {
private final JobService mService;
@@ -539,18 +537,29 @@ public class EpgFetcherImpl implements EpgFetcher {
Integer builtInResult = fetchEpgForBuiltInTuner();
boolean anyCloudEpgFailure = false;
boolean anyCloudEpgSuccess = false;
- if (builtInResult == null || builtInResult == REASON_NO_BUILT_IN_CHANNELS) {
- return anyCloudEpgFailure
- ? ((Integer) REASON_CLOUD_EPG_FAILURE)
- : anyCloudEpgSuccess ? null : builtInResult;
- } else {
- return builtInResult;
- }
+ return builtInResult;
} finally {
TrafficStats.setThreadStatsTag(oldTag);
}
}
+ private Set<Channel> getExistingChannelsFor(String inputId) {
+ Set<Channel> result = new HashSet<>();
+ try (Cursor cursor =
+ mContext.getContentResolver()
+ .query(
+ TvContract.buildChannelsUriForInput(inputId),
+ Channel.PROJECTION,
+ null,
+ null,
+ null)) {
+ while (cursor.moveToNext()) {
+ result.add(Channel.fromCursor(cursor));
+ }
+ return result;
+ }
+ }
+
private Integer fetchEpgForBuiltInTuner() {
try {
Integer failureReason = prepareFetchEpg(false);
@@ -737,6 +746,8 @@ public class EpgFetcherImpl implements EpgFetcher {
onFinishFetchDuringScan();
}
break;
+ default:
+ // do nothing
}
}
diff --git a/src/com/android/tv/data/epg/EpgReader.java b/src/com/android/tv/data/epg/EpgReader.java
index 4e4177c4..9c881439 100644
--- a/src/com/android/tv/data/epg/EpgReader.java
+++ b/src/com/android/tv/data/epg/EpgReader.java
@@ -23,7 +23,6 @@ import com.android.tv.data.Channel;
import com.android.tv.data.Lineup;
import com.android.tv.data.Program;
import com.android.tv.dvr.data.SeriesInfo;
-//import com.google.auto.value.AutoValue;
import java.util.Collection;
import java.util.List;
import java.util.Map;
@@ -34,7 +33,7 @@ import java.util.Set;
public interface EpgReader {
/** Value class that holds a EpgChannelId and its corresponding Channel */
- //@AutoValue
+ // TODO(b/72052568): Get autovalue to work in aosp
abstract class EpgChannel {
public static EpgChannel createEpgChannel(Channel channel, String epgChannelId) {
return new AutoValue_EpgReader_EpgChannel(channel, epgChannelId);
diff --git a/src/com/android/tv/guide/ProgramTableAdapter.java b/src/com/android/tv/guide/ProgramTableAdapter.java
index 1a1ba36c..c77673a2 100644
--- a/src/com/android/tv/guide/ProgramTableAdapter.java
+++ b/src/com/android/tv/guide/ProgramTableAdapter.java
@@ -58,6 +58,7 @@ import com.android.tv.dvr.DvrDataManager;
import com.android.tv.dvr.DvrManager;
import com.android.tv.dvr.data.ScheduledRecording;
import com.android.tv.guide.ProgramManager.TableEntriesUpdatedListener;
+
import com.android.tv.parental.ParentalControlSettings;
import com.android.tv.ui.HardwareLayerAnimatorListenerAdapter;
import com.android.tv.util.ImageCache;
diff --git a/src/com/android/tv/onboarding/WelcomeFragment.java b/src/com/android/tv/onboarding/WelcomeFragment.java
index 150e0997..92b56e8d 100644
--- a/src/com/android/tv/onboarding/WelcomeFragment.java
+++ b/src/com/android/tv/onboarding/WelcomeFragment.java
@@ -16,6 +16,8 @@
package com.android.tv.onboarding;
+import static android.view.accessibility.AccessibilityNodeInfo.ACTION_CLEAR_ACCESSIBILITY_FOCUS;
+
import android.animation.Animator;
import android.animation.AnimatorInflater;
import android.animation.AnimatorListenerAdapter;
@@ -24,11 +26,18 @@ import android.content.Context;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v17.leanback.app.OnboardingFragment;
+import android.text.Editable;
+import android.text.TextWatcher;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
+import android.view.View.AccessibilityDelegate;
import android.view.ViewGroup;
+import android.view.accessibility.AccessibilityEvent;
+import android.view.accessibility.AccessibilityNodeInfo;
+import android.widget.Button;
import android.widget.ImageView;
+import android.widget.TextView;
import com.android.tv.R;
import com.android.tv.common.ui.setup.SetupActionHelper;
import com.android.tv.common.ui.setup.animation.SetupAnimationHelper;
@@ -37,7 +46,7 @@ import java.util.List;
/** A fragment for the onboarding welcome screen. */
public class WelcomeFragment extends OnboardingFragment {
- public static final String ACTION_CATEGORY = "comgoogle.android.tv.onboarding.WelcomeFragment";
+ public static final String ACTION_CATEGORY = "com.android.tv.onboarding.WelcomeFragment";
public static final int ACTION_NEXT = 1;
private static final long START_DELAY_CLOUD_MS = 33;
@@ -576,9 +585,14 @@ public class WelcomeFragment extends OnboardingFragment {
private ImageView mTvContentView;
private ImageView mArrowView;
+ private TextView mTitleView;
+ private Button mStartButton;
+ private View mPagingIndicator;
+
private Animator mAnimator;
private boolean mLogoAnimationFinished;
+ private boolean mTitleChanged;
public WelcomeFragment() {
setExitTransition(
@@ -600,13 +614,84 @@ public class WelcomeFragment extends OnboardingFragment {
mPageDescriptions = getResources().getStringArray(R.array.welcome_page_descriptions);
}
}
-
@Nullable
@Override
public View onCreateView(
LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = super.onCreateView(inflater, container, savedInstanceState);
setLogoResourceId(R.drawable.splash_logo);
+ mTitleView = view.findViewById(android.support.v17.leanback.R.id.title);
+ mPagingIndicator = view.findViewById(android.support.v17.leanback.R.id.page_indicator);
+ mStartButton = view.findViewById(android.support.v17.leanback.R.id.button_start);
+
+ mStartButton.setAccessibilityDelegate(new AccessibilityDelegate() {
+ @Override
+ public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {
+ int type = event.getEventType();
+ if (type == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED
+ || type == AccessibilityEvent.TYPE_VIEW_FOCUSED) {
+ if (!mTitleChanged || mTitleView.isAccessibilityFocused()) {
+ // Skip the event before the title is accessibility focused to avoid race
+ // conditions
+ return;
+ }
+ }
+ super.onInitializeAccessibilityEvent(host, event);
+ }
+ });
+
+ mPagingIndicator.setAccessibilityDelegate(new AccessibilityDelegate() {
+ @Override
+ public void onInitializeAccessibilityEvent(View host, AccessibilityEvent event) {
+ int type = event.getEventType();
+ if (type == AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED
+ || type == AccessibilityEvent.TYPE_VIEW_FOCUSED) {
+ if (!mTitleChanged || mTitleView.isAccessibilityFocused()) {
+ // Skip the event before the title is accessibility focused to avoid race
+ // conditions
+ return;
+ }
+ }
+ super.onInitializeAccessibilityEvent(host, event);
+ }
+ });
+
+ mTitleView.setAccessibilityDelegate(new AccessibilityDelegate() {
+ @Override
+ public boolean performAccessibilityAction(View host, int action, Bundle args) {
+ if (action == ACTION_CLEAR_ACCESSIBILITY_FOCUS) {
+ if (!mTitleChanged || mTitleView.isAccessibilityFocused()) {
+ // Skip the event before the title is accessibility focused to avoid race
+ // conditions
+ return false;
+ }
+ }
+ return super.performAccessibilityAction(host, action, args);
+ }
+ });
+
+ mTitleView.addTextChangedListener(new TextWatcher() {
+ @Override
+ public void beforeTextChanged(CharSequence s, int start, int count, int after) {
+ mTitleChanged = false;
+ }
+
+ @Override
+ public void onTextChanged(CharSequence s, int start, int before, int count) {
+ }
+
+ @Override
+ public void afterTextChanged(Editable s) {
+ if (!mTitleView.isAccessibilityFocused()) {
+ mTitleView.performAccessibilityAction(
+ AccessibilityNodeInfo.ACTION_ACCESSIBILITY_FOCUS, null);
+ } else {
+ mTitleView.sendAccessibilityEvent(
+ AccessibilityEvent.TYPE_VIEW_ACCESSIBILITY_FOCUSED);
+ }
+ mTitleChanged = true;
+ }
+ });
return view;
}
@@ -746,6 +831,7 @@ public class WelcomeFragment extends OnboardingFragment {
if (mAnimator != null) {
mAnimator.cancel();
}
+ mTitleChanged = false;
mArrowView.setVisibility(View.GONE);
// TV screen hiding animator.
Animator hideAnimator =
diff --git a/src/com/android/tv/receiver/PackageIntentsReceiver.java b/src/com/android/tv/receiver/PackageIntentsReceiver.java
index 7ff67b50..3958f6bf 100644
--- a/src/com/android/tv/receiver/PackageIntentsReceiver.java
+++ b/src/com/android/tv/receiver/PackageIntentsReceiver.java
@@ -22,7 +22,9 @@ import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import com.android.tv.Starter;
+import com.android.tv.TvFeatures;
import com.android.tv.TvSingletons;
+
import com.android.tv.util.Partner;
/** A class for handling the broadcast intents from PackageManager. */
diff --git a/src/com/android/tv/tuner/TunerInputController.java b/src/com/android/tv/tuner/TunerInputController.java
index f395949d..02611bbf 100644
--- a/src/com/android/tv/tuner/TunerInputController.java
+++ b/src/com/android/tv/tuner/TunerInputController.java
@@ -51,6 +51,8 @@ import com.android.tv.TvApplication;
import com.android.tv.TvSingletons;
import com.android.tv.common.BuildConfig;
import com.android.tv.common.util.SystemPropertiesProxy;
+
+
import com.android.tv.tuner.setup.BaseTunerSetupActivity;
import com.android.tv.tuner.util.TunerInputInfoUtils;
import java.text.ParseException;
diff --git a/src/com/android/tv/ui/sidepanel/DeveloperOptionFragment.java b/src/com/android/tv/ui/sidepanel/DeveloperOptionFragment.java
index 9d3b2450..dd42a728 100644
--- a/src/com/android/tv/ui/sidepanel/DeveloperOptionFragment.java
+++ b/src/com/android/tv/ui/sidepanel/DeveloperOptionFragment.java
@@ -30,6 +30,7 @@ import com.android.tv.TvSingletons;
import com.android.tv.common.CommonPreferences;
import com.android.tv.common.feature.CommonFeatures;
import com.android.tv.common.util.CommonUtils;
+
import java.util.ArrayList;
import java.util.List;