зеркало из 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;
|
private BroadcastReceiver mConnectivityReceiver;
|
||||||
public static Button mAwesomeBar;
|
public static Button mAwesomeBar;
|
||||||
public static ProgressBar mProgressBar;
|
public static ProgressBar mProgressBar;
|
||||||
private static SQLiteDatabase mDb;
|
private SessionHistory mSessionHistory;
|
||||||
private static DatabaseHelper mDbHelper;
|
|
||||||
private static Stack<HistoryEntry> sessionHistory;
|
|
||||||
|
|
||||||
enum LaunchState {Launching, WaitButton,
|
enum LaunchState {Launching, WaitButton,
|
||||||
Launched, GeckoRunning, GeckoExiting};
|
Launched, GeckoRunning, GeckoExiting};
|
||||||
|
@ -101,15 +99,6 @@ abstract public class GeckoApp
|
||||||
private static final int FILE_PICKER_REQUEST = 1;
|
private static final int FILE_PICKER_REQUEST = 1;
|
||||||
private static final int AWESOMEBAR_REQUEST = 2;
|
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) {
|
static boolean checkLaunchState(LaunchState checkState) {
|
||||||
synchronized(sLaunchState) {
|
synchronized(sLaunchState) {
|
||||||
return sLaunchState == checkState;
|
return sLaunchState == checkState;
|
||||||
|
@ -391,6 +380,10 @@ abstract public class GeckoApp
|
||||||
System.exit(0);
|
System.exit(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
SessionHistory getSessionHistory() {
|
||||||
|
return mSessionHistory;
|
||||||
|
}
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
/** Called when the activity is first created. */
|
||||||
@Override
|
@Override
|
||||||
public void onCreate(Bundle savedInstanceState)
|
public void onCreate(Bundle savedInstanceState)
|
||||||
|
@ -424,9 +417,7 @@ abstract public class GeckoApp
|
||||||
if (sGREDir == null)
|
if (sGREDir == null)
|
||||||
sGREDir = new File(this.getApplicationInfo().dataDir);
|
sGREDir = new File(this.getApplicationInfo().dataDir);
|
||||||
|
|
||||||
mDbHelper = new DatabaseHelper(this);
|
mSessionHistory = new SessionHistory(this);
|
||||||
|
|
||||||
sessionHistory = new Stack<HistoryEntry>();
|
|
||||||
|
|
||||||
mMainHandler = new Handler();
|
mMainHandler = new Handler();
|
||||||
|
|
||||||
|
@ -499,30 +490,6 @@ abstract public class GeckoApp
|
||||||
}, 50);
|
}, 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
|
@Override
|
||||||
protected void onNewIntent(Intent intent) {
|
protected void onNewIntent(Intent intent) {
|
||||||
Log.w(LOGTAG, "zerdatime " + new Date().getTime() + " - onNewIntent");
|
Log.w(LOGTAG, "zerdatime " + new Date().getTime() + " - onNewIntent");
|
||||||
|
@ -652,8 +619,7 @@ abstract public class GeckoApp
|
||||||
{
|
{
|
||||||
Log.i(LOG_FILE_NAME, "destroy");
|
Log.i(LOG_FILE_NAME, "destroy");
|
||||||
|
|
||||||
if (mDb != null)
|
mSessionHistory.cleanup();
|
||||||
mDb.close();
|
|
||||||
|
|
||||||
// Tell Gecko to shutting down; we'll end up calling System.exit()
|
// Tell Gecko to shutting down; we'll end up calling System.exit()
|
||||||
// in onXreExit.
|
// in onXreExit.
|
||||||
|
@ -818,30 +784,19 @@ abstract public class GeckoApp
|
||||||
public boolean onSearchRequested() {
|
public boolean onSearchRequested() {
|
||||||
Intent searchIntent = new Intent(getBaseContext(), AwesomeBar.class);
|
Intent searchIntent = new Intent(getBaseContext(), AwesomeBar.class);
|
||||||
searchIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_NO_HISTORY);
|
searchIntent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION | Intent.FLAG_ACTIVITY_NO_HISTORY);
|
||||||
if (!sessionHistory.empty())
|
mSessionHistory.searchRequested(searchIntent);
|
||||||
searchIntent.putExtra(AwesomeBar.CURRENT_URL_KEY, sessionHistory.peek().uri);
|
|
||||||
|
|
||||||
startActivityForResult(searchIntent, AWESOMEBAR_REQUEST);
|
startActivityForResult(searchIntent, AWESOMEBAR_REQUEST);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean doReload() {
|
public boolean doReload() {
|
||||||
Log.i("GeckoApp", "Reload requested");
|
Log.i("GeckoApp", "Reload requested");
|
||||||
if (sessionHistory.empty())
|
return mSessionHistory.doReload();
|
||||||
return false;
|
|
||||||
String currUri = sessionHistory.peek().uri;
|
|
||||||
GeckoAppShell.sendEventToGecko(new GeckoEvent(currUri));
|
|
||||||
return true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onBackPressed() {
|
public void onBackPressed() {
|
||||||
if (sessionHistory.size() > 1) {
|
if (!mSessionHistory.doBack()) {
|
||||||
sessionHistory.pop();
|
|
||||||
String uri = sessionHistory.peek().uri;
|
|
||||||
Log.i("GeckoApp", "going back to page: " + uri);
|
|
||||||
loadUrl(uri);
|
|
||||||
} else {
|
|
||||||
finish();
|
finish();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1646,7 +1646,7 @@ public class GeckoAppShell
|
||||||
getMainHandler().post(new Runnable() {
|
getMainHandler().post(new Runnable() {
|
||||||
public void run() {
|
public void run() {
|
||||||
GeckoApp.mAwesomeBar.setText(titleText);
|
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);
|
GeckoApp.mProgressBar.setVisibility(View.GONE);
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
|
@ -56,6 +56,7 @@ JAVAFILES = \
|
||||||
SurfaceLockInfo.java \
|
SurfaceLockInfo.java \
|
||||||
AwesomeBar.java \
|
AwesomeBar.java \
|
||||||
DatabaseHelper.java \
|
DatabaseHelper.java \
|
||||||
|
SessionHistory.java \
|
||||||
$(NULL)
|
$(NULL)
|
||||||
|
|
||||||
PROCESSEDJAVAFILES = \
|
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;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Загрузка…
Ссылка в новой задаче