Commit f1e63704 authored by Shakti Sahu's avatar Shakti Sahu Committed by Commit Bot

Video Tutorials : Using translate backend to provide the language info

For video tutorials, instead of passing the language display name from
the server, we can just pass the locale, from which we can consult with
the translate backend to get the display name for the given locale.
This CL makes the Java side changes required to obtain this information.

Bug: 1137912
Change-Id: Ia9ce3c94088f9f4311b04141df9542a0846263f2
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2468781Reviewed-by: default avatarMegan Jablonski <megjablon@chromium.org>
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#817330}
parent 0ecb239e
...@@ -88,6 +88,7 @@ chrome_java_sources = [ ...@@ -88,6 +88,7 @@ chrome_java_sources = [
"java/src/org/chromium/chrome/browser/app/tabmodel/ChromeTabModelFilterFactory.java", "java/src/org/chromium/chrome/browser/app/tabmodel/ChromeTabModelFilterFactory.java",
"java/src/org/chromium/chrome/browser/app/tabmodel/DefaultTabModelSelectorFactory.java", "java/src/org/chromium/chrome/browser/app/tabmodel/DefaultTabModelSelectorFactory.java",
"java/src/org/chromium/chrome/browser/app/tabmodel/TabWindowManagerSingleton.java", "java/src/org/chromium/chrome/browser/app/tabmodel/TabWindowManagerSingleton.java",
"java/src/org/chromium/chrome/browser/app/video_tutorials/ChromeLanguageInfoProvider.java",
"java/src/org/chromium/chrome/browser/app/video_tutorials/NewTabPageVideoIPHManager.java", "java/src/org/chromium/chrome/browser/app/video_tutorials/NewTabPageVideoIPHManager.java",
"java/src/org/chromium/chrome/browser/app/video_tutorials/VideoPlayerActivity.java", "java/src/org/chromium/chrome/browser/app/video_tutorials/VideoPlayerActivity.java",
"java/src/org/chromium/chrome/browser/app/video_tutorials/VideoTutorialListActivity.java", "java/src/org/chromium/chrome/browser/app/video_tutorials/VideoTutorialListActivity.java",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.app.video_tutorials;
import org.chromium.chrome.browser.language.settings.LanguageItem;
import org.chromium.chrome.browser.language.settings.LanguagesManager;
import org.chromium.chrome.browser.video_tutorials.Language;
import org.chromium.chrome.browser.video_tutorials.LanguageInfoProvider;
/**
* See {@link LanguageInfoProvider}.
*/
public class ChromeLanguageInfoProvider implements LanguageInfoProvider {
@Override
public Language getLanguageInfo(String locale) {
LanguageItem languageItem = LanguagesManager.getInstance().getLanguageMap().get(locale);
if (languageItem == null) return null;
return new Language(languageItem.getCode(), languageItem.getDisplayName(),
languageItem.getNativeDisplayName());
}
}
...@@ -47,8 +47,9 @@ public class VideoPlayerActivity extends SynchronousInitializationActivity { ...@@ -47,8 +47,9 @@ public class VideoPlayerActivity extends SynchronousInitializationActivity {
VideoTutorialService videoTutorialService = VideoTutorialService videoTutorialService =
VideoTutorialServiceFactory.getForProfile(Profile.getLastUsedRegularProfile()); VideoTutorialServiceFactory.getForProfile(Profile.getLastUsedRegularProfile());
mWindowAndroid = new ActivityWindowAndroid(this); mWindowAndroid = new ActivityWindowAndroid(this);
mCoordinator = VideoTutorialServiceFactory.createVideoPlayerCoordinator( mCoordinator = VideoTutorialServiceFactory.createVideoPlayerCoordinator(this,
this, videoTutorialService, this::createWebContents, this::tryNow, this::finish); videoTutorialService, this::createWebContents, new ChromeLanguageInfoProvider(),
this::tryNow, this::finish);
setContentView(mCoordinator.getView()); setContentView(mCoordinator.getView());
int featureType = int featureType =
......
...@@ -21,7 +21,7 @@ import java.util.Map; ...@@ -21,7 +21,7 @@ import java.util.Map;
* *
*The LanguagesManager is responsible for fetching languages details from native. *The LanguagesManager is responsible for fetching languages details from native.
*/ */
class LanguagesManager { public class LanguagesManager {
/** /**
* An observer interface that allows other classes to know when the accept language list is * An observer interface that allows other classes to know when the accept language list is
* updated in native side. * updated in native side.
...@@ -168,6 +168,14 @@ class LanguagesManager { ...@@ -168,6 +168,14 @@ class LanguagesManager {
if (reload) notifyAcceptLanguageObserver(); if (reload) notifyAcceptLanguageObserver();
} }
/**
* Called to get all languages available in chrome.
* @return A map of language code to {@code LanguageItem} for all available languages.
*/
public Map<String, LanguageItem> getLanguageMap() {
return mLanguagesMap;
}
/** /**
* Get the static instance of ChromePreferenceManager if it exists else create it. * Get the static instance of ChromePreferenceManager if it exists else create it.
* @return the LanguagesManager singleton. * @return the LanguagesManager singleton.
......
...@@ -61,6 +61,7 @@ if (is_android) { ...@@ -61,6 +61,7 @@ if (is_android) {
android_library("java") { android_library("java") {
sources = [ sources = [
"android/java/src/org/chromium/chrome/browser/video_tutorials/Language.java", "android/java/src/org/chromium/chrome/browser/video_tutorials/Language.java",
"android/java/src/org/chromium/chrome/browser/video_tutorials/LanguageInfoProvider.java",
"android/java/src/org/chromium/chrome/browser/video_tutorials/Tutorial.java", "android/java/src/org/chromium/chrome/browser/video_tutorials/Tutorial.java",
"android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialService.java", "android/java/src/org/chromium/chrome/browser/video_tutorials/VideoTutorialService.java",
"android/java/src/org/chromium/chrome/browser/video_tutorials/iph/VideoIPHCoordinator.java", "android/java/src/org/chromium/chrome/browser/video_tutorials/iph/VideoIPHCoordinator.java",
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
package org.chromium.chrome.browser.video_tutorials;
/**
* Interface for obtaining the language information for a given locale in order to display on the
* UI.
*/
public interface LanguageInfoProvider {
/**
x * @return The language info for a given {@code locale}.
*/
Language getLanguageInfo(String locale);
}
...@@ -26,7 +26,7 @@ public interface VideoTutorialService { ...@@ -26,7 +26,7 @@ public interface VideoTutorialService {
/** /**
* Called to get the list of supported languages. * Called to get the list of supported languages.
*/ */
List<Language> getSupportedLanguages(); List<String> getSupportedLanguages();
/** /**
* @return The user's language of choice for watching the video tutorials. * @return The user's language of choice for watching the video tutorials.
......
...@@ -15,12 +15,12 @@ import java.util.List; ...@@ -15,12 +15,12 @@ import java.util.List;
/** A video tutorial service implementation for tests. */ /** A video tutorial service implementation for tests. */
public class TestVideoTutorialService implements VideoTutorialService { public class TestVideoTutorialService implements VideoTutorialService {
public static final Language HINDI = new Language("hi", "Hindi", "Hindi Native"); public static final Language HINDI = new Language("hi", "hindi", "हिंदी");
public static final Language TAMIL = new Language("ta", "Tamil", "Tamil Native"); public static final Language TAMIL = new Language("ta", "Tamil", "தமிழ்");
public static final Language ENGLISH = new Language("en", "English", "English Native"); public static final Language ENGLISH = new Language("en", "English", "English");
private final List<Tutorial> mTutorials = new ArrayList<>(); private final List<Tutorial> mTutorials = new ArrayList<>();
private final List<Language> mLanguages = new ArrayList<>(); private final List<String> mLanguages = new ArrayList<>();
private String mPreferredLocale; private String mPreferredLocale;
public TestVideoTutorialService() { public TestVideoTutorialService() {
...@@ -42,7 +42,7 @@ public class TestVideoTutorialService implements VideoTutorialService { ...@@ -42,7 +42,7 @@ public class TestVideoTutorialService implements VideoTutorialService {
} }
@Override @Override
public List<Language> getSupportedLanguages() { public List<String> getSupportedLanguages() {
return mLanguages; return mLanguages;
} }
...@@ -56,7 +56,7 @@ public class TestVideoTutorialService implements VideoTutorialService { ...@@ -56,7 +56,7 @@ public class TestVideoTutorialService implements VideoTutorialService {
mPreferredLocale = locale; mPreferredLocale = locale;
} }
public List<Language> getTestLanguages() { public List<String> getTestLanguages() {
return mLanguages; return mLanguages;
} }
...@@ -84,8 +84,8 @@ public class TestVideoTutorialService implements VideoTutorialService { ...@@ -84,8 +84,8 @@ public class TestVideoTutorialService implements VideoTutorialService {
} }
private void initializeLanguages() { private void initializeLanguages() {
mLanguages.add(HINDI); mLanguages.add("hi");
mLanguages.add(TAMIL); mLanguages.add("ta");
mLanguages.add(ENGLISH); mLanguages.add("en");
} }
} }
...@@ -54,9 +54,10 @@ public class VideoTutorialServiceFactory { ...@@ -54,9 +54,10 @@ public class VideoTutorialServiceFactory {
public static VideoPlayerCoordinator createVideoPlayerCoordinator(Context context, public static VideoPlayerCoordinator createVideoPlayerCoordinator(Context context,
VideoTutorialService videoTutorialService, VideoTutorialService videoTutorialService,
Supplier<Pair<WebContents, ContentView>> webContentsFactory, Supplier<Pair<WebContents, ContentView>> webContentsFactory,
Callback<Tutorial> tryNowCallback, Runnable closeCallback) { LanguageInfoProvider languageInfoProvider, Callback<Tutorial> tryNowCallback,
return new VideoPlayerCoordinatorImpl( Runnable closeCallback) {
context, videoTutorialService, webContentsFactory, tryNowCallback, closeCallback); return new VideoPlayerCoordinatorImpl(context, videoTutorialService, webContentsFactory,
languageInfoProvider, tryNowCallback, closeCallback);
} }
/** See {@link TutorialListCoordinator}.*/ /** See {@link TutorialListCoordinator}.*/
......
...@@ -46,10 +46,12 @@ public class VideoTutorialServiceBridge implements VideoTutorialService { ...@@ -46,10 +46,12 @@ public class VideoTutorialServiceBridge implements VideoTutorialService {
} }
@Override @Override
public List<Language> getSupportedLanguages() { public List<String> getSupportedLanguages() {
if (mNativeVideoTutorialServiceBridge == 0) return null; return null;
return VideoTutorialServiceBridgeJni.get().getSupportedLanguages( // TODO(shaktisahu): Fix the native to return a list of locales instead of languages.
mNativeVideoTutorialServiceBridge, this); // if (mNativeVideoTutorialServiceBridge == 0) return null;
// return VideoTutorialServiceBridgeJni.get().getSupportedLanguages(
// mNativeVideoTutorialServiceBridge, this);
} }
@Override @Override
......
...@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.video_tutorials.languages; ...@@ -7,6 +7,7 @@ package org.chromium.chrome.browser.video_tutorials.languages;
import android.content.Context; import android.content.Context;
import android.view.View; import android.view.View;
import org.chromium.chrome.browser.video_tutorials.LanguageInfoProvider;
import org.chromium.chrome.browser.video_tutorials.VideoTutorialService; import org.chromium.chrome.browser.video_tutorials.VideoTutorialService;
import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
import org.chromium.ui.modelutil.PropertyModel; import org.chromium.ui.modelutil.PropertyModel;
...@@ -27,13 +28,15 @@ public class LanguagePickerCoordinator { ...@@ -27,13 +28,15 @@ public class LanguagePickerCoordinator {
* @param view The view representing this language picker. * @param view The view representing this language picker.
* @param videoTutorialService The video tutorial service backend. * @param videoTutorialService The video tutorial service backend.
*/ */
public LanguagePickerCoordinator(View view, VideoTutorialService videoTutorialService) { public LanguagePickerCoordinator(View view, VideoTutorialService videoTutorialService,
LanguageInfoProvider languageInfoProvider) {
mContext = view.getContext(); mContext = view.getContext();
mVideoTutorialService = videoTutorialService; mVideoTutorialService = videoTutorialService;
mModel = new PropertyModel(LanguagePickerProperties.ALL_KEYS); mModel = new PropertyModel(LanguagePickerProperties.ALL_KEYS);
mListModel = new ModelList(); mListModel = new ModelList();
mView = new LanguagePickerView(view, mModel, mListModel); mView = new LanguagePickerView(view, mModel, mListModel);
mMediator = new LanguagePickerMediator(mContext, mModel, mListModel, videoTutorialService); mMediator = new LanguagePickerMediator(
mContext, mModel, mListModel, videoTutorialService, languageInfoProvider);
} }
/** /**
......
...@@ -8,6 +8,7 @@ import android.content.Context; ...@@ -8,6 +8,7 @@ import android.content.Context;
import android.text.TextUtils; import android.text.TextUtils;
import org.chromium.chrome.browser.video_tutorials.Language; import org.chromium.chrome.browser.video_tutorials.Language;
import org.chromium.chrome.browser.video_tutorials.LanguageInfoProvider;
import org.chromium.chrome.browser.video_tutorials.VideoTutorialService; import org.chromium.chrome.browser.video_tutorials.VideoTutorialService;
import org.chromium.ui.modelutil.MVCListAdapter.ListItem; import org.chromium.ui.modelutil.MVCListAdapter.ListItem;
import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
...@@ -22,6 +23,7 @@ import java.util.List; ...@@ -22,6 +23,7 @@ import java.util.List;
public class LanguagePickerMediator { public class LanguagePickerMediator {
private final Context mContext; private final Context mContext;
private final VideoTutorialService mVideoTutorialService; private final VideoTutorialService mVideoTutorialService;
private final LanguageInfoProvider mLanguageInfoProvider;
private final PropertyModel mModel; private final PropertyModel mModel;
private final ModelList mListModel; private final ModelList mListModel;
...@@ -30,9 +32,10 @@ public class LanguagePickerMediator { ...@@ -30,9 +32,10 @@ public class LanguagePickerMediator {
* @param videoTutorialService The video tutorial service backend. * @param videoTutorialService The video tutorial service backend.
*/ */
public LanguagePickerMediator(Context context, PropertyModel model, ModelList listModel, public LanguagePickerMediator(Context context, PropertyModel model, ModelList listModel,
VideoTutorialService videoTutorialService) { VideoTutorialService videoTutorialService, LanguageInfoProvider languageInfoProvider) {
mContext = context; mContext = context;
mVideoTutorialService = videoTutorialService; mVideoTutorialService = videoTutorialService;
mLanguageInfoProvider = languageInfoProvider;
mModel = model; mModel = model;
mListModel = listModel; mListModel = listModel;
} }
...@@ -51,11 +54,14 @@ public class LanguagePickerMediator { ...@@ -51,11 +54,14 @@ public class LanguagePickerMediator {
populateList(mVideoTutorialService.getSupportedLanguages()); populateList(mVideoTutorialService.getSupportedLanguages());
} }
private void populateList(List<Language> supportedLanguages) { private void populateList(List<String> supportedLanguages) {
List<ListItem> listItems = new ArrayList<>(); List<ListItem> listItems = new ArrayList<>();
for (Language locale : supportedLanguages) { for (String locale : supportedLanguages) {
Language language = mLanguageInfoProvider.getLanguageInfo(locale);
if (language == null) continue;
ListItem listItem = new ListItem( ListItem listItem = new ListItem(
LanguageItemProperties.ITEM_VIEW_TYPE, buildListItemModelFromLocale(locale)); LanguageItemProperties.ITEM_VIEW_TYPE, buildListItemModelFromLocale(language));
listItems.add(listItem); listItems.add(listItem);
} }
mListModel.set(listItems); mListModel.set(listItems);
......
...@@ -14,10 +14,12 @@ import org.junit.Before; ...@@ -14,10 +14,12 @@ import org.junit.Before;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.mockito.Mock; import org.mockito.Mock;
import org.mockito.Mockito;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.chromium.base.metrics.test.ShadowRecordHistogram; import org.chromium.base.metrics.test.ShadowRecordHistogram;
import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.browser.video_tutorials.LanguageInfoProvider;
import org.chromium.chrome.browser.video_tutorials.test.TestVideoTutorialService; import org.chromium.chrome.browser.video_tutorials.test.TestVideoTutorialService;
import org.chromium.ui.modelutil.MVCListAdapter.ListItem; import org.chromium.ui.modelutil.MVCListAdapter.ListItem;
import org.chromium.ui.modelutil.MVCListAdapter.ModelList; import org.chromium.ui.modelutil.MVCListAdapter.ModelList;
...@@ -37,7 +39,9 @@ public class LanguagePickerMediatorUnitTest { ...@@ -37,7 +39,9 @@ public class LanguagePickerMediatorUnitTest {
private ModelList mListModel; private ModelList mListModel;
private LanguagePickerMediator mMediator; private LanguagePickerMediator mMediator;
@Mock @Mock
PropertyObservable.PropertyObserver<PropertyKey> mPropertyObserver; private PropertyObservable.PropertyObserver<PropertyKey> mPropertyObserver;
@Mock
private LanguageInfoProvider mLanguageProvider;
@Before @Before
public void setUp() { public void setUp() {
...@@ -49,8 +53,8 @@ public class LanguagePickerMediatorUnitTest { ...@@ -49,8 +53,8 @@ public class LanguagePickerMediatorUnitTest {
mListModel = new ModelList(); mListModel = new ModelList();
mTestVideoTutorialService = new TestVideoTutorialService(); mTestVideoTutorialService = new TestVideoTutorialService();
mMediator = mMediator = new LanguagePickerMediator(
new LanguagePickerMediator(mContext, mModel, mListModel, mTestVideoTutorialService); mContext, mModel, mListModel, mTestVideoTutorialService, mLanguageProvider);
} }
@Test @Test
...@@ -64,6 +68,13 @@ public class LanguagePickerMediatorUnitTest { ...@@ -64,6 +68,13 @@ public class LanguagePickerMediatorUnitTest {
@Test @Test
public void loadsLanguagesInTheList() { public void loadsLanguagesInTheList() {
Mockito.when(mLanguageProvider.getLanguageInfo("hi"))
.thenReturn(TestVideoTutorialService.HINDI);
Mockito.when(mLanguageProvider.getLanguageInfo("ta"))
.thenReturn(TestVideoTutorialService.TAMIL);
Mockito.when(mLanguageProvider.getLanguageInfo("en"))
.thenReturn(TestVideoTutorialService.ENGLISH);
mMediator.showLanguagePicker(() -> {}, () -> {}); mMediator.showLanguagePicker(() -> {}, () -> {});
assertThat(mListModel.size(), equalTo(mTestVideoTutorialService.getTestLanguages().size())); assertThat(mListModel.size(), equalTo(mTestVideoTutorialService.getTestLanguages().size()));
......
...@@ -26,6 +26,7 @@ import org.mockito.Mock; ...@@ -26,6 +26,7 @@ import org.mockito.Mock;
import org.mockito.Mockito; import org.mockito.Mockito;
import org.mockito.MockitoAnnotations; import org.mockito.MockitoAnnotations;
import org.chromium.chrome.browser.video_tutorials.LanguageInfoProvider;
import org.chromium.chrome.browser.video_tutorials.R; import org.chromium.chrome.browser.video_tutorials.R;
import org.chromium.chrome.browser.video_tutorials.VideoTutorialService; import org.chromium.chrome.browser.video_tutorials.VideoTutorialService;
import org.chromium.chrome.browser.video_tutorials.test.TestVideoTutorialService; import org.chromium.chrome.browser.video_tutorials.test.TestVideoTutorialService;
...@@ -46,6 +47,8 @@ public class LanguagePickerTest { ...@@ -46,6 +47,8 @@ public class LanguagePickerTest {
private View mContentView; private View mContentView;
private VideoTutorialService mVideoTutorialService; private VideoTutorialService mVideoTutorialService;
private LanguagePickerCoordinator mCoordinator; private LanguagePickerCoordinator mCoordinator;
@Mock
private LanguageInfoProvider mLanguageProvider;
@Mock @Mock
private Runnable mWatchCallback; private Runnable mWatchCallback;
...@@ -63,7 +66,10 @@ public class LanguagePickerTest { ...@@ -63,7 +66,10 @@ public class LanguagePickerTest {
mContentView = mContentView =
LayoutInflater.from(mActivity).inflate(R.layout.language_picker, null, false); LayoutInflater.from(mActivity).inflate(R.layout.language_picker, null, false);
parentView.addView(mContentView); parentView.addView(mContentView);
mCoordinator = new LanguagePickerCoordinator(mContentView, mVideoTutorialService); Mockito.when(mLanguageProvider.getLanguageInfo("hi"))
.thenReturn(TestVideoTutorialService.HINDI);
mCoordinator = new LanguagePickerCoordinator(
mContentView, mVideoTutorialService, mLanguageProvider);
mCoordinator.showLanguagePicker(mWatchCallback, mCloseCallback); mCoordinator.showLanguagePicker(mWatchCallback, mCloseCallback);
}); });
} }
......
...@@ -10,6 +10,7 @@ import android.view.View; ...@@ -10,6 +10,7 @@ import android.view.View;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.supplier.Supplier; import org.chromium.base.supplier.Supplier;
import org.chromium.chrome.browser.video_tutorials.LanguageInfoProvider;
import org.chromium.chrome.browser.video_tutorials.PlaybackStateObserver; import org.chromium.chrome.browser.video_tutorials.PlaybackStateObserver;
import org.chromium.chrome.browser.video_tutorials.R; import org.chromium.chrome.browser.video_tutorials.R;
import org.chromium.chrome.browser.video_tutorials.Tutorial; import org.chromium.chrome.browser.video_tutorials.Tutorial;
...@@ -48,17 +49,19 @@ public class VideoPlayerCoordinatorImpl implements VideoPlayerCoordinator { ...@@ -48,17 +49,19 @@ public class VideoPlayerCoordinatorImpl implements VideoPlayerCoordinator {
*/ */
public VideoPlayerCoordinatorImpl(Context context, VideoTutorialService videoTutorialService, public VideoPlayerCoordinatorImpl(Context context, VideoTutorialService videoTutorialService,
Supplier<Pair<WebContents, ContentView>> webContentsFactory, Supplier<Pair<WebContents, ContentView>> webContentsFactory,
Callback<Tutorial> tryNowCallback, Runnable closeCallback) { LanguageInfoProvider languageInfoProvider, Callback<Tutorial> tryNowCallback,
Runnable closeCallback) {
mContext = context; mContext = context;
mVideoTutorialService = videoTutorialService; mVideoTutorialService = videoTutorialService;
mModel = new PropertyModel(VideoPlayerProperties.ALL_KEYS); mModel = new PropertyModel(VideoPlayerProperties.ALL_KEYS);
ThinWebView thinWebView = createThinWebView(webContentsFactory); ThinWebView thinWebView = createThinWebView(webContentsFactory);
mView = new VideoPlayerView(context, mModel, thinWebView); mView = new VideoPlayerView(context, mModel, thinWebView);
mLanguagePicker = new LanguagePickerCoordinator( mLanguagePicker =
mView.getView().findViewById(R.id.language_picker), mVideoTutorialService); new LanguagePickerCoordinator(mView.getView().findViewById(R.id.language_picker),
mVideoTutorialService, languageInfoProvider);
mMediator = new VideoPlayerMediator(mContext, mModel, videoTutorialService, mLanguagePicker, mMediator = new VideoPlayerMediator(mContext, mModel, videoTutorialService, mLanguagePicker,
mWebContents, tryNowCallback, closeCallback); languageInfoProvider, mWebContents, tryNowCallback, closeCallback);
PropertyModelChangeProcessor.create(mModel, mView, new VideoPlayerViewBinder()); PropertyModelChangeProcessor.create(mModel, mView, new VideoPlayerViewBinder());
} }
......
...@@ -5,10 +5,10 @@ ...@@ -5,10 +5,10 @@
package org.chromium.chrome.browser.video_tutorials.player; package org.chromium.chrome.browser.video_tutorials.player;
import android.content.Context; import android.content.Context;
import android.text.TextUtils;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.chrome.browser.video_tutorials.Language; import org.chromium.chrome.browser.video_tutorials.Language;
import org.chromium.chrome.browser.video_tutorials.LanguageInfoProvider;
import org.chromium.chrome.browser.video_tutorials.PlaybackStateObserver; import org.chromium.chrome.browser.video_tutorials.PlaybackStateObserver;
import org.chromium.chrome.browser.video_tutorials.R; import org.chromium.chrome.browser.video_tutorials.R;
import org.chromium.chrome.browser.video_tutorials.Tutorial; import org.chromium.chrome.browser.video_tutorials.Tutorial;
...@@ -35,16 +35,19 @@ class VideoPlayerMediator implements PlaybackStateObserver.Observer { ...@@ -35,16 +35,19 @@ class VideoPlayerMediator implements PlaybackStateObserver.Observer {
private Tutorial mTutorial; private Tutorial mTutorial;
private final Callback<Tutorial> mTryNowCallback; private final Callback<Tutorial> mTryNowCallback;
private final Runnable mCloseCallback; private final Runnable mCloseCallback;
private final LanguageInfoProvider mLanguageInfoProvider;
private long mVideoStartTime; private long mVideoStartTime;
/** Constructor. */ /** Constructor. */
public VideoPlayerMediator(Context context, PropertyModel model, public VideoPlayerMediator(Context context, PropertyModel model,
VideoTutorialService videoTutorialService, LanguagePickerCoordinator languagePicker, VideoTutorialService videoTutorialService, LanguagePickerCoordinator languagePicker,
WebContents webContents, Callback<Tutorial> tryNowCallback, Runnable closeCallback) { LanguageInfoProvider languageInfoProvider, WebContents webContents,
Callback<Tutorial> tryNowCallback, Runnable closeCallback) {
mContext = context; mContext = context;
mModel = model; mModel = model;
mVideoTutorialService = videoTutorialService; mVideoTutorialService = videoTutorialService;
mLanguagePicker = languagePicker; mLanguagePicker = languagePicker;
mLanguageInfoProvider = languageInfoProvider;
mWebContents = webContents; mWebContents = webContents;
mTryNowCallback = tryNowCallback; mTryNowCallback = tryNowCallback;
mCloseCallback = closeCallback; mCloseCallback = closeCallback;
...@@ -129,14 +132,13 @@ class VideoPlayerMediator implements PlaybackStateObserver.Observer { ...@@ -129,14 +132,13 @@ class VideoPlayerMediator implements PlaybackStateObserver.Observer {
} }
private void updateChangeLanguageButtonText() { private void updateChangeLanguageButtonText() {
String locale = mVideoTutorialService.getPreferredLocale(); String preferredLocale = mVideoTutorialService.getPreferredLocale();
for (Language language : mVideoTutorialService.getSupportedLanguages()) { Language language = mLanguageInfoProvider.getLanguageInfo(preferredLocale);
if (TextUtils.equals(language.locale, locale)) { if (language == null) return;
String buttonText = mContext.getResources().getString(
R.string.video_tutorials_change_language, language.nativeName); String buttonText = mContext.getResources().getString(
mModel.set(VideoPlayerProperties.CHANGE_LANGUAGE_BUTTON_TEXT, buttonText); R.string.video_tutorials_change_language, language.nativeName);
} mModel.set(VideoPlayerProperties.CHANGE_LANGUAGE_BUTTON_TEXT, buttonText);
}
} }
private void onLanguageSelected() { private void onLanguageSelected() {
......
...@@ -23,6 +23,7 @@ import org.mockito.MockitoAnnotations; ...@@ -23,6 +23,7 @@ import org.mockito.MockitoAnnotations;
import org.chromium.base.Callback; import org.chromium.base.Callback;
import org.chromium.base.metrics.test.ShadowRecordHistogram; import org.chromium.base.metrics.test.ShadowRecordHistogram;
import org.chromium.base.test.BaseRobolectricTestRunner; import org.chromium.base.test.BaseRobolectricTestRunner;
import org.chromium.chrome.browser.video_tutorials.LanguageInfoProvider;
import org.chromium.chrome.browser.video_tutorials.Tutorial; import org.chromium.chrome.browser.video_tutorials.Tutorial;
import org.chromium.chrome.browser.video_tutorials.VideoTutorialUtils; import org.chromium.chrome.browser.video_tutorials.VideoTutorialUtils;
import org.chromium.chrome.browser.video_tutorials.languages.LanguagePickerCoordinator; import org.chromium.chrome.browser.video_tutorials.languages.LanguagePickerCoordinator;
...@@ -60,6 +61,8 @@ public class VideoPlayerMediatorUnitTest { ...@@ -60,6 +61,8 @@ public class VideoPlayerMediatorUnitTest {
PropertyObservable.PropertyObserver<PropertyKey> mPropertyObserver; PropertyObservable.PropertyObserver<PropertyKey> mPropertyObserver;
@Mock @Mock
Callback<Tutorial> mTryNowCallback; Callback<Tutorial> mTryNowCallback;
@Mock
private LanguageInfoProvider mLanguageProvider;
@Before @Before
public void setUp() { public void setUp() {
...@@ -73,7 +76,7 @@ public class VideoPlayerMediatorUnitTest { ...@@ -73,7 +76,7 @@ public class VideoPlayerMediatorUnitTest {
mTestVideoTutorialService = new TestVideoTutorialService(); mTestVideoTutorialService = new TestVideoTutorialService();
mMediator = new VideoPlayerMediator(mContext, mModel, mTestVideoTutorialService, mMediator = new VideoPlayerMediator(mContext, mModel, mTestVideoTutorialService,
mLanguagePicker, mWebContents, mTryNowCallback, mCloseCallback); mLanguagePicker, mLanguageProvider, mWebContents, mTryNowCallback, mCloseCallback);
} }
@Test @Test
...@@ -91,7 +94,7 @@ public class VideoPlayerMediatorUnitTest { ...@@ -91,7 +94,7 @@ public class VideoPlayerMediatorUnitTest {
@Test @Test
public void languagePickerNotShownIfPreferredLocaleSetAlready() { public void languagePickerNotShownIfPreferredLocaleSetAlready() {
mTestVideoTutorialService.setPreferredLocale(TestVideoTutorialService.ENGLISH.locale); mTestVideoTutorialService.setPreferredLocale("en");
Tutorial tutorial = mTestVideoTutorialService.getTestTutorials().get(0); Tutorial tutorial = mTestVideoTutorialService.getTestTutorials().get(0);
mMediator.playVideoTutorial(tutorial); mMediator.playVideoTutorial(tutorial);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment