diff --git a/src/com/android/settings/DeviceInfoSettings.java b/src/com/android/settings/DeviceInfoSettings.java index c791775ab3a..a5f7c4528ad 100644 --- a/src/com/android/settings/DeviceInfoSettings.java +++ b/src/com/android/settings/DeviceInfoSettings.java @@ -76,7 +76,7 @@ public class DeviceInfoSettings extends DashboardFragment implements Indexable { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_uri_about; } diff --git a/src/com/android/settings/DisplaySettings.java b/src/com/android/settings/DisplaySettings.java index d67758affb6..b91481a5cd5 100644 --- a/src/com/android/settings/DisplaySettings.java +++ b/src/com/android/settings/DisplaySettings.java @@ -77,7 +77,7 @@ public class DisplaySettings extends DashboardFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_uri_display; } diff --git a/src/com/android/settings/IccLockSettings.java b/src/com/android/settings/IccLockSettings.java index 0517b130e1d..b9f3b104c2e 100644 --- a/src/com/android/settings/IccLockSettings.java +++ b/src/com/android/settings/IccLockSettings.java @@ -295,7 +295,7 @@ public class IccLockSettings extends SettingsPreferenceFragment } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_icc_lock; } diff --git a/src/com/android/settings/PrivacySettings.java b/src/com/android/settings/PrivacySettings.java index e5475700c2d..24774e06576 100644 --- a/src/com/android/settings/PrivacySettings.java +++ b/src/com/android/settings/PrivacySettings.java @@ -220,7 +220,7 @@ public class PrivacySettings extends SettingsPreferenceFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_backup_reset; } diff --git a/src/com/android/settings/SettingsPreferenceFragment.java b/src/com/android/settings/SettingsPreferenceFragment.java index 5d3bf002760..96096ef64d2 100644 --- a/src/com/android/settings/SettingsPreferenceFragment.java +++ b/src/com/android/settings/SettingsPreferenceFragment.java @@ -39,8 +39,6 @@ import android.text.TextUtils; import android.util.ArrayMap; import android.util.Log; import android.view.LayoutInflater; -import android.view.Menu; -import android.view.MenuInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; @@ -49,10 +47,11 @@ import com.android.settings.applications.LayoutPreference; import com.android.settings.core.InstrumentedPreferenceFragment; import com.android.settings.core.instrumentation.Instrumentable; import com.android.settings.core.instrumentation.InstrumentedDialogFragment; +import com.android.settings.support.actionbar.HelpMenuController; +import com.android.settings.support.actionbar.HelpResourceProvider; import com.android.settings.widget.LoadingViewController; import com.android.settingslib.CustomDialogPreference; import com.android.settingslib.CustomEditTextPreference; -import com.android.settingslib.HelpUtils; import com.android.settingslib.widget.FooterPreferenceMixin; import java.util.UUID; @@ -61,13 +60,7 @@ import java.util.UUID; * Base class for Settings fragments, with some helper functions and dialog management. */ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceFragment - implements DialogCreatable { - - /** - * The Help Uri Resource key. This can be passed as an extra argument when creating the - * Fragment. - **/ - public static final String HELP_URI_RESOURCE_KEY = "help_uri_resource"; + implements DialogCreatable, HelpResourceProvider { private static final String TAG = "SettingsPreference"; @@ -79,13 +72,11 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF protected final FooterPreferenceMixin mFooterPreferenceMixin = new FooterPreferenceMixin(this, getLifecycle()); - private SettingsDialogFragment mDialogFragment; - - private String mHelpUri; private static final int ORDER_FIRST = -1; private static final int ORDER_LAST = Integer.MAX_VALUE -1; + private SettingsDialogFragment mDialogFragment; // Cache the content resolver for async callbacks private ContentResolver mContentResolver; @@ -144,22 +135,12 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); + HelpMenuController.init(this /* host */); if (icicle != null) { mPreferenceHighlighted = icicle.getBoolean(SAVE_HIGHLIGHTED_KEY); } - - // Prepare help url and enable menu if necessary final Bundle arguments = getArguments(); - final int helpResource; - if (arguments != null && arguments.containsKey(HELP_URI_RESOURCE_KEY)) { - helpResource = arguments.getInt(HELP_URI_RESOURCE_KEY); - } else { - helpResource = getHelpResource(); - } - if (helpResource != 0) { - mHelpUri = getResources().getString(helpResource); - } // Check if we should keep the preferences expanded. if (arguments != null) { @@ -177,8 +158,8 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View root = super.onCreateView(inflater, container, savedInstanceState); - mPinnedHeaderFrameLayout = (ViewGroup) root.findViewById(R.id.pinned_header); - mButtonBar = (ViewGroup) root.findViewById(R.id.button_bar); + mPinnedHeaderFrameLayout = root.findViewById(R.id.pinned_header); + mButtonBar = root.findViewById(R.id.button_bar); return root; } @@ -465,22 +446,6 @@ public abstract class SettingsPreferenceFragment extends InstrumentedPreferenceF return false; } - /** - * Override this if you want to show a help item in the menu, by returning the resource id. - * @return the resource id for the help url - */ - protected int getHelpResource() { - return R.string.help_uri_default; - } - - @Override - public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { - super.onCreateOptionsMenu(menu, inflater); - if (mHelpUri != null && getActivity() != null) { - HelpUtils.prepareHelpMenuItem(getActivity(), menu, mHelpUri, getClass().getName()); - } - } - /* * The name is intentionally made different from Activity#finish(), so that * users won't misunderstand its meaning. diff --git a/src/com/android/settings/WifiCallingSettingsForSub.java b/src/com/android/settings/WifiCallingSettingsForSub.java index 57a4ab2eb8a..ba5ba84a418 100644 --- a/src/com/android/settings/WifiCallingSettingsForSub.java +++ b/src/com/android/settings/WifiCallingSettingsForSub.java @@ -131,7 +131,7 @@ public class WifiCallingSettingsForSub extends SettingsPreferenceFragment }; @Override - protected int getHelpResource() { + public int getHelpResource() { // Helper resource is already defined in the container fragment. return 0; } diff --git a/src/com/android/settings/accessibility/AccessibilitySettings.java b/src/com/android/settings/accessibility/AccessibilitySettings.java index 877894bf131..0611b09302e 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettings.java +++ b/src/com/android/settings/accessibility/AccessibilitySettings.java @@ -230,7 +230,7 @@ public class AccessibilitySettings extends SettingsPreferenceFragment implements } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_uri_accessibility; } diff --git a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java index b820cc2870a..2d2711a9bd0 100644 --- a/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java +++ b/src/com/android/settings/accessibility/AccessibilitySettingsForSetupWizardActivity.java @@ -17,22 +17,13 @@ package com.android.settings.accessibility; import android.app.Fragment; -import android.app.FragmentTransaction; import android.os.Bundle; import android.text.TextUtils; -import android.view.accessibility.AccessibilityEvent; -import android.view.LayoutInflater; import android.view.Menu; -import android.view.View; -import android.view.WindowInsets; -import android.widget.FrameLayout; -import android.widget.LinearLayout; +import android.view.accessibility.AccessibilityEvent; -import com.android.settings.R; import com.android.settings.SettingsActivity; -import com.android.settings.SettingsPreferenceFragment; -import com.android.setupwizardlib.util.SystemBarHelper; -import com.android.setupwizardlib.view.NavigationBar; +import com.android.settings.support.actionbar.HelpResourceProvider; public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivity { @@ -94,7 +85,7 @@ public class AccessibilitySettingsForSetupWizardActivity extends SettingsActivit } // Start the new Fragment. - args.putInt(SettingsPreferenceFragment.HELP_URI_RESOURCE_KEY, 0); + args.putInt(HelpResourceProvider.HELP_URI_RESOURCE_KEY, 0); startPreferenceFragment(Fragment.instantiate(this, fragmentClass, args), true); mSendExtraWindowStateChanged = true; } diff --git a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java index c437a16b54e..db121e2c637 100644 --- a/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java +++ b/src/com/android/settings/accessibility/AccessibilityShortcutPreferenceFragment.java @@ -51,7 +51,7 @@ public class AccessibilityShortcutPreferenceFragment extends ToggleFeaturePrefer } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_accessibility_shortcut; } diff --git a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java index d0197cf8f64..24e87fc5adc 100644 --- a/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/MagnificationPreferenceFragment.java @@ -66,7 +66,7 @@ public final class MagnificationPreferenceFragment extends SettingsPreferenceFra } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_magnification; } diff --git a/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java index a94b72c7fb2..acb918c15bc 100644 --- a/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleAutoclickPreferenceFragment.java @@ -103,7 +103,7 @@ public class ToggleAutoclickPreferenceFragment extends ToggleFeaturePreferenceFr } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_autoclick; } diff --git a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java index 8e76e4857c7..146f69791e8 100644 --- a/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java +++ b/src/com/android/settings/accessibility/ToggleDaltonizerPreferenceFragment.java @@ -41,7 +41,7 @@ public class ToggleDaltonizerPreferenceFragment extends ToggleFeaturePreferenceF } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_color_correction; } diff --git a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java index 53664f52138..9239b8e4659 100644 --- a/src/com/android/settings/accounts/AccountDetailDashboardFragment.java +++ b/src/com/android/settings/accounts/AccountDetailDashboardFragment.java @@ -99,7 +99,7 @@ public class AccountDetailDashboardFragment extends DashboardFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_account_detail; } diff --git a/src/com/android/settings/accounts/AccountSyncSettings.java b/src/com/android/settings/accounts/AccountSyncSettings.java index 675de0ee13f..d83694da449 100644 --- a/src/com/android/settings/accounts/AccountSyncSettings.java +++ b/src/com/android/settings/accounts/AccountSyncSettings.java @@ -573,7 +573,7 @@ public class AccountSyncSettings extends AccountPreferenceBase { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_accounts; } } diff --git a/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java b/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java index de200cb19fb..37584fc059d 100644 --- a/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java +++ b/src/com/android/settings/accounts/UserAndAccountDashboardFragment.java @@ -56,7 +56,7 @@ public class UserAndAccountDashboardFragment extends DashboardFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_user_and_account_dashboard; } diff --git a/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java b/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java index 5eccd4488c9..7d6bdbb35f7 100644 --- a/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java +++ b/src/com/android/settings/applications/AppAndNotificationDashboardFragment.java @@ -48,7 +48,7 @@ public class AppAndNotificationDashboardFragment extends DashboardFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_apps_and_notifications; } diff --git a/src/com/android/settings/applications/ProcessStatsSummary.java b/src/com/android/settings/applications/ProcessStatsSummary.java index cdb8a4c608b..75f8ba663cb 100644 --- a/src/com/android/settings/applications/ProcessStatsSummary.java +++ b/src/com/android/settings/applications/ProcessStatsSummary.java @@ -103,7 +103,7 @@ public class ProcessStatsSummary extends ProcessStatsBase implements OnPreferenc } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_uri_process_stats_summary; } diff --git a/src/com/android/settings/applications/ProcessStatsUi.java b/src/com/android/settings/applications/ProcessStatsUi.java index 9f76fb28e86..cb2a1ebdd1e 100644 --- a/src/com/android/settings/applications/ProcessStatsUi.java +++ b/src/com/android/settings/applications/ProcessStatsUi.java @@ -96,7 +96,7 @@ public class ProcessStatsUi extends ProcessStatsBase { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_uri_process_stats_apps; } diff --git a/src/com/android/settings/bluetooth/BluetoothPairingDetail.java b/src/com/android/settings/bluetooth/BluetoothPairingDetail.java index 60011f9ef20..fcfa3e2336e 100644 --- a/src/com/android/settings/bluetooth/BluetoothPairingDetail.java +++ b/src/com/android/settings/bluetooth/BluetoothPairingDetail.java @@ -169,7 +169,7 @@ public class BluetoothPairingDetail extends DeviceListPreferenceFragment impleme } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_bluetooth; } diff --git a/src/com/android/settings/bluetooth/BluetoothSettings.java b/src/com/android/settings/bluetooth/BluetoothSettings.java index 9789310d18b..72d8023983a 100644 --- a/src/com/android/settings/bluetooth/BluetoothSettings.java +++ b/src/com/android/settings/bluetooth/BluetoothSettings.java @@ -345,7 +345,7 @@ public class BluetoothSettings extends DeviceListPreferenceFragment implements I } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_bluetooth; } diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java index 14acd89a60a..12c3ea3ee64 100644 --- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java +++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragment.java @@ -48,7 +48,7 @@ public class ConnectedDeviceDashboardFragment extends DashboardFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_connected_devices; } diff --git a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java index 6a8f26d9e09..7097b3625fe 100644 --- a/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java +++ b/src/com/android/settings/connecteddevice/ConnectedDeviceDashboardFragmentOld.java @@ -62,7 +62,7 @@ public class ConnectedDeviceDashboardFragmentOld extends DashboardFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_connected_devices; } diff --git a/src/com/android/settings/datausage/DataPlanUsageSummary.java b/src/com/android/settings/datausage/DataPlanUsageSummary.java index 912db0a3877..a56bfa1b9dd 100644 --- a/src/com/android/settings/datausage/DataPlanUsageSummary.java +++ b/src/com/android/settings/datausage/DataPlanUsageSummary.java @@ -74,7 +74,7 @@ public class DataPlanUsageSummary extends DataUsageBase { private NetworkPolicyEditor mPolicyEditor; @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_data_usage; } diff --git a/src/com/android/settings/datausage/DataSaverSummary.java b/src/com/android/settings/datausage/DataSaverSummary.java index c623395ba19..4ada3af4fcc 100644 --- a/src/com/android/settings/datausage/DataSaverSummary.java +++ b/src/com/android/settings/datausage/DataSaverSummary.java @@ -105,7 +105,7 @@ public class DataSaverSummary extends SettingsPreferenceFragment } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_data_saver; } diff --git a/src/com/android/settings/datausage/DataUsageSummary.java b/src/com/android/settings/datausage/DataUsageSummary.java index 6fddb2b98ce..fe220221db5 100644 --- a/src/com/android/settings/datausage/DataUsageSummary.java +++ b/src/com/android/settings/datausage/DataUsageSummary.java @@ -91,7 +91,7 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs private NetworkPolicyEditor mPolicyEditor; @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_data_usage; } diff --git a/src/com/android/settings/datausage/UnrestrictedDataAccess.java b/src/com/android/settings/datausage/UnrestrictedDataAccess.java index b382b8c0122..5b55ada19c6 100644 --- a/src/com/android/settings/datausage/UnrestrictedDataAccess.java +++ b/src/com/android/settings/datausage/UnrestrictedDataAccess.java @@ -133,7 +133,7 @@ public class UnrestrictedDataAccess extends SettingsPreferenceFragment } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_unrestricted_data_access; } diff --git a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java index e38317a824d..cb9e7507c66 100644 --- a/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java +++ b/src/com/android/settings/deletionhelper/AutomaticStorageManagerSettings.java @@ -137,7 +137,7 @@ public class AutomaticStorageManagerSettings extends DashboardFragment } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_uri_storage; } diff --git a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java index 237f9ba725e..8f114fc4758 100644 --- a/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java +++ b/src/com/android/settings/development/DevelopmentSettingsDashboardFragment.java @@ -292,7 +292,7 @@ public class DevelopmentSettingsDashboardFragment extends RestrictedDashboardFra } @Override - protected int getHelpResource() { + public int getHelpResource() { return 0; } diff --git a/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java b/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java index c482d8716d8..8f37c6793ee 100644 --- a/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java +++ b/src/com/android/settings/development/featureflags/FeatureFlagsDashboard.java @@ -46,7 +46,7 @@ public class FeatureFlagsDashboard extends DashboardFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return 0; } diff --git a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java index 5b9b3750617..341c76f2e42 100644 --- a/src/com/android/settings/deviceinfo/StorageDashboardFragment.java +++ b/src/com/android/settings/deviceinfo/StorageDashboardFragment.java @@ -117,7 +117,7 @@ public class StorageDashboardFragment extends DashboardFragment } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_storage_dashboard; } diff --git a/src/com/android/settings/deviceinfo/StorageSettings.java b/src/com/android/settings/deviceinfo/StorageSettings.java index e9d3c85b503..0f88b4a3992 100644 --- a/src/com/android/settings/deviceinfo/StorageSettings.java +++ b/src/com/android/settings/deviceinfo/StorageSettings.java @@ -100,7 +100,7 @@ public class StorageSettings extends SettingsPreferenceFragment implements Index } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_uri_storage; } diff --git a/src/com/android/settings/display/NightDisplaySettings.java b/src/com/android/settings/display/NightDisplaySettings.java index ab94720d095..1718d6c8768 100644 --- a/src/com/android/settings/display/NightDisplaySettings.java +++ b/src/com/android/settings/display/NightDisplaySettings.java @@ -75,7 +75,7 @@ public class NightDisplaySettings extends SettingsPreferenceFragment } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_night_display; } diff --git a/src/com/android/settings/dream/DreamSettings.java b/src/com/android/settings/dream/DreamSettings.java index 94ec1496fa8..c3eaa7f24ec 100644 --- a/src/com/android/settings/dream/DreamSettings.java +++ b/src/com/android/settings/dream/DreamSettings.java @@ -99,7 +99,7 @@ public class DreamSettings extends DashboardFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_screen_saver; } diff --git a/src/com/android/settings/fingerprint/FingerprintSettings.java b/src/com/android/settings/fingerprint/FingerprintSettings.java index fb09f7ab0c4..ad7f83acd58 100644 --- a/src/com/android/settings/fingerprint/FingerprintSettings.java +++ b/src/com/android/settings/fingerprint/FingerprintSettings.java @@ -545,7 +545,7 @@ public class FingerprintSettings extends SubSettings { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_fingerprint; } diff --git a/src/com/android/settings/fuelgauge/PowerUsageSummary.java b/src/com/android/settings/fuelgauge/PowerUsageSummary.java index dd8c169e805..bf3cc645975 100644 --- a/src/com/android/settings/fuelgauge/PowerUsageSummary.java +++ b/src/com/android/settings/fuelgauge/PowerUsageSummary.java @@ -340,7 +340,7 @@ public class PowerUsageSummary extends PowerUsageBase implements } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_battery; } diff --git a/src/com/android/settings/gestures/DoubleTapScreenSettings.java b/src/com/android/settings/gestures/DoubleTapScreenSettings.java index c0cd453e4d6..f2148b491b2 100644 --- a/src/com/android/settings/gestures/DoubleTapScreenSettings.java +++ b/src/com/android/settings/gestures/DoubleTapScreenSettings.java @@ -68,7 +68,7 @@ public class DoubleTapScreenSettings extends DashboardFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_double_tap_screen; } diff --git a/src/com/android/settings/gestures/PickupGestureSettings.java b/src/com/android/settings/gestures/PickupGestureSettings.java index a4f17761588..1762ba8445e 100644 --- a/src/com/android/settings/gestures/PickupGestureSettings.java +++ b/src/com/android/settings/gestures/PickupGestureSettings.java @@ -68,7 +68,7 @@ public class PickupGestureSettings extends DashboardFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_pickup_gesture; } diff --git a/src/com/android/settings/network/NetworkDashboardFragment.java b/src/com/android/settings/network/NetworkDashboardFragment.java index 2a04d274820..4b1da310bdd 100644 --- a/src/com/android/settings/network/NetworkDashboardFragment.java +++ b/src/com/android/settings/network/NetworkDashboardFragment.java @@ -78,7 +78,7 @@ public class NetworkDashboardFragment extends DashboardFragment implements } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_network_dashboard; } diff --git a/src/com/android/settings/notification/SoundSettings.java b/src/com/android/settings/notification/SoundSettings.java index a7243384a7c..6e998f6fe32 100644 --- a/src/com/android/settings/notification/SoundSettings.java +++ b/src/com/android/settings/notification/SoundSettings.java @@ -71,7 +71,7 @@ public class SoundSettings extends DashboardFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_sound; } diff --git a/src/com/android/settings/notification/ZenModeSettings.java b/src/com/android/settings/notification/ZenModeSettings.java index fbc9f7db5c4..22d6fcad7ea 100644 --- a/src/com/android/settings/notification/ZenModeSettings.java +++ b/src/com/android/settings/notification/ZenModeSettings.java @@ -54,7 +54,7 @@ public class ZenModeSettings extends ZenModeSettingsBase { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_uri_interruptions; } diff --git a/src/com/android/settings/password/ChooseLockGeneric.java b/src/com/android/settings/password/ChooseLockGeneric.java index a694603fd95..e5ba200737a 100644 --- a/src/com/android/settings/password/ChooseLockGeneric.java +++ b/src/com/android/settings/password/ChooseLockGeneric.java @@ -753,7 +753,7 @@ public class ChooseLockGeneric extends SettingsActivity { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_choose_lockscreen; } diff --git a/src/com/android/settings/print/PrintSettingsFragment.java b/src/com/android/settings/print/PrintSettingsFragment.java index 6bdce482763..56bebcce94a 100644 --- a/src/com/android/settings/print/PrintSettingsFragment.java +++ b/src/com/android/settings/print/PrintSettingsFragment.java @@ -98,7 +98,7 @@ public class PrintSettingsFragment extends ProfileSettingsPreferenceFragment } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_uri_printing; } diff --git a/src/com/android/settings/security/EncryptionAndCredential.java b/src/com/android/settings/security/EncryptionAndCredential.java index 301742b05f7..62f5a0c53d2 100644 --- a/src/com/android/settings/security/EncryptionAndCredential.java +++ b/src/com/android/settings/security/EncryptionAndCredential.java @@ -76,7 +76,7 @@ public class EncryptionAndCredential extends DashboardFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_encryption; } diff --git a/src/com/android/settings/security/LockscreenDashboardFragment.java b/src/com/android/settings/security/LockscreenDashboardFragment.java index 6ff2ca128b5..df4ca30d995 100644 --- a/src/com/android/settings/security/LockscreenDashboardFragment.java +++ b/src/com/android/settings/security/LockscreenDashboardFragment.java @@ -71,7 +71,7 @@ public class LockscreenDashboardFragment extends DashboardFragment } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_lockscreen; } diff --git a/src/com/android/settings/security/ScreenPinningSettings.java b/src/com/android/settings/security/ScreenPinningSettings.java index 488e0c82702..6e4856ee423 100644 --- a/src/com/android/settings/security/ScreenPinningSettings.java +++ b/src/com/android/settings/security/ScreenPinningSettings.java @@ -78,7 +78,7 @@ public class ScreenPinningSettings extends SettingsPreferenceFragment } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_screen_pinning; } diff --git a/src/com/android/settings/security/SecuritySettings.java b/src/com/android/settings/security/SecuritySettings.java index 01c138a1904..31f1ec6d1e2 100644 --- a/src/com/android/settings/security/SecuritySettings.java +++ b/src/com/android/settings/security/SecuritySettings.java @@ -749,7 +749,7 @@ public class SecuritySettings extends SettingsPreferenceFragment } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_security; } diff --git a/src/com/android/settings/security/trustagent/TrustAgentSettings.java b/src/com/android/settings/security/trustagent/TrustAgentSettings.java index c7001a03752..b7f89bad7c4 100644 --- a/src/com/android/settings/security/trustagent/TrustAgentSettings.java +++ b/src/com/android/settings/security/trustagent/TrustAgentSettings.java @@ -79,7 +79,7 @@ public class TrustAgentSettings extends SettingsPreferenceFragment implements } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_trust_agent; } diff --git a/src/com/android/settings/support/actionbar/HelpMenuController.java b/src/com/android/settings/support/actionbar/HelpMenuController.java new file mode 100644 index 00000000000..a95d44e5d44 --- /dev/null +++ b/src/com/android/settings/support/actionbar/HelpMenuController.java @@ -0,0 +1,67 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.support.actionbar; + +import static com.android.settings.support.actionbar.HelpResourceProvider.HELP_URI_RESOURCE_KEY; + +import android.annotation.NonNull; +import android.app.Activity; +import android.app.Fragment; +import android.os.Bundle; +import android.view.Menu; +import android.view.MenuInflater; + +import com.android.settingslib.HelpUtils; +import com.android.settingslib.core.lifecycle.LifecycleObserver; +import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment; +import com.android.settingslib.core.lifecycle.events.OnCreateOptionsMenu; + +/** + * A controller that adds help menu to any Settings page. + */ +public class HelpMenuController implements LifecycleObserver, OnCreateOptionsMenu { + + private final Fragment mHost; + + public static void init(@NonNull ObservablePreferenceFragment host) { + host.getLifecycle().addObserver(new HelpMenuController(host)); + } + + private HelpMenuController(@NonNull Fragment host) { + mHost = host; + } + + @Override + public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { + final Bundle arguments = mHost.getArguments(); + int helpResourceId = 0; + if (arguments != null && arguments.containsKey(HELP_URI_RESOURCE_KEY)) { + helpResourceId = arguments.getInt(HELP_URI_RESOURCE_KEY); + } else if (mHost instanceof HelpResourceProvider) { + helpResourceId = ((HelpResourceProvider) mHost).getHelpResource(); + } + + String helpUri = null; + if (helpResourceId != 0) { + helpUri = mHost.getContext().getString(helpResourceId); + } + final Activity activity = mHost.getActivity(); + if (helpUri != null && activity != null) { + HelpUtils.prepareHelpMenuItem(activity, menu, helpUri, mHost.getClass().getName()); + } + } +} diff --git a/src/com/android/settings/support/actionbar/HelpResourceProvider.java b/src/com/android/settings/support/actionbar/HelpResourceProvider.java new file mode 100644 index 00000000000..289898689e3 --- /dev/null +++ b/src/com/android/settings/support/actionbar/HelpResourceProvider.java @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.support.actionbar; + +import com.android.settings.R; + +public interface HelpResourceProvider { + /** + * The Help Uri Resource key. This can be passed as an extra argument when creating the + * Fragment. + **/ + String HELP_URI_RESOURCE_KEY = "help_uri_resource"; + + /** + * Override this if you want to show a help item in the menu, by returning the resource id. + * + * @return the resource id for the help url + */ + default int getHelpResource() { + return R.string.help_uri_default; + } +} diff --git a/src/com/android/settings/system/SystemDashboardFragment.java b/src/com/android/settings/system/SystemDashboardFragment.java index 2485cceb44d..c01bfcc08ff 100644 --- a/src/com/android/settings/system/SystemDashboardFragment.java +++ b/src/com/android/settings/system/SystemDashboardFragment.java @@ -56,7 +56,7 @@ public class SystemDashboardFragment extends DashboardFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_system_dashboard; } diff --git a/src/com/android/settings/vpn2/VpnSettings.java b/src/com/android/settings/vpn2/VpnSettings.java index d40441fa1a9..0a3bfe65c04 100644 --- a/src/com/android/settings/vpn2/VpnSettings.java +++ b/src/com/android/settings/vpn2/VpnSettings.java @@ -401,7 +401,7 @@ public class VpnSettings extends RestrictedSettingsFragment implements } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_vpn; } diff --git a/src/com/android/settings/wallpaper/WallpaperTypeSettings.java b/src/com/android/settings/wallpaper/WallpaperTypeSettings.java index a87249ea350..1ff1faad608 100644 --- a/src/com/android/settings/wallpaper/WallpaperTypeSettings.java +++ b/src/com/android/settings/wallpaper/WallpaperTypeSettings.java @@ -43,7 +43,7 @@ public class WallpaperTypeSettings extends SettingsPreferenceFragment implements } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_uri_wallpaper; } diff --git a/src/com/android/settings/wfd/WifiDisplaySettings.java b/src/com/android/settings/wfd/WifiDisplaySettings.java index 3fe438fda1d..683c4834bee 100755 --- a/src/com/android/settings/wfd/WifiDisplaySettings.java +++ b/src/com/android/settings/wfd/WifiDisplaySettings.java @@ -136,7 +136,7 @@ public final class WifiDisplaySettings extends SettingsPreferenceFragment { } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_remote_display; } diff --git a/src/com/android/settings/wifi/WifiSettings.java b/src/com/android/settings/wifi/WifiSettings.java index cc48064710b..30b6d96dfbc 100644 --- a/src/com/android/settings/wifi/WifiSettings.java +++ b/src/com/android/settings/wifi/WifiSettings.java @@ -1071,7 +1071,7 @@ public class WifiSettings extends RestrictedSettingsFragment } @Override - protected int getHelpResource() { + public int getHelpResource() { return R.string.help_url_wifi; } diff --git a/tests/robotests/src/com/android/settings/support/actionbar/HelpMenuControllerTest.java b/tests/robotests/src/com/android/settings/support/actionbar/HelpMenuControllerTest.java new file mode 100644 index 00000000000..24e7d812aae --- /dev/null +++ b/tests/robotests/src/com/android/settings/support/actionbar/HelpMenuControllerTest.java @@ -0,0 +1,84 @@ +/* + * Copyright (C) 2017 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.android.settings.support.actionbar; + +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; + +import android.content.Context; +import android.os.Bundle; + +import com.android.settings.TestConfig; +import com.android.settings.testutils.SettingsRobolectricTestRunner; +import com.android.settingslib.core.lifecycle.ObservablePreferenceFragment; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.robolectric.annotation.Config; + +@RunWith(SettingsRobolectricTestRunner.class) +@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION_O) +public class HelpMenuControllerTest { + + @Mock + private Context mContext; + private TestFragment mHost; + + @Before + public void setUp() { + MockitoAnnotations.initMocks(this); + mHost = spy(new TestFragment()); + doReturn(mContext).when(mHost).getContext(); + } + + @Test + public void onCreateOptionsMenu_withArgumentOverride_shouldPrepareHelpUsingOverride() { + final Bundle bundle = new Bundle(); + bundle.putInt(HelpResourceProvider.HELP_URI_RESOURCE_KEY, 123); + mHost.setArguments(bundle); + + HelpMenuController.init(mHost); + + mHost.getLifecycle().onCreateOptionsMenu(null /* menu */, null /* inflater */); + + verify(mContext).getString(123); + + } + + @Test + public void onCreateOptionsMenu_noArgumentOverride_shouldPrepareHelpUsingProvider() { + HelpMenuController.init(mHost); + + mHost.getLifecycle().onCreateOptionsMenu(null /* menu */, null /* inflater */); + + verify(mContext).getString(mHost.getHelpResource()); + } + + + public static class TestFragment extends ObservablePreferenceFragment + implements HelpResourceProvider { + + @Override + public void onCreatePreferences(Bundle savedInstanceState, String rootKey) { + + } + } +}