diff options
-rw-r--r-- | res/menu-sw600dp/browser.xml | 3 | ||||
-rw-r--r-- | res/menu/browser.xml | 3 | ||||
-rw-r--r-- | res/values/strings.xml | 3 | ||||
-rw-r--r-- | src/com/android/browser/Controller.java | 23 |
4 files changed, 32 insertions, 0 deletions
diff --git a/res/menu-sw600dp/browser.xml b/res/menu-sw600dp/browser.xml index be4a521..23366e7 100644 --- a/res/menu-sw600dp/browser.xml +++ b/res/menu-sw600dp/browser.xml @@ -34,6 +34,9 @@ android:alphabeticShortcut="s" /> <item android:id="@+id/save_webarchive_menu_id" android:title="@string/menu_save_webarchive" /> + <item + android:id="@+id/freeze_tab_menu_id" + android:title="@string/menu_freeze_tab" /> <item android:id="@+id/page_info_menu_id" android:title="@string/page_info" android:icon="@drawable/ic_pageinfo_holo_dark" diff --git a/res/menu/browser.xml b/res/menu/browser.xml index 90357e9..6eadcba 100644 --- a/res/menu/browser.xml +++ b/res/menu/browser.xml @@ -65,6 +65,9 @@ android:id="@+id/save_webarchive_menu_id" android:title="@string/menu_save_webarchive" /> <item + android:id="@+id/freeze_tab_menu_id" + android:title="@string/menu_freeze_tab" /> + <item android:id="@+id/page_info_menu_id" android:title="@string/page_info" android:icon="@drawable/ic_pageinfo_holo_dark" diff --git a/res/values/strings.xml b/res/values/strings.xml index ae28023..e51538c 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -235,6 +235,9 @@ <string name="copy_page_url">Copy page url</string> <!-- Menu item --> <string name="share_page">Share page</string> + <!-- Menu item to freeze a tab. This will make a view-only + snapshot of the page in a new tab. [CHAR LIMIT=50] --> + <string name="menu_freeze_tab">Freeze tab</string> <!-- Menu item for saving a page. [CHAR LIMIT=30] --> <string name="menu_save_webarchive">Save page</string> <!-- Toast informing the user that the page has been saved. [CHAR LIMIT=50] --> diff --git a/src/com/android/browser/Controller.java b/src/com/android/browser/Controller.java index 3974a9c..6a951c2 100644 --- a/src/com/android/browser/Controller.java +++ b/src/com/android/browser/Controller.java @@ -81,8 +81,10 @@ import com.android.browser.provider.BrowserProvider; import com.android.browser.search.SearchEngine; import com.android.common.Search; +import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; +import java.io.IOException; import java.net.URLEncoder; import java.util.Calendar; import java.util.HashMap; @@ -1494,6 +1496,7 @@ public class Controller final MenuItem counter = menu.findItem(R.id.dump_counters_menu_id); counter.setVisible(showDebugSettings); counter.setEnabled(showDebugSettings); + menu.findItem(R.id.freeze_tab_menu_id).setVisible(showDebugSettings); final MenuItem newtab = menu.findItem(R.id.new_tab_menu_id); newtab.setEnabled(getTabControl().canCreateNewTab()); @@ -1600,6 +1603,26 @@ public class Controller getCurrentTopWebView().showFindDialog(null, true); break; + case R.id.freeze_tab_menu_id: + // TODO: Show error messages + WebView source = getCurrentTopWebView(); + if (source == null) break; + Tab t = createNewTab(false, true, false); + if (t == null) break; + WebView pinned = t.getWebView(); + if (pinned == null) break; + try { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + source.saveViewState(bos); + ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); + pinned.loadViewState(bis); + bis.close(); + bos.close(); + } catch (IOException e) { + closeTab(t); + } + break; + case R.id.save_webarchive_menu_id: String state = Environment.getExternalStorageState(); if (!Environment.MEDIA_MOUNTED.equals(state)) { |