Add TabHepler in c++ instead of java world
Global desktop mode setting is applied to webcontents only when tab is created. We can know this by whether checking last committed entry is null or not. With this, we don't need to modify Tab.java.
This commit is contained in:
@@ -17,7 +17,6 @@ import org.chromium.chrome.browser.preferences.BraveSearchEngineUtils;
|
||||
import org.chromium.chrome.browser.preferences.Pref;
|
||||
import org.chromium.chrome.browser.preferences.PrefServiceBridge;
|
||||
import org.chromium.chrome.browser.tab.Tab;
|
||||
import org.chromium.chrome.browser.tab.DesktopModeTabHelper;
|
||||
|
||||
/**
|
||||
* Brave's extension for ChromeActivity
|
||||
@@ -44,12 +43,6 @@ public abstract class BraveActivity extends ChromeActivity {
|
||||
@Override
|
||||
public boolean onMenuOrKeyboardAction(int id, boolean fromMenu) {
|
||||
if (super.onMenuOrKeyboardAction(id, fromMenu)) {
|
||||
if (id == R.id.request_desktop_site_id || id == R.id.request_desktop_site_check_id) {
|
||||
// If user selects desktop site opiton explicitly vi app menu, respect it.
|
||||
// Current tab will ignore global desktop mode.
|
||||
ignoreDesktopModeForTab(getActivityTab());
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@@ -102,13 +95,6 @@ public abstract class BraveActivity extends ChromeActivity {
|
||||
}
|
||||
}
|
||||
|
||||
private void ignoreDesktopModeForTab(Tab tab) {
|
||||
assert tab != null;
|
||||
DesktopModeTabHelper helper = DesktopModeTabHelper.get(tab);
|
||||
if (helper != null)
|
||||
helper.ignoreDesktopMode();
|
||||
}
|
||||
|
||||
private boolean isNoRestoreState() {
|
||||
return ContextUtils.getAppSharedPreferences().getBoolean(PREF_CLOSE_TABS_ON_EXIT, false);
|
||||
}
|
||||
|
||||
+19
-8
@@ -5,19 +5,22 @@
|
||||
|
||||
package org.chromium.chrome.browser.preferences.website;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
import android.os.Bundle;
|
||||
import android.support.v7.preference.Preference;
|
||||
import android.support.v7.preference.PreferenceFragmentCompat;
|
||||
|
||||
import org.chromium.base.ContextUtils;
|
||||
import org.chromium.base.annotations.JNINamespace;
|
||||
import org.chromium.base.annotations.NativeMethods;
|
||||
import org.chromium.chrome.R;
|
||||
import org.chromium.chrome.browser.preferences.ChromeSwitchPreferenceCompat;
|
||||
import org.chromium.chrome.browser.preferences.PreferenceUtils;
|
||||
import org.chromium.chrome.browser.profiles.Profile;
|
||||
|
||||
@JNINamespace("chrome::android")
|
||||
public class DesktopModePreferences
|
||||
extends PreferenceFragmentCompat implements Preference.OnPreferenceChangeListener {
|
||||
public static final String DESKTOP_MODE_KEY = "desktop_mode";
|
||||
private Profile mProfile;
|
||||
|
||||
@Override
|
||||
public void onCreatePreferences(Bundle savedInstanceState, String rootKey) {
|
||||
@@ -26,17 +29,25 @@ public class DesktopModePreferences
|
||||
|
||||
ChromeSwitchPreferenceCompat desktopModePref =
|
||||
(ChromeSwitchPreferenceCompat) findPreference(DESKTOP_MODE_KEY);
|
||||
desktopModePref.setChecked(
|
||||
ContextUtils.getAppSharedPreferences().getBoolean(DESKTOP_MODE_KEY, false));
|
||||
desktopModePref.setChecked(DesktopModePreferencesJni.get().getDesktopModeEnabled(getProfile()));
|
||||
desktopModePref.setOnPreferenceChangeListener(this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public boolean onPreferenceChange(Preference preference, Object newValue) {
|
||||
SharedPreferences.Editor sharedPreferencesEditor =
|
||||
ContextUtils.getAppSharedPreferences().edit();
|
||||
sharedPreferencesEditor.putBoolean(DESKTOP_MODE_KEY, (boolean) newValue);
|
||||
sharedPreferencesEditor.apply();
|
||||
DesktopModePreferencesJni.get().setDesktopModeEnabled((boolean) newValue, getProfile());
|
||||
return true;
|
||||
}
|
||||
|
||||
private Profile getProfile() {
|
||||
if (mProfile == null)
|
||||
mProfile = Profile.getLastUsedProfile();
|
||||
return mProfile;
|
||||
}
|
||||
|
||||
@NativeMethods
|
||||
interface Natives {
|
||||
void setDesktopModeEnabled(boolean enabled, Profile profile);
|
||||
boolean getDesktopModeEnabled(Profile profile);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,19 +0,0 @@
|
||||
/* Copyright (c) 2019 The Brave Authors. All rights reserved.
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.chromium.chrome.browser.tab;
|
||||
|
||||
import org.chromium.chrome.browser.tab.TabUma.TabCreationState;
|
||||
|
||||
/**
|
||||
* Helper class that initializes various tab UserData objects.
|
||||
*/
|
||||
public final class BraveTabHelpers {
|
||||
private BraveTabHelpers() {}
|
||||
|
||||
static void initWebContentsHelpers(Tab tab) {
|
||||
DesktopModeTabHelper.from(tab);
|
||||
}
|
||||
}
|
||||
@@ -1,85 +0,0 @@
|
||||
/* Copyright (c) 2019 The Brave Authors. All rights reserved.
|
||||
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||
* License, v. 2.0. If a copy of the MPL was not distributed with this file,
|
||||
* You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||
|
||||
package org.chromium.chrome.browser.tab;
|
||||
|
||||
import android.content.SharedPreferences;
|
||||
import android.support.annotation.Nullable;
|
||||
|
||||
import org.chromium.base.ContextUtils;
|
||||
import org.chromium.content_public.browser.WebContents;
|
||||
import org.chromium.content_public.browser.WebContentsObserver;
|
||||
import org.chromium.chrome.browser.preferences.website.DesktopModePreferences;
|
||||
|
||||
public class DesktopModeTabHelper extends TabWebContentsUserData {
|
||||
private static final Class<DesktopModeTabHelper> USER_DATA_KEY = DesktopModeTabHelper.class;
|
||||
|
||||
private final boolean mDesktopModeEnabled;
|
||||
private DesktopModeWebContentsObsever mWebContentsObserver;
|
||||
|
||||
private class DesktopModeWebContentsObsever extends WebContentsObserver {
|
||||
private final DesktopModeTabHelper mHelper;
|
||||
|
||||
public DesktopModeWebContentsObsever(WebContents webContents, DesktopModeTabHelper helper) {
|
||||
super(webContents);
|
||||
mHelper = helper;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void navigationEntryCommitted() {
|
||||
updateDesktopMode();
|
||||
}
|
||||
|
||||
private void updateDesktopMode() {
|
||||
mWebContents.get().getNavigationController().setUseDesktopUserAgent(
|
||||
mHelper.mDesktopModeEnabled, false);
|
||||
}
|
||||
}
|
||||
|
||||
static DesktopModeTabHelper from(Tab tab) {
|
||||
DesktopModeTabHelper helper = get(tab);
|
||||
if (helper == null) {
|
||||
helper = tab.getUserDataHost().setUserData(USER_DATA_KEY, new DesktopModeTabHelper(tab));
|
||||
}
|
||||
return helper;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
public static DesktopModeTabHelper get(Tab tab) {
|
||||
return tab != null ? tab.getUserDataHost().getUserData(USER_DATA_KEY) : null;
|
||||
}
|
||||
|
||||
private DesktopModeTabHelper(Tab tab) {
|
||||
super(tab);
|
||||
// This initial setting will be used during the life time of this tab.
|
||||
mDesktopModeEnabled = ContextUtils.getAppSharedPreferences().getBoolean(
|
||||
DesktopModePreferences.DESKTOP_MODE_KEY, false);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void initWebContents(WebContents webContents) {
|
||||
assert mWebContentsObserver == null;
|
||||
mWebContentsObserver = new DesktopModeWebContentsObsever(webContents, this);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void cleanupWebContents(WebContents webContents) {
|
||||
if (mWebContentsObserver == null)
|
||||
return;
|
||||
|
||||
mWebContentsObserver.destroy();
|
||||
mWebContentsObserver = null;
|
||||
}
|
||||
|
||||
public void ignoreDesktopMode() {
|
||||
if (mWebContentsObserver == null)
|
||||
return;
|
||||
|
||||
// Don't override user agent anymore by initial desktop mode setting after
|
||||
// user explicitly toggle desktop view mode.
|
||||
mWebContentsObserver.destroy();
|
||||
mWebContentsObserver = null;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user