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

Video Tutorials : Fixed default language for user

This CL fixes two issues.
1 - The supported languages are converted from array to list at JNI
boundary.
2 - The preferred language was always falling back to the default
language from finch, which caused the language picker to never show up.
So, in the new fix, the preferred language will be empty if the user
hasn't set yet. However, showing the tutorial promos on the UI needs a
language. For that language, we will use a default language from finch.

Bug: 1142642
Change-Id: I3126b0d1bd815055ccda7a77903ca05cca72b75b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2500266
Commit-Queue: Shakti Sahu <shaktisahu@chromium.org>
Reviewed-by: default avatarMin Qin <qinmin@chromium.org>
Cr-Commit-Position: refs/heads/master@{#820997}
parent 12a40487
...@@ -29,7 +29,8 @@ public interface VideoTutorialService { ...@@ -29,7 +29,8 @@ public interface VideoTutorialService {
List<String> 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, or null user hasn't
* set it yet.
*/ */
String getPreferredLocale(); String getPreferredLocale();
......
...@@ -12,6 +12,7 @@ import org.chromium.chrome.browser.video_tutorials.FeatureType; ...@@ -12,6 +12,7 @@ import org.chromium.chrome.browser.video_tutorials.FeatureType;
import org.chromium.chrome.browser.video_tutorials.Tutorial; import org.chromium.chrome.browser.video_tutorials.Tutorial;
import org.chromium.chrome.browser.video_tutorials.VideoTutorialService; import org.chromium.chrome.browser.video_tutorials.VideoTutorialService;
import java.util.Arrays;
import java.util.List; import java.util.List;
/** /**
...@@ -47,8 +48,9 @@ public class VideoTutorialServiceBridge implements VideoTutorialService { ...@@ -47,8 +48,9 @@ public class VideoTutorialServiceBridge implements VideoTutorialService {
@Override @Override
public List<String> getSupportedLanguages() { public List<String> getSupportedLanguages() {
if (mNativeVideoTutorialServiceBridge == 0) return null; if (mNativeVideoTutorialServiceBridge == 0) return null;
return VideoTutorialServiceBridgeJni.get().getSupportedLanguages( String[] languages = VideoTutorialServiceBridgeJni.get().getSupportedLanguages(
mNativeVideoTutorialServiceBridge, this); mNativeVideoTutorialServiceBridge, this);
return Arrays.asList(languages);
} }
@Override @Override
...@@ -76,7 +78,7 @@ public class VideoTutorialServiceBridge implements VideoTutorialService { ...@@ -76,7 +78,7 @@ public class VideoTutorialServiceBridge implements VideoTutorialService {
Callback<List<Tutorial>> callback); Callback<List<Tutorial>> callback);
void getTutorial(long nativeVideoTutorialServiceBridge, VideoTutorialServiceBridge caller, void getTutorial(long nativeVideoTutorialServiceBridge, VideoTutorialServiceBridge caller,
int feature, Callback<Tutorial> callback); int feature, Callback<Tutorial> callback);
List<String> getSupportedLanguages( String[] getSupportedLanguages(
long nativeVideoTutorialServiceBridge, VideoTutorialServiceBridge caller); long nativeVideoTutorialServiceBridge, VideoTutorialServiceBridge caller);
String getPreferredLocale( String getPreferredLocale(
long nativeVideoTutorialServiceBridge, VideoTutorialServiceBridge caller); long nativeVideoTutorialServiceBridge, VideoTutorialServiceBridge caller);
......
...@@ -5,6 +5,7 @@ ...@@ -5,6 +5,7 @@
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;
...@@ -92,7 +93,7 @@ class VideoPlayerMediator implements PlaybackStateObserver.Observer { ...@@ -92,7 +93,7 @@ class VideoPlayerMediator implements PlaybackStateObserver.Observer {
void playVideoTutorial(Tutorial tutorial) { void playVideoTutorial(Tutorial tutorial) {
mTutorial = tutorial; mTutorial = tutorial;
if (mVideoTutorialService.getPreferredLocale() == null) { if (TextUtils.isEmpty(mVideoTutorialService.getPreferredLocale())) {
mModel.set(VideoPlayerProperties.SHOW_LANGUAGE_PICKER, true); mModel.set(VideoPlayerProperties.SHOW_LANGUAGE_PICKER, true);
mLanguagePicker.showLanguagePicker(this::onLanguageSelected, mCloseCallback); mLanguagePicker.showLanguagePicker(this::onLanguageSelected, mCloseCallback);
} else { } else {
......
...@@ -90,7 +90,8 @@ void VideoTutorialServiceBridge::GetTutorial( ...@@ -90,7 +90,8 @@ void VideoTutorialServiceBridge::GetTutorial(
ScopedJavaGlobalRef<jobject>(jcallback))); ScopedJavaGlobalRef<jobject>(jcallback)));
} }
ScopedJavaLocalRef<jobject> VideoTutorialServiceBridge::GetSupportedLanguages( ScopedJavaLocalRef<jobjectArray>
VideoTutorialServiceBridge::GetSupportedLanguages(
JNIEnv* env, JNIEnv* env,
const JavaParamRef<jobject>& jcaller) { const JavaParamRef<jobject>& jcaller) {
return base::android::ToJavaArrayOfStrings( return base::android::ToJavaArrayOfStrings(
...@@ -100,8 +101,11 @@ ScopedJavaLocalRef<jobject> VideoTutorialServiceBridge::GetSupportedLanguages( ...@@ -100,8 +101,11 @@ ScopedJavaLocalRef<jobject> VideoTutorialServiceBridge::GetSupportedLanguages(
ScopedJavaLocalRef<jstring> VideoTutorialServiceBridge::GetPreferredLocale( ScopedJavaLocalRef<jstring> VideoTutorialServiceBridge::GetPreferredLocale(
JNIEnv* env, JNIEnv* env,
const JavaParamRef<jobject>& jcaller) { const JavaParamRef<jobject>& jcaller) {
std::string locale = video_tutorial_service_->GetPreferredLocale(); base::Optional<std::string> locale =
return base::android::ConvertUTF8ToJavaString(env, locale); video_tutorial_service_->GetPreferredLocale();
return locale.has_value()
? base::android::ConvertUTF8ToJavaString(env, locale.value())
: ScopedJavaLocalRef<jstring>();
} }
void VideoTutorialServiceBridge::SetPreferredLocale( void VideoTutorialServiceBridge::SetPreferredLocale(
......
...@@ -37,7 +37,7 @@ class VideoTutorialServiceBridge : public base::SupportsUserData::Data { ...@@ -37,7 +37,7 @@ class VideoTutorialServiceBridge : public base::SupportsUserData::Data {
const JavaParamRef<jobject>& jcaller, const JavaParamRef<jobject>& jcaller,
jint j_feature, jint j_feature,
const JavaParamRef<jobject>& jcallback); const JavaParamRef<jobject>& jcallback);
ScopedJavaLocalRef<jobject> GetSupportedLanguages( ScopedJavaLocalRef<jobjectArray> GetSupportedLanguages(
JNIEnv* env, JNIEnv* env,
const JavaParamRef<jobject>& jcaller); const JavaParamRef<jobject>& jcaller);
ScopedJavaLocalRef<jstring> GetPreferredLocale( ScopedJavaLocalRef<jstring> GetPreferredLocale(
......
...@@ -17,7 +17,7 @@ constexpr char kDefaultBaseURL[] = ...@@ -17,7 +17,7 @@ constexpr char kDefaultBaseURL[] =
// Default URL string for GetTutorials RPC. // Default URL string for GetTutorials RPC.
constexpr char kDefaultGetTutorialsPath[] = "/v1/videotutorials"; constexpr char kDefaultGetTutorialsPath[] = "/v1/videotutorials";
// Hindi is the default locale. // The default locale.
constexpr char kDefaultPreferredLocale[] = "en"; constexpr char kDefaultPreferredLocale[] = "en";
// Finch parameter key for base server URL to retrieve the tutorials. // Finch parameter key for base server URL to retrieve the tutorials.
......
...@@ -25,7 +25,8 @@ extern const char kBaseURLKey[]; ...@@ -25,7 +25,8 @@ extern const char kBaseURLKey[];
// Finch parameter key for the default preferred locale. // Finch parameter key for the default preferred locale.
extern const char kPreferredLocaleConfigKey[]; extern const char kPreferredLocaleConfigKey[];
// Default preferred locale setting before users pick. // Default preferred locale setting before user picks the language.
// This will be used as the language for the video tutorial promo cards.
extern const char kDefaultPreferredLocale[]; extern const char kDefaultPreferredLocale[];
// Finch parameter key for the fetch frequency to retrieve the tutorials. // Finch parameter key for the fetch frequency to retrieve the tutorials.
......
...@@ -25,7 +25,7 @@ class TutorialManager { ...@@ -25,7 +25,7 @@ class TutorialManager {
virtual const std::vector<std::string>& GetSupportedLanguages() = 0; virtual const std::vector<std::string>& GetSupportedLanguages() = 0;
// Returns the preferred locale for the video tutorials. // Returns the preferred locale for the video tutorials.
virtual std::string GetPreferredLocale() = 0; virtual base::Optional<std::string> GetPreferredLocale() = 0;
// Sets the user preferred locale for watching the video tutorials. This // Sets the user preferred locale for watching the video tutorials. This
// doesn't update the cached tutorials. GetTutorials must be called for the // doesn't update the cached tutorials. GetTutorials must be called for the
......
...@@ -35,8 +35,13 @@ void TutorialManagerImpl::GetTutorials(GetTutorialsCallback callback) { ...@@ -35,8 +35,13 @@ void TutorialManagerImpl::GetTutorials(GetTutorialsCallback callback) {
return; return;
} }
// Find the data from cache. // Find the data from cache. If the preferred locale is not set, use a default
std::string locale = GetPreferredLocale(); // locale value to show the tutorial promos. Users will be asked again to
// confirm their language before the video starts.
base::Optional<std::string> preferred_locale = GetPreferredLocale();
std::string locale = preferred_locale.has_value()
? preferred_locale.value()
: Config::GetDefaultPreferredLocale();
if (tutorial_group_.has_value() && tutorial_group_->language == locale) { if (tutorial_group_.has_value() && tutorial_group_->language == locale) {
std::move(callback).Run(tutorial_group_->tutorials); std::move(callback).Run(tutorial_group_->tutorials);
return; return;
...@@ -54,10 +59,10 @@ const std::vector<std::string>& TutorialManagerImpl::GetSupportedLanguages() { ...@@ -54,10 +59,10 @@ const std::vector<std::string>& TutorialManagerImpl::GetSupportedLanguages() {
return supported_languages_; return supported_languages_;
} }
std::string TutorialManagerImpl::GetPreferredLocale() { base::Optional<std::string> TutorialManagerImpl::GetPreferredLocale() {
return prefs_->HasPrefPath(kPreferredLocaleKey) if (prefs_->HasPrefPath(kPreferredLocaleKey))
? prefs_->GetString(kPreferredLocaleKey) return prefs_->GetString(kPreferredLocaleKey);
: Config::GetDefaultPreferredLocale(); return base::nullopt;
} }
void TutorialManagerImpl::SetPreferredLocale(const std::string& locale) { void TutorialManagerImpl::SetPreferredLocale(const std::string& locale) {
......
...@@ -30,7 +30,7 @@ class TutorialManagerImpl : public TutorialManager { ...@@ -30,7 +30,7 @@ class TutorialManagerImpl : public TutorialManager {
// TutorialManager implementation. // TutorialManager implementation.
void GetTutorials(GetTutorialsCallback callback) override; void GetTutorials(GetTutorialsCallback callback) override;
const std::vector<std::string>& GetSupportedLanguages() override; const std::vector<std::string>& GetSupportedLanguages() override;
std::string GetPreferredLocale() override; base::Optional<std::string> GetPreferredLocale() override;
void SetPreferredLocale(const std::string& locale) override; void SetPreferredLocale(const std::string& locale) override;
void SaveGroups(std::unique_ptr<std::vector<TutorialGroup>> groups, void SaveGroups(std::unique_ptr<std::vector<TutorialGroup>> groups,
SuccessCallback callback) override; SuccessCallback callback) override;
......
...@@ -89,7 +89,7 @@ const std::vector<std::string>& TutorialServiceImpl::GetSupportedLanguages() { ...@@ -89,7 +89,7 @@ const std::vector<std::string>& TutorialServiceImpl::GetSupportedLanguages() {
return tutorial_manager_->GetSupportedLanguages(); return tutorial_manager_->GetSupportedLanguages();
} }
std::string TutorialServiceImpl::GetPreferredLocale() { base::Optional<std::string> TutorialServiceImpl::GetPreferredLocale() {
return tutorial_manager_->GetPreferredLocale(); return tutorial_manager_->GetPreferredLocale();
} }
......
...@@ -26,7 +26,7 @@ class TutorialServiceImpl : public VideoTutorialService { ...@@ -26,7 +26,7 @@ class TutorialServiceImpl : public VideoTutorialService {
void GetTutorial(FeatureType feature_type, void GetTutorial(FeatureType feature_type,
SingleItemCallback callback) override; SingleItemCallback callback) override;
const std::vector<std::string>& GetSupportedLanguages() override; const std::vector<std::string>& GetSupportedLanguages() override;
std::string GetPreferredLocale() override; base::Optional<std::string> GetPreferredLocale() override;
void SetPreferredLocale(const std::string& locale) override; void SetPreferredLocale(const std::string& locale) override;
private: private:
......
...@@ -35,8 +35,8 @@ class VideoTutorialService : public KeyedService, ...@@ -35,8 +35,8 @@ class VideoTutorialService : public KeyedService,
// Called to retrieve all the supported locales. // Called to retrieve all the supported locales.
virtual const std::vector<std::string>& GetSupportedLanguages() = 0; virtual const std::vector<std::string>& GetSupportedLanguages() = 0;
// Called to retrieve the preferred locale. // Called to retrieve the preferred locale, if it is set by the user.
virtual std::string GetPreferredLocale() = 0; virtual base::Optional<std::string> GetPreferredLocale() = 0;
// Called to set the preferred locale. // Called to set the preferred locale.
virtual void SetPreferredLocale(const std::string& locale) = 0; virtual void SetPreferredLocale(const std::string& locale) = 0;
......
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