diff options
author | Bijan Amirzada <bijana@codeaurora.org> | 2014-03-21 12:12:18 -0700 |
---|---|---|
committer | Bijan Amirzada <bijana@codeaurora.org> | 2014-03-21 15:49:20 -0700 |
commit | 41242f2ff13293612786e7550a934ee13d5f6b50 (patch) | |
tree | e75b2e10dddacf6fe76d45e8546e9d2472c84015 /src/com/android/browser/SnapshotTab.java | |
parent | a9a5a583503419d8794356f1a3e515db05bda8d0 (diff) | |
download | android_packages_apps_Gello-41242f2ff13293612786e7550a934ee13d5f6b50.tar.gz android_packages_apps_Gello-41242f2ff13293612786e7550a934ee13d5f6b50.tar.bz2 android_packages_apps_Gello-41242f2ff13293612786e7550a934ee13d5f6b50.zip |
Change SWE app properties back to stock Android
- Changed project package name from com.android.swe.browser
back to com.android.browser along with code references to
old package name.
- Changes to AndroidManifest making it conform closer to stock
browser manifest.
- Changed app and apk name back to Browser.
Change-Id: I778ee1d1197bd50bd4a4850eef6d1d7f4ef0ad0b
Diffstat (limited to 'src/com/android/browser/SnapshotTab.java')
-rw-r--r-- | src/com/android/browser/SnapshotTab.java | 249 |
1 files changed, 249 insertions, 0 deletions
diff --git a/src/com/android/browser/SnapshotTab.java b/src/com/android/browser/SnapshotTab.java new file mode 100644 index 00000000..e403dbca --- /dev/null +++ b/src/com/android/browser/SnapshotTab.java @@ -0,0 +1,249 @@ +/* + * Copyright (C) 2011 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.browser; + +import android.content.ContentResolver; +import android.content.ContentUris; +import android.content.ContentValues; +import android.content.Context; +import android.database.Cursor; +import android.graphics.BitmapFactory; +import android.net.Uri; +import android.os.AsyncTask; +import android.os.Bundle; +import android.text.TextUtils; +import android.util.Log; +import org.codeaurora.swe.WebView; + +import com.android.browser.provider.SnapshotProvider.Snapshots; + +import java.io.ByteArrayInputStream; +import java.io.FileNotFoundException; +import java.io.InputStream; +import java.util.Map; +import java.util.zip.GZIPInputStream; + + +public class SnapshotTab extends Tab { + + private static final String LOGTAG = "SnapshotTab"; + + private long mSnapshotId; + private LoadData mLoadTask; + private WebViewFactory mWebViewFactory; + private int mBackgroundColor; + private long mDateCreated; + private boolean mIsLive; + private String mLiveUrl; + + public SnapshotTab(WebViewController wvcontroller, long snapshotId) { + super(wvcontroller, null, null); + mSnapshotId = snapshotId; + mWebViewFactory = mWebViewController.getWebViewFactory(); + WebView web = mWebViewFactory.createWebView(false); + setWebView(web); + loadData(); + } + + @Override + void putInForeground() { + if (getWebView() == null) { + WebView web = mWebViewFactory.createWebView(false); + if (mBackgroundColor != 0) { + web.setBackgroundColor(mBackgroundColor); + } + setWebView(web); + loadData(); + } + super.putInForeground(); + } + + @Override + void putInBackground() { + if (getWebView() == null) return; + super.putInBackground(); + } + + void loadData() { + if (mLoadTask == null) { + mLoadTask = new LoadData(this, mContext); + mLoadTask.execute(); + } + } + + @Override + void addChildTab(Tab child) { + if (mIsLive) { + super.addChildTab(child); + } else { + throw new IllegalStateException("Snapshot tabs cannot have child tabs!"); + } + } + + @Override + public boolean isSnapshot() { + return !mIsLive; + } + + public long getSnapshotId() { + return mSnapshotId; + } + + @Override + public ContentValues createSnapshotValues() { + if (mIsLive) { + return super.createSnapshotValues(); + } + return null; + } + + @Override + public Bundle saveState() { + if (mIsLive) { + return super.saveState(); + } + return null; + } + + public long getDateCreated() { + return mDateCreated; + } + + public String getLiveUrl() { + return mLiveUrl; + } + + @Override + public void loadUrl(String url, Map<String, String> headers) { + if (!mIsLive) { + mIsLive = true; + getWebView().clearViewState(); + } + super.loadUrl(url, headers); + } + + @Override + public boolean canGoBack() { + return super.canGoBack() || mIsLive; + } + + @Override + public boolean canGoForward() { + return mIsLive && super.canGoForward(); + } + + @Override + public void goBack() { + if (super.canGoBack()) { + super.goBack(); + } else { + mIsLive = false; + getWebView().stopLoading(); + loadData(); + } + } + + static class LoadData extends AsyncTask<Void, Void, Cursor> { + + static final String[] PROJECTION = new String[] { + Snapshots._ID, // 0 + Snapshots.URL, // 1 + Snapshots.TITLE, // 2 + Snapshots.FAVICON, // 3 + Snapshots.VIEWSTATE, // 4 + Snapshots.BACKGROUND, // 5 + Snapshots.DATE_CREATED, // 6 + Snapshots.VIEWSTATE_PATH, // 7 + }; + static final int SNAPSHOT_ID = 0; + static final int SNAPSHOT_URL = 1; + static final int SNAPSHOT_TITLE = 2; + static final int SNAPSHOT_FAVICON = 3; + static final int SNAPSHOT_VIEWSTATE = 4; + static final int SNAPSHOT_BACKGROUND = 5; + static final int SNAPSHOT_DATE_CREATED = 6; + static final int SNAPSHOT_VIEWSTATE_PATH = 7; + + private SnapshotTab mTab; + private ContentResolver mContentResolver; + private Context mContext; + + public LoadData(SnapshotTab t, Context context) { + mTab = t; + mContentResolver = context.getContentResolver(); + mContext = context; + } + + @Override + protected Cursor doInBackground(Void... params) { + long id = mTab.mSnapshotId; + Uri uri = ContentUris.withAppendedId(Snapshots.CONTENT_URI, id); + return mContentResolver.query(uri, PROJECTION, null, null, null); + } + + private InputStream getInputStream(Cursor c) throws FileNotFoundException { + byte[] data = c.getBlob(SNAPSHOT_VIEWSTATE); + ByteArrayInputStream bis = new ByteArrayInputStream(data); + return bis; + } + + @Override + protected void onPostExecute(Cursor result) { + try { + if (result.moveToFirst()) { + mTab.mCurrentState.mTitle = result.getString(SNAPSHOT_TITLE); + mTab.mCurrentState.mUrl = result.getString(SNAPSHOT_URL); + mTab.mLiveUrl = result.getString(SNAPSHOT_URL); + byte[] favicon = result.getBlob(SNAPSHOT_FAVICON); + if (favicon != null) { + mTab.mCurrentState.mFavicon = BitmapFactory + .decodeByteArray(favicon, 0, favicon.length); + } + WebView web = mTab.getWebView(); + if (web != null) { + String path = result.getString(SNAPSHOT_VIEWSTATE_PATH); + if (!TextUtils.isEmpty(path)) { + web.loadViewState(path); + } else { + InputStream ins = getInputStream(result); + GZIPInputStream stream = new GZIPInputStream(ins); + web.loadViewState(stream); + } + } + mTab.mBackgroundColor = result.getInt(SNAPSHOT_BACKGROUND); + mTab.mDateCreated = result.getLong(SNAPSHOT_DATE_CREATED); + mTab.mWebViewController.onPageFinished(mTab); + } + } catch (Exception e) { + Log.w(LOGTAG, "Failed to load view state, closing tab", e); + mTab.mWebViewController.closeTab(mTab); + } finally { + if (result != null) { + result.close(); + } + mTab.mLoadTask = null; + } + } + + } + + @Override + protected void persistThumbnail() { + if (mIsLive) { + super.persistThumbnail(); + } + } +} |