From: Soren Stoutner <soren@stoutner.com> Date: Thu, 18 Apr 2019 22:13:43 +0000 (-0700) Subject: Fix unwanted restarts when a keyboard is connected/disconnected. https://redmine... X-Git-Tag: v3.0~8 X-Git-Url: https://gitweb.stoutner.com/?a=commitdiff_plain;h=1aa252f44922127b9053655a43b0df4e479438ed;p=PrivacyBrowserAndroid.git Fix unwanted restarts when a keyboard is connected/disconnected. https://redmine.stoutner.com/issues/408 --- diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 0608b041..94c0a980 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -82,6 +82,7 @@ <!-- The theme has to be defined here or an ugly title bar is displayed when the app launches. `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes, which preserves scroll location in the WebView. + `android:configChanges="keyboard|keyboardHidden"` makes the activity not reload when a bluetooth keyboard is activated/goes to sleep. `android:launchMode="singleTask"` makes the app launch in a new task instead of inside the task of the program that sends it an intent. It also makes it reuse an existing Privacy Browser activity if available instead of launching a new one. `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. @@ -90,7 +91,7 @@ android:name=".activities.MainWebViewActivity" android:label="@string/privacy_browser" android:theme="@style/PrivacyBrowserLight" - android:configChanges="orientation|screenSize" + android:configChanges="orientation|screenSize|keyboard|keyboardHidden" android:launchMode="singleTask" android:screenOrientation="fullUser" android:persistableMode="persistNever" @@ -134,123 +135,134 @@ <!-- `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. - `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. - `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> + `android:configChanges="keyboard|keyboardHidden"` makes the activity not reload when a bluetooth keyboard is activated/goes to sleep. + `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. + `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> <activity android:name=".activities.BookmarksActivity" android:label="@string/bookmarks" android:parentActivityName=".activities.MainWebViewActivity" - android:configChanges="orientation|screenSize" + android:configChanges="orientation|screenSize|keyboard|keyboardHidden" android:screenOrientation="fullUser" android:persistableMode="persistNever" tools:ignore="UnusedAttribute" /> <!-- `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. - `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. - `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> + `android:configChanges="keyboard|keyboardHidden"` makes the activity not reload when a bluetooth keyboard is activated/goes to sleep. + `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. + `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> <activity android:name=".activities.BookmarksDatabaseViewActivity" android:label="@string/bookmarks_database_view" android:parentActivityName=".activities.BookmarksActivity" - android:configChanges="orientation|screenSize" + android:configChanges="orientation|screenSize|keyboard|keyboardHidden" android:screenOrientation="fullUser" android:persistableMode="persistNever" tools:ignore="UnusedAttribute" /> <!-- `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. - `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. - `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> + `android:configChanges="keyboard|keyboardHidden"` makes the activity not reload when a bluetooth keyboard is activated/goes to sleep. + `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. + `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> <activity android:name=".activities.RequestsActivity" android:label="@string/requests" android:parentActivityName=".activities.MainWebViewActivity" - android:configChanges="orientation|screenSize" + android:configChanges="orientation|screenSize|keyboard|keyboardHidden" android:screenOrientation="fullUser" android:persistableMode="persistNever" tools:ignore="UnusedAttribute" /> - <!-- `android:windowSoftInputMode="stateAlwaysHidden"` keeps the keyboard from displaying when the screen is rotated and after the `AddDomainDialog` is dismissed. - `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. - `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> + <!-- `android:configChanges="keyboard|keyboardHidden"` makes the activity not reload when a bluetooth keyboard is activated/goes to sleep. + `android:windowSoftInputMode="stateAlwaysHidden"` keeps the keyboard from displaying when the screen is rotated and after the `AddDomainDialog` is dismissed. + `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. + `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> <activity android:name=".activities.DomainsActivity" android:label="@string/domains" android:parentActivityName=".activities.MainWebViewActivity" + android:configChanges="keyboard|keyboardHidden" android:screenOrientation="fullUser" android:windowSoftInputMode="stateAlwaysHidden" android:persistableMode="persistNever" tools:ignore="UnusedAttribute" /> <!-- `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. - `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. - `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> + `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. + `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. + `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> <activity android:name=".activities.SettingsActivity" android:label="@string/settings" android:parentActivityName=".activities.MainWebViewActivity" - android:configChanges="orientation|screenSize" + android:configChanges="orientation|screenSize|keyboard|keyboardHidden" android:screenOrientation="fullUser" android:persistableMode="persistNever" tools:ignore="UnusedAttribute" /> <!-- `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. - `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. - `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> + `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. + `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. + `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> <activity android:name=".activities.ImportExportActivity" android:label="@string/import_export" android:parentActivityName=".activities.MainWebViewActivity" - android:configChanges="orientation|screenSize" + android:configChanges="orientation|screenSize|keyboard|keyboardHidden" android:screenOrientation="fullUser" android:persistableMode="persistNever" tools:ignore="UnusedAttribute" /> <!-- `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. - `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. - `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> + `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. + `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. + `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> <activity android:name=".activities.LogcatActivity" android:label="@string/logcat" android:parentActivityName=".activities.MainWebViewActivity" - android:configChanges="orientation|screenSize" + android:configChanges="orientation|screenSize|keyboard|keyboardHidden" android:screenOrientation="fullUser" android:persistableMode="persistNever" tools:ignore="UnusedAttribute" /> <!-- `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. - `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. - `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> + `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. + `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. + `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> <activity android:name=".activities.GuideActivity" android:label="@string/guide" android:parentActivityName=".activities.MainWebViewActivity" - android:configChanges="orientation|screenSize" + android:configChanges="orientation|screenSize|keyboard|keyboardHidden" android:screenOrientation="fullUser" android:persistableMode="persistNever" tools:ignore="UnusedAttribute" /> <!-- `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. - `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. - `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> + `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. + `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. + `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> <activity android:name=".activities.AboutActivity" android:label="@string/about_privacy_browser" android:parentActivityName=".activities.MainWebViewActivity" - android:configChanges="orientation|screenSize" + android:configChanges="orientation|screenSize|keyboard|keyboardHidden" android:screenOrientation="fullUser" android:persistableMode="persistNever" tools:ignore="UnusedAttribute" /> <!-- `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. - `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. - `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> + `android:configChanges="orientation|screenSize"` makes the activity not reload when the orientation changes. + `android:persistableMode="persistNever"` removes Privacy Browser from the recent apps list on a device reboot. + `tools:ignore="unusedAttribute"` removes the lint warning that `persistableMode` does not apply to API < 21. --> <activity android:name=".activities.ViewSourceActivity" android:label="@string/view_source" android:parentActivityName=".activities.MainWebViewActivity" - android:configChanges="orientation|screenSize" + android:configChanges="orientation|screenSize|keyboard|keyboardHidden" android:screenOrientation="fullUser" android:persistableMode="persistNever" tools:ignore="UnusedAttribute" /> </application> -</manifest> +</manifest> \ No newline at end of file diff --git a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java index 4050a01f..e2664e5b 100644 --- a/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java +++ b/app/src/main/java/com/stoutner/privacybrowser/activities/MainWebViewActivity.java @@ -4730,15 +4730,6 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook // Get a handle for the navigation requests menu item. The menu is 0 based. MenuItem navigationRequestsMenuItem = navigationMenu.getItem(6); - // Get handles for the options menu items. - MenuItem blocklistsMenuItem = optionsMenu.findItem(R.id.blocklists); - MenuItem easyListMenuItem = optionsMenu.findItem(R.id.easylist); - MenuItem easyPrivacyMenuItem = optionsMenu.findItem(R.id.easyprivacy); - MenuItem fanboysAnnoyanceListMenuItem = optionsMenu.findItem(R.id.fanboys_annoyance_list); - MenuItem fanboysSocialBlockingListMenuItem = optionsMenu.findItem(R.id.fanboys_social_blocking_list); - MenuItem ultraPrivacyMenuItem = optionsMenu.findItem(R.id.ultraprivacy); - MenuItem blockAllThirdPartyRequestsMenuItem = optionsMenu.findItem(R.id.block_all_third_party_requests); - // Create an empty web resource response to be used if the resource request is blocked. WebResourceResponse emptyWebResourceResponse = new WebResourceResponse("text/plain", "utf8", new ByteArrayInputStream("".getBytes())); @@ -4802,9 +4793,13 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook activity.runOnUiThread(() -> { // Update the menu item titles. navigationRequestsMenuItem.setTitle(getString(R.string.requests) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); - blocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); - blockAllThirdPartyRequestsMenuItem.setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.THIRD_PARTY_REQUESTS) + " - " + - getString(R.string.block_all_third_party_requests)); + + // Update the options menu if it has been populated. + if (optionsMenu != null) { + optionsMenu.findItem(R.id.blocklists).setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); + optionsMenu.findItem(R.id.block_all_third_party_requests).setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.THIRD_PARTY_REQUESTS) + " - " + + getString(R.string.block_all_third_party_requests)); + } }); } @@ -4833,8 +4828,12 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook activity.runOnUiThread(() -> { // Update the menu item titles. navigationRequestsMenuItem.setTitle(getString(R.string.requests) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); - blocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); - ultraPrivacyMenuItem.setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.ULTRA_PRIVACY) + " - " + getString(R.string.ultraprivacy)); + + // Update the options menu if it has been populated. + if (optionsMenu != null) { + optionsMenu.findItem(R.id.blocklists).setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); + optionsMenu.findItem(R.id.ultraprivacy).setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.ULTRA_PRIVACY) + " - " + getString(R.string.ultraprivacy)); + } }); } @@ -4870,8 +4869,12 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook activity.runOnUiThread(() -> { // Update the menu item titles. navigationRequestsMenuItem.setTitle(getString(R.string.requests) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); - blocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); - easyListMenuItem.setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.EASY_LIST) + " - " + getString(R.string.easylist)); + + // Update the options menu if it has been populated. + if (optionsMenu != null) { + optionsMenu.findItem(R.id.blocklists).setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); + optionsMenu.findItem(R.id.easylist).setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.EASY_LIST) + " - " + getString(R.string.easylist)); + } }); } @@ -4904,8 +4907,12 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook activity.runOnUiThread(() -> { // Update the menu item titles. navigationRequestsMenuItem.setTitle(getString(R.string.requests) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); - blocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); - easyPrivacyMenuItem.setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.EASY_PRIVACY) + " - " + getString(R.string.easyprivacy)); + + // Update the options menu if it has been populated. + if (optionsMenu != null) { + optionsMenu.findItem(R.id.blocklists).setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); + optionsMenu.findItem(R.id.easyprivacy).setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.EASY_PRIVACY) + " - " + getString(R.string.easyprivacy)); + } }); } @@ -4938,9 +4945,13 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook activity.runOnUiThread(() -> { // Update the menu item titles. navigationRequestsMenuItem.setTitle(getString(R.string.requests) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); - blocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); - fanboysAnnoyanceListMenuItem.setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.FANBOYS_ANNOYANCE_LIST) + " - " + - getString(R.string.fanboys_annoyance_list)); + + // Update the options menu if it has been populated. + if (optionsMenu != null) { + optionsMenu.findItem(R.id.blocklists).setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); + optionsMenu.findItem(R.id.fanboys_annoyance_list).setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.FANBOYS_ANNOYANCE_LIST) + " - " + + getString(R.string.fanboys_annoyance_list)); + } }); } @@ -4971,9 +4982,13 @@ public class MainWebViewActivity extends AppCompatActivity implements CreateBook activity.runOnUiThread(() -> { // Update the menu item titles. navigationRequestsMenuItem.setTitle(getString(R.string.requests) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); - blocklistsMenuItem.setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); - fanboysSocialBlockingListMenuItem.setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.FANBOYS_SOCIAL_BLOCKING_LIST) + " - " + - getString(R.string.fanboys_social_blocking_list)); + + // Update the options menu if it has been populated. + if (optionsMenu != null) { + optionsMenu.findItem(R.id.blocklists).setTitle(getString(R.string.blocklists) + " - " + nestedScrollWebView.getRequestsCount(NestedScrollWebView.BLOCKED_REQUESTS)); + optionsMenu.findItem(R.id.fanboys_social_blocking_list).setTitle(nestedScrollWebView.getRequestsCount(NestedScrollWebView.FANBOYS_SOCIAL_BLOCKING_LIST) + " - " + + getString(R.string.fanboys_social_blocking_list)); + } }); }