зеркало из https://github.com/mozilla/gecko-dev.git
Evacuate the session history stuff from GeckoApp for better encapsulation, and to make fewer things static
This commit is contained in:
Родитель
4d127712ca
Коммит
feb8de34b6
|
@ -89,9 +89,7 @@ abstract public class GeckoApp
|
|||
private BroadcastReceiver mConnectivityReceiver;
|
||||
public static Button mAwesomeBar;
|
||||
public static ProgressBar mProgressBar;
|
||||
private static SQLiteDatabase mDb;
|
||||
private static DatabaseHelper mDbHelper;
|
||||
private static Stack<HistoryEntry> sessionHistory;
|
||||
private SessionHistory mSessionHistory;
|
||||
|
||||
enum LaunchState {Launching, WaitButton,
|
||||
Launched, GeckoRunning, GeckoExiting};
|
||||
|
@ -101,15 +99,6 @@ abstract public class GeckoApp
|
|||
private static final int FILE_PICKER_REQUEST = 1;
|
||||
private static final int AWESOMEBAR_REQUEST = 2;
|
||||
|
||||
public static class HistoryEntry {
|
||||
public String uri;
|
||||
public String title;
|
||||
public HistoryEntry(String uri, String title) {
|
||||
this.uri = uri;
|
||||
this.title = title;
|
||||
}
|
||||
}
|
||||
|
||||
static boolean checkLaunchState(LaunchState checkState) {
|
||||
synchronized(sLaunchState) {
|
||||
return sLaunchState == checkState;
|
||||
|
@ -391,6 +380,10 @@ abstract public class GeckoApp
|
|||
System.exit(0);
|
||||
}
|
||||
|
||||
SessionHistory getSessionHistory() {
|
||||
return mSessionHistory;
|
||||
}
|
||||
|
||||
/** Called when the activity is first created. */
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState)
|
||||
|
@ -424,9 +417,7 @@ abstract public class GeckoApp
|
|||
if (sGREDir == null)
|
||||
sGREDir = new File(this.getApplicationInfo().dataDir);
|
||||
|
||||
mDbHelper = new DatabaseHelper(this);
|
||||
|
||||
sessionHistory = new Stack<HistoryEntry>();
|
||||
mSessionHistory = new SessionHistory(this);
|
||||
|
||||
mMainHandler = new Handler();
|
||||
|
||||
|
@ -499,30 +490,6 @@ abstract public class GeckoApp
|
|||
}, 50);
|
||||
}
|
||||
|
||||
|
||||
public static void addHistoryEntry(final HistoryEntry entry) {
|
||||
|
||||
class HistoryEntryTask extends AsyncTask<HistoryEntry, Void, Void> {
|
||||
protected Void doInBackground(HistoryEntry... entries) {
|
||||
HistoryEntry entry = entries[0];
|
||||
Log.d("GeckoApp", "adding uri=" + entry.uri + ", title=" + entry.title + " to history");
|
||||
ContentValues values = new ContentValues();
|
||||
values.put("url", entry.uri);
|
||||
values.put("title", entry.title);
|
||||
if (sessionHistory.empty() || !sessionHistory.peek().uri.equals(entry.uri))
|
||||
sessionHistory.push(entry);
|
||||
mDb = mDbHelper.getWritableDatabase();
|
||||
long id = mDb.insertWithOnConflict("moz_places", null, values, SQLiteDatabase.CONFLICT_REPLACE);
|
||||
values = new ContentValues();
|
||||
values.put("place_id", id);
|
||||
mDb.insertWithOnConflict("moz_historyvisits", null, values, SQLiteDatabase.CONFLICT_REPLACE);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
new HistoryEntryTask().execute(entry);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void onNewIntent(Intent intent) {
|
||||
Log.w(LOGTAG, "zerdatime " + new Date().getTime() + " - onNewIntent");
|
||||
|
@ -652,8 +619,7 @@ abstract public class GeckoApp
|
|||
{
|
||||
Log.i(LOG_FILE_NAME, "destroy");
|
||||
|
||||
if (mDb != null)
|
||||
mDb.close();
|
||||
mSessionHistory.cleanup();
|
||||
|
||||
// Tell Gecko to shutting down; we'll end up calling System.exit()
|
||||
// in onXreExit.
|
||||
|
@ -818,30 +784,19 @@ abstract public class GeckoApp
|
|||
public boolean onSearchRequested() {
|
||||
Intent searchIntent = new Intent(getBaseContext(), AwesomeBar.class);
|
||||
searchIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_NO_HISTORY);
|
||||
if (!sessionHistory.empty())
|
||||
searchIntent.putExtra(AwesomeBar.CURRENT_URL_KEY, sessionHistory.peek().uri);
|
||||
|
||||
mSessionHistory.searchRequested(searchIntent);
|
||||
startActivityForResult(searchIntent, AWESOMEBAR_REQUEST);
|
||||
return true;
|
||||
}
|
||||
|
||||
public boolean doReload() {
|
||||
Log.i("GeckoApp", "Reload requested");
|
||||
if (sessionHistory.empty())
|
||||
return false;
|
||||
String currUri = sessionHistory.peek().uri;
|
||||
GeckoAppShell.sendEventToGecko(new GeckoEvent(currUri));
|
||||
return true;
|
||||
return mSessionHistory.doReload();
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onBackPressed() {
|
||||
if (sessionHistory.size() > 1) {
|
||||
sessionHistory.pop();
|
||||
String uri = sessionHistory.peek().uri;
|
||||
Log.i("GeckoApp", "going back to page: " + uri);
|
||||
loadUrl(uri);
|
||||
} else {
|
||||
if (!mSessionHistory.doBack()) {
|
||||
finish();
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1646,7 +1646,7 @@ public class GeckoAppShell
|
|||
getMainHandler().post(new Runnable() {
|
||||
public void run() {
|
||||
GeckoApp.mAwesomeBar.setText(titleText);
|
||||
GeckoApp.addHistoryEntry(new GeckoApp.HistoryEntry(uri, title));
|
||||
GeckoApp.mAppContext.getSessionHistory().add(new SessionHistory.HistoryEntry(uri, title));
|
||||
GeckoApp.mProgressBar.setVisibility(View.GONE);
|
||||
}
|
||||
});
|
||||
|
|
|
@ -56,6 +56,7 @@ JAVAFILES = \
|
|||
SurfaceLockInfo.java \
|
||||
AwesomeBar.java \
|
||||
DatabaseHelper.java \
|
||||
SessionHistory.java \
|
||||
$(NULL)
|
||||
|
||||
PROCESSEDJAVAFILES = \
|
||||
|
|
|
@ -0,0 +1,125 @@
|
|||
/* -*- Mode: Java; c-basic-offset: 4; tab-width: 20; indent-tabs-mode: nil; -*-
|
||||
* ***** BEGIN LICENSE BLOCK *****
|
||||
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
||||
*
|
||||
* The contents of this file are subject to the Mozilla Public License Version
|
||||
* 1.1 (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.mozilla.org/MPL/
|
||||
*
|
||||
* Software distributed under the License is distributed on an "AS IS" basis,
|
||||
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License
|
||||
* for the specific language governing rights and limitations under the
|
||||
* License.
|
||||
*
|
||||
* The Original Code is Mozilla Android code.
|
||||
*
|
||||
* The Initial Developer of the Original Code is Mozilla Foundation.
|
||||
* Portions created by the Initial Developer are Copyright (C) 2009-2010
|
||||
* the Initial Developer. All Rights Reserved.
|
||||
*
|
||||
* Contributor(s):
|
||||
* Vladimir Vukicevic <vladimir@pobox.com>
|
||||
* Matt Brubeck <mbrubeck@mozilla.com>
|
||||
* Vivien Nicolas <vnicolas@mozilla.com>
|
||||
* Kartikaya Gupta <kgupta@mozilla.com>
|
||||
*
|
||||
* Alternatively, the contents of this file may be used under the terms of
|
||||
* either the GNU General Public License Version 2 or later (the "GPL"), or
|
||||
* the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
||||
* in which case the provisions of the GPL or the LGPL are applicable instead
|
||||
* of those above. If you wish to allow use of your version of this file only
|
||||
* under the terms of either the GPL or the LGPL, and not to allow others to
|
||||
* use your version of this file under the terms of the MPL, indicate your
|
||||
* decision by deleting the provisions above and replace them with the notice
|
||||
* and other provisions required by the GPL or the LGPL. If you do not delete
|
||||
* the provisions above, a recipient may use your version of this file under
|
||||
* the terms of any one of the MPL, the GPL or the LGPL.
|
||||
*
|
||||
* ***** END LICENSE BLOCK ***** */
|
||||
|
||||
package org.mozilla.gecko;
|
||||
|
||||
import java.util.Stack;
|
||||
|
||||
import android.content.*;
|
||||
import android.database.sqlite.SQLiteDatabase;
|
||||
import android.os.AsyncTask;
|
||||
import android.util.Log;
|
||||
|
||||
class SessionHistory
|
||||
{
|
||||
private final GeckoApp mApp;
|
||||
private final DatabaseHelper mDbHelper;
|
||||
private final Stack<HistoryEntry> mHistory;
|
||||
private SQLiteDatabase mDb;
|
||||
|
||||
SessionHistory(GeckoApp app) {
|
||||
mApp = app;
|
||||
mDbHelper = new DatabaseHelper(app);
|
||||
mHistory = new Stack<HistoryEntry>();
|
||||
}
|
||||
|
||||
void add(HistoryEntry entry) {
|
||||
new HistoryEntryTask().execute(entry);
|
||||
}
|
||||
|
||||
void searchRequested(Intent searchIntent) {
|
||||
if (!mHistory.empty()) {
|
||||
searchIntent.putExtra(AwesomeBar.CURRENT_URL_KEY, mHistory.peek().mUri);
|
||||
}
|
||||
}
|
||||
|
||||
boolean doReload() {
|
||||
if (mHistory.empty())
|
||||
return false;
|
||||
String currUri = mHistory.peek().mUri;
|
||||
GeckoAppShell.sendEventToGecko(new GeckoEvent(currUri));
|
||||
return true;
|
||||
}
|
||||
|
||||
boolean doBack() {
|
||||
if (mHistory.size() <= 1) {
|
||||
return false;
|
||||
}
|
||||
mHistory.pop();
|
||||
String uri = mHistory.peek().mUri;
|
||||
Log.i("GeckoApp", "going back to page: " + uri);
|
||||
mApp.loadUrl(uri);
|
||||
return true;
|
||||
}
|
||||
|
||||
void cleanup() {
|
||||
if (mDb != null) {
|
||||
mDb.close();
|
||||
}
|
||||
}
|
||||
|
||||
static class HistoryEntry {
|
||||
public final String mUri;
|
||||
public final String mTitle;
|
||||
|
||||
public HistoryEntry(String uri, String title) {
|
||||
mUri = uri;
|
||||
mTitle = title;
|
||||
}
|
||||
}
|
||||
|
||||
private class HistoryEntryTask extends AsyncTask<HistoryEntry, Void, Void> {
|
||||
protected Void doInBackground(HistoryEntry... entries) {
|
||||
HistoryEntry entry = entries[0];
|
||||
Log.d("GeckoApp", "adding uri=" + entry.mUri + ", title=" + entry.mTitle + " to history");
|
||||
ContentValues values = new ContentValues();
|
||||
values.put("url", entry.mUri);
|
||||
values.put("title", entry.mTitle);
|
||||
if (mHistory.empty() || !mHistory.peek().mUri.equals(entry.mUri))
|
||||
mHistory.push(entry);
|
||||
mDb = mDbHelper.getWritableDatabase();
|
||||
long id = mDb.insertWithOnConflict("moz_places", null, values, SQLiteDatabase.CONFLICT_REPLACE);
|
||||
values = new ContentValues();
|
||||
values.put("place_id", id);
|
||||
mDb.insertWithOnConflict("moz_historyvisits", null, values, SQLiteDatabase.CONFLICT_REPLACE);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
Загрузка…
Ссылка в новой задаче