Add-exit-menu-item.patch 6.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. From: Serg <serg.zhukovsky@gmail.com>
  2. Date: Tue, 31 Jan 2017 22:12:27 -0500
  3. Subject: Add exit menu item
  4. Corrected Exit functionality
  5. License: GPL-3.0-only - https://spdx.org/licenses/GPL-3.0-only.html
  6. ---
  7. chrome/android/java/res/menu/main_menu.xml | 6 ++++++
  8. .../org/chromium/chrome/browser/ApplicationLifetime.java | 2 ++
  9. .../org/chromium/chrome/browser/ChromeTabbedActivity.java | 4 ++++
  10. .../src/org/chromium/chrome/browser/app/ChromeActivity.java | 6 ++++++
  11. .../chrome/browser/init/ChromeLifetimeController.java | 6 +++++-
  12. .../browser/ui/android/strings/android_chrome_strings.grd | 3 +++
  13. 6 files changed, 26 insertions(+), 1 deletion(-)
  14. diff --git a/chrome/android/java/res/menu/main_menu.xml b/chrome/android/java/res/menu/main_menu.xml
  15. --- a/chrome/android/java/res/menu/main_menu.xml
  16. +++ b/chrome/android/java/res/menu/main_menu.xml
  17. @@ -156,6 +156,9 @@
  18. <item android:id="@+id/managed_by_menu_id"
  19. android:title="@string/managed_browser"
  20. android:icon="@drawable/ic_business" />
  21. + <item android:id="@+id/exit_id"
  22. + android:title="@string/menu_exit"
  23. + android:icon="@drawable/ic_exit_to_app_white_24dp" />
  24. </group>
  25. <!-- Items shown only in the tab switcher -->
  26. @@ -182,6 +185,9 @@
  27. <item android:id="@id/preferences_id"
  28. android:title="@string/menu_settings"
  29. android:icon="@drawable/settings_cog" />
  30. + <item android:id="@+id/exit_id"
  31. + android:title="@string/menu_exit"
  32. + android:icon="@drawable/ic_exit_to_app_white_24dp" />
  33. </group>
  34. <!-- Items shown only when the tablet has no visible tabs -->
  35. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java b/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java
  36. --- a/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java
  37. +++ b/chrome/android/java/src/org/chromium/chrome/browser/ApplicationLifetime.java
  38. @@ -6,6 +6,7 @@ package org.chromium.chrome.browser;
  39. import org.chromium.base.ObserverList;
  40. import org.chromium.base.annotations.CalledByNative;
  41. +import org.chromium.chrome.browser.incognito.IncognitoNotificationManager;
  42. /**
  43. * Watches for when Chrome is told to restart itself.
  44. @@ -42,6 +43,7 @@ public class ApplicationLifetime {
  45. @CalledByNative
  46. public static void terminate(boolean restart) {
  47. + IncognitoNotificationManager.dismissIncognitoNotification();
  48. for (Observer observer : sObservers) {
  49. observer.onTerminate(restart);
  50. }
  51. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
  52. --- a/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
  53. +++ b/chrome/android/java/src/org/chromium/chrome/browser/ChromeTabbedActivity.java
  54. @@ -211,6 +211,8 @@ import java.util.HashSet;
  55. import java.util.List;
  56. import java.util.Locale;
  57. +import org.chromium.chrome.browser.ApplicationLifetime;
  58. +
  59. /**
  60. * This is the main activity for ChromeMobile when not running in document mode. All the tabs
  61. * are accessible via a chrome specific tab switching UI.
  62. @@ -2091,6 +2093,8 @@ public class ChromeTabbedActivity extends ChromeActivity<ChromeActivityComponent
  63. } else if (id == R.id.close_tab) {
  64. getCurrentTabModel().closeTab(currentTab, true, false, true);
  65. RecordUserAction.record("MobileTabClosed");
  66. + } else if (id == R.id.exit_id) {
  67. + ApplicationLifetime.terminate(false);
  68. } else if (id == R.id.close_all_tabs_menu_id) {
  69. // Close both incognito and normal tabs.
  70. CloseAllTabsDialog.show(this, getModalDialogManagerSupplier(),
  71. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
  72. --- a/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
  73. +++ b/chrome/android/java/src/org/chromium/chrome/browser/app/ChromeActivity.java
  74. @@ -61,6 +61,7 @@ import org.chromium.chrome.R;
  75. import org.chromium.chrome.browser.ActivityTabProvider;
  76. import org.chromium.chrome.browser.ActivityUtils;
  77. import org.chromium.chrome.browser.AppHooks;
  78. +import org.chromium.chrome.browser.ApplicationLifetime;
  79. import org.chromium.chrome.browser.ChromeActivitySessionTracker;
  80. import org.chromium.chrome.browser.ChromeApplicationImpl;
  81. import org.chromium.chrome.browser.ChromeKeyboardVisibilityDelegate;
  82. @@ -2395,6 +2396,11 @@ public abstract class ChromeActivity<C extends ChromeActivityComponent>
  83. return true;
  84. }
  85. + if (id == R.id.exit_id) {
  86. + ApplicationLifetime.terminate(false);
  87. + return true;
  88. + }
  89. +
  90. if (id == R.id.update_menu_id) {
  91. UpdateMenuItemHelper.getInstance().onMenuItemClicked(this);
  92. return true;
  93. diff --git a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java
  94. --- a/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java
  95. +++ b/chrome/android/java/src/org/chromium/chrome/browser/init/ChromeLifetimeController.java
  96. @@ -82,7 +82,11 @@ class ChromeLifetimeController implements ApplicationLifetime.Observer,
  97. // Kick off a timer to kill the process after a delay, which fires only if the Activities
  98. // take too long to be finished.
  99. - mHandler.postDelayed(mRestartRunnable, WATCHDOG_DELAY_MS);
  100. + if (restart) {
  101. + mHandler.postDelayed(mRestartRunnable, WATCHDOG_DELAY_MS);
  102. + } else {
  103. + fireBrowserRestartActivityIntent();
  104. + }
  105. }
  106. @Override
  107. diff --git a/chrome/browser/ui/android/strings/android_chrome_strings.grd b/chrome/browser/ui/android/strings/android_chrome_strings.grd
  108. --- a/chrome/browser/ui/android/strings/android_chrome_strings.grd
  109. +++ b/chrome/browser/ui/android/strings/android_chrome_strings.grd
  110. @@ -3407,6 +3407,9 @@ To change this setting, <ph name="BEGIN_LINK">&lt;resetlink&gt;</ph>reset sync<p
  111. <message name="IDS_MENU_AUTO_DARK_WEB_CONTENTS" desc="Menu item in Chrome's overflow/options menu. When Chrome's browser UI is set to dark theme and this option is checked, sites will have a dark theme automatically applied as well. [CHAR_LIMIT=24]">
  112. Dark theme
  113. </message>
  114. + <message name="IDS_MENU_EXIT" desc="Menu item for exit browser. [CHAR-LIMIT=27]">
  115. + Exit
  116. + </message>
  117. <message name="IDS_MENU_READER_MODE_PREFS" desc="Menu item to show reader mode preferences pane, which allows users to change the appearance (font size, theme, etc.) of the page. [CHAR_LIMIT=27]">
  118. Appearance
  119. </message>
  120. --
  121. 2.25.1