зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1012722 - Switch most BrowserApp event listeners to native; r=mfinkle
This commit is contained in:
Родитель
7556276200
Коммит
645dd129a4
|
@ -58,8 +58,11 @@ import org.mozilla.gecko.toolbar.AutocompleteHandler;
|
|||
import org.mozilla.gecko.toolbar.BrowserToolbar;
|
||||
import org.mozilla.gecko.toolbar.ToolbarProgressView;
|
||||
import org.mozilla.gecko.util.Clipboard;
|
||||
import org.mozilla.gecko.util.EventCallback;
|
||||
import org.mozilla.gecko.util.GamepadUtils;
|
||||
import org.mozilla.gecko.util.GeckoEventListener;
|
||||
import org.mozilla.gecko.util.NativeEventListener;
|
||||
import org.mozilla.gecko.util.NativeJSObject;
|
||||
import org.mozilla.gecko.util.HardwareUtils;
|
||||
import org.mozilla.gecko.util.MenuUtils;
|
||||
import org.mozilla.gecko.util.StringUtils;
|
||||
|
@ -533,25 +536,27 @@ abstract public class BrowserApp extends GeckoApp
|
|||
mMediaCastingBar = (MediaCastingBar) findViewById(R.id.media_casting);
|
||||
|
||||
EventDispatcher.getInstance().registerGeckoThreadListener((GeckoEventListener)this,
|
||||
"Menu:Update",
|
||||
"Reader:Added",
|
||||
"Reader:FaviconRequest",
|
||||
"Prompt:ShowTop",
|
||||
"Accounts:Exist");
|
||||
|
||||
EventDispatcher.getInstance().registerGeckoThreadListener((NativeEventListener)this,
|
||||
"Accounts:Create",
|
||||
"CharEncoding:Data",
|
||||
"CharEncoding:State",
|
||||
"Feedback:LastUrl",
|
||||
"Feedback:OpenPlayStore",
|
||||
"Feedback:MaybeLater",
|
||||
"Telemetry:Gather",
|
||||
"Settings:Show",
|
||||
"Updater:Launch",
|
||||
"Feedback:OpenPlayStore",
|
||||
"Menu:Add",
|
||||
"Menu:Remove",
|
||||
"Menu:Update",
|
||||
"Accounts:Create",
|
||||
"Accounts:Exist",
|
||||
"Prompt:ShowTop",
|
||||
"Reader:ListStatusRequest",
|
||||
"Reader:Added",
|
||||
"Reader:Removed",
|
||||
"Reader:Share",
|
||||
"Reader:FaviconRequest");
|
||||
"Settings:Show",
|
||||
"Telemetry:Gather",
|
||||
"Updater:Launch");
|
||||
|
||||
Distribution.init(this);
|
||||
JavaAddonManager.getInstance().init(getApplicationContext());
|
||||
|
@ -889,25 +894,27 @@ abstract public class BrowserApp extends GeckoApp
|
|||
}
|
||||
|
||||
EventDispatcher.getInstance().unregisterGeckoThreadListener((GeckoEventListener)this,
|
||||
"Menu:Update",
|
||||
"Reader:Added",
|
||||
"Reader:FaviconRequest",
|
||||
"Prompt:ShowTop",
|
||||
"Accounts:Exist");
|
||||
|
||||
EventDispatcher.getInstance().unregisterGeckoThreadListener((NativeEventListener)this,
|
||||
"Accounts:Create",
|
||||
"CharEncoding:Data",
|
||||
"CharEncoding:State",
|
||||
"Feedback:LastUrl",
|
||||
"Feedback:OpenPlayStore",
|
||||
"Feedback:MaybeLater",
|
||||
"Telemetry:Gather",
|
||||
"Settings:Show",
|
||||
"Updater:Launch",
|
||||
"Feedback:OpenPlayStore",
|
||||
"Menu:Add",
|
||||
"Menu:Remove",
|
||||
"Menu:Update",
|
||||
"Accounts:Create",
|
||||
"Accounts:Exist",
|
||||
"Prompt:ShowTop",
|
||||
"Reader:ListStatusRequest",
|
||||
"Reader:Added",
|
||||
"Reader:Removed",
|
||||
"Reader:Share",
|
||||
"Reader:FaviconRequest");
|
||||
"Settings:Show",
|
||||
"Telemetry:Gather",
|
||||
"Updater:Launch");
|
||||
|
||||
if (AppConstants.MOZ_ANDROID_BEAM && Build.VERSION.SDK_INT >= 14) {
|
||||
NfcAdapter nfc = NfcAdapter.getDefaultAdapter(this);
|
||||
|
@ -1135,70 +1142,40 @@ abstract public class BrowserApp extends GeckoApp
|
|||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(String event, JSONObject message) {
|
||||
try {
|
||||
if (event.equals("Menu:Add")) {
|
||||
MenuItemInfo info = new MenuItemInfo();
|
||||
info.label = message.getString("name");
|
||||
info.id = message.getInt("id") + ADDON_MENU_OFFSET;
|
||||
info.icon = message.optString("icon", null);
|
||||
info.checked = message.optBoolean("checked", false);
|
||||
info.enabled = message.optBoolean("enabled", true);
|
||||
info.visible = message.optBoolean("visible", true);
|
||||
info.checkable = message.optBoolean("checkable", false);
|
||||
int parent = message.optInt("parent", 0);
|
||||
info.parent = parent <= 0 ? parent : parent + ADDON_MENU_OFFSET;
|
||||
final MenuItemInfo menuItemInfo = info;
|
||||
ThreadUtils.postToUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
addAddonMenuItem(menuItemInfo);
|
||||
}
|
||||
});
|
||||
} else if (event.equals("Menu:Remove")) {
|
||||
final int id = message.getInt("id") + ADDON_MENU_OFFSET;
|
||||
ThreadUtils.postToUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
removeAddonMenuItem(id);
|
||||
}
|
||||
});
|
||||
} else if (event.equals("Menu:Update")) {
|
||||
final int id = message.getInt("id") + ADDON_MENU_OFFSET;
|
||||
final JSONObject options = message.getJSONObject("options");
|
||||
ThreadUtils.postToUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
updateAddonMenuItem(id, options);
|
||||
}
|
||||
});
|
||||
} else if (event.equals("CharEncoding:Data")) {
|
||||
final JSONArray charsets = message.getJSONArray("charsets");
|
||||
int selected = message.getInt("selected");
|
||||
public void handleMessage(final String event, final NativeJSObject message,
|
||||
final EventCallback callback) {
|
||||
if ("Accounts:Create".equals(event)) {
|
||||
// Do exactly the same thing as if you tapped 'Sync' in Settings.
|
||||
final Intent intent = new Intent(getContext(), FxAccountGetStartedActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
getContext().startActivity(intent);
|
||||
|
||||
final int len = charsets.length();
|
||||
final String[] titleArray = new String[len];
|
||||
for (int i = 0; i < len; i++) {
|
||||
JSONObject charset = charsets.getJSONObject(i);
|
||||
} else if ("CharEncoding:Data".equals(event)) {
|
||||
final NativeJSObject[] charsets = message.getObjectArray("charsets");
|
||||
final int selected = message.getInt("selected");
|
||||
|
||||
final String[] titleArray = new String[charsets.length];
|
||||
final String[] codeArray = new String[charsets.length];
|
||||
for (int i = 0; i < charsets.length; i++) {
|
||||
final NativeJSObject charset = charsets[i];
|
||||
titleArray[i] = charset.getString("title");
|
||||
codeArray[i] = charset.getString("code");
|
||||
}
|
||||
|
||||
final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(this);
|
||||
dialogBuilder.setSingleChoiceItems(titleArray, selected, new AlertDialog.OnClickListener() {
|
||||
dialogBuilder.setSingleChoiceItems(titleArray, selected,
|
||||
new AlertDialog.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
try {
|
||||
JSONObject charset = charsets.getJSONObject(which);
|
||||
GeckoAppShell.sendEventToGecko(GeckoEvent.createBroadcastEvent("CharEncoding:Set", charset.getString("code")));
|
||||
public void onClick(final DialogInterface dialog, final int which) {
|
||||
GeckoAppShell.sendEventToGecko(
|
||||
GeckoEvent.createBroadcastEvent("CharEncoding:Set", codeArray[which]));
|
||||
dialog.dismiss();
|
||||
} catch (JSONException e) {
|
||||
Log.e(LOGTAG, "error parsing json", e);
|
||||
}
|
||||
}
|
||||
});
|
||||
dialogBuilder.setNegativeButton(R.string.button_cancel, new AlertDialog.OnClickListener() {
|
||||
dialogBuilder.setNegativeButton(R.string.button_cancel,
|
||||
new AlertDialog.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
public void onClick(final DialogInterface dialog, final int which) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
});
|
||||
|
@ -1208,25 +1185,108 @@ abstract public class BrowserApp extends GeckoApp
|
|||
dialogBuilder.show();
|
||||
}
|
||||
});
|
||||
} else if (event.equals("CharEncoding:State")) {
|
||||
|
||||
} else if ("CharEncoding:State".equals(event)) {
|
||||
final boolean visible = message.getString("visible").equals("true");
|
||||
GeckoPreferences.setCharEncodingState(visible);
|
||||
final Menu menu = mMenu;
|
||||
ThreadUtils.postToUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
if (menu != null)
|
||||
if (menu != null) {
|
||||
menu.findItem(R.id.char_encoding).setVisible(visible);
|
||||
}
|
||||
}
|
||||
});
|
||||
} else if (event.equals("Feedback:OpenPlayStore")) {
|
||||
Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
|
||||
} else if ("Feedback:LastUrl".equals(event)) {
|
||||
getLastUrl();
|
||||
|
||||
} else if ("Feedback:MaybeLater".equals(event)) {
|
||||
resetFeedbackLaunchCount();
|
||||
|
||||
} else if ("Feedback:OpenPlayStore".equals(event)) {
|
||||
final Intent intent = new Intent(Intent.ACTION_VIEW);
|
||||
intent.setData(Uri.parse("market://details?id=" + getPackageName()));
|
||||
startActivity(intent);
|
||||
} else if (event.equals("Feedback:MaybeLater")) {
|
||||
resetFeedbackLaunchCount();
|
||||
} else if (event.equals("Feedback:LastUrl")) {
|
||||
getLastUrl();
|
||||
|
||||
} else if ("Menu:Add".equals(event)) {
|
||||
final MenuItemInfo info = new MenuItemInfo();
|
||||
info.label = message.getString("name");
|
||||
info.id = message.getInt("id") + ADDON_MENU_OFFSET;
|
||||
info.icon = message.optString("icon", null);
|
||||
info.checked = message.optBoolean("checked", false);
|
||||
info.enabled = message.optBoolean("enabled", true);
|
||||
info.visible = message.optBoolean("visible", true);
|
||||
info.checkable = message.optBoolean("checkable", false);
|
||||
final int parent = message.optInt("parent", 0);
|
||||
info.parent = parent <= 0 ? parent : parent + ADDON_MENU_OFFSET;
|
||||
final MenuItemInfo menuItemInfo = info;
|
||||
ThreadUtils.postToUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
addAddonMenuItem(menuItemInfo);
|
||||
}
|
||||
});
|
||||
|
||||
} else if ("Menu:Remove".equals(event)) {
|
||||
final int id = message.getInt("id") + ADDON_MENU_OFFSET;
|
||||
ThreadUtils.postToUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
removeAddonMenuItem(id);
|
||||
}
|
||||
});
|
||||
|
||||
} else if ("Reader:ListStatusRequest".equals(event)) {
|
||||
handleReaderListStatusRequest(message.getString("url"));
|
||||
|
||||
} else if ("Reader:Removed".equals(event)) {
|
||||
final String url = message.getString("url");
|
||||
handleReaderRemoved(url);
|
||||
|
||||
} else if ("Reader:Share".equals(event)) {
|
||||
final String title = message.getString("title");
|
||||
final String url = message.getString("url");
|
||||
GeckoAppShell.openUriExternal(url, "text/plain", "", "", Intent.ACTION_SEND, title);
|
||||
|
||||
} else if ("Settings:Show".equals(event)) {
|
||||
final String resource =
|
||||
message.optString(GeckoPreferences.INTENT_EXTRA_RESOURCES, null);
|
||||
final Intent settingsIntent = new Intent(this, GeckoPreferences.class);
|
||||
GeckoPreferences.setResourceToOpen(settingsIntent, resource);
|
||||
startActivityForResult(settingsIntent, ACTIVITY_REQUEST_PREFERENCES);
|
||||
|
||||
} else if ("Telemetry:Gather".equals(event)) {
|
||||
Telemetry.HistogramAdd("PLACES_PAGES_COUNT",
|
||||
BrowserDB.getCount(getContentResolver(), "history"));
|
||||
Telemetry.HistogramAdd("PLACES_BOOKMARKS_COUNT",
|
||||
BrowserDB.getCount(getContentResolver(), "bookmarks"));
|
||||
Telemetry.HistogramAdd("FENNEC_FAVICONS_COUNT",
|
||||
BrowserDB.getCount(getContentResolver(), "favicons"));
|
||||
Telemetry.HistogramAdd("FENNEC_THUMBNAILS_COUNT",
|
||||
BrowserDB.getCount(getContentResolver(), "thumbnails"));
|
||||
|
||||
} else if ("Updater:Launch".equals(event)) {
|
||||
handleUpdaterLaunch();
|
||||
|
||||
} else {
|
||||
super.handleMessage(event, message, callback);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void handleMessage(String event, JSONObject message) {
|
||||
try {
|
||||
if (event.equals("Menu:Update")) {
|
||||
final int id = message.getInt("id") + ADDON_MENU_OFFSET;
|
||||
final JSONObject options = message.getJSONObject("options");
|
||||
ThreadUtils.postToUiThread(new Runnable() {
|
||||
@Override
|
||||
public void run() {
|
||||
updateAddonMenuItem(id, options);
|
||||
}
|
||||
});
|
||||
} else if (event.equals("Gecko:DelayedStartup")) {
|
||||
ThreadUtils.postToUiThread(new Runnable() {
|
||||
@Override
|
||||
|
@ -1256,50 +1316,18 @@ abstract public class BrowserApp extends GeckoApp
|
|||
DataReportingNotification.checkAndNotifyPolicy(GeckoAppShell.getContext());
|
||||
}
|
||||
|
||||
} else if (event.equals("Telemetry:Gather")) {
|
||||
Telemetry.HistogramAdd("PLACES_PAGES_COUNT", BrowserDB.getCount(getContentResolver(), "history"));
|
||||
Telemetry.HistogramAdd("PLACES_BOOKMARKS_COUNT", BrowserDB.getCount(getContentResolver(), "bookmarks"));
|
||||
Telemetry.HistogramAdd("FENNEC_FAVICONS_COUNT", BrowserDB.getCount(getContentResolver(), "favicons"));
|
||||
Telemetry.HistogramAdd("FENNEC_THUMBNAILS_COUNT", BrowserDB.getCount(getContentResolver(), "thumbnails"));
|
||||
} else if (event.equals("Reader:ListStatusRequest")) {
|
||||
handleReaderListStatusRequest(message.getString("url"));
|
||||
} else if (event.equals("Reader:Added")) {
|
||||
final int result = message.getInt("result");
|
||||
handleReaderAdded(result, messageToReadingListContentValues(message));
|
||||
} else if (event.equals("Reader:Removed")) {
|
||||
final String url = message.getString("url");
|
||||
handleReaderRemoved(url);
|
||||
} else if (event.equals("Reader:Share")) {
|
||||
final String title = message.getString("title");
|
||||
final String url = message.getString("url");
|
||||
GeckoAppShell.openUriExternal(url, "text/plain", "", "",
|
||||
Intent.ACTION_SEND, title);
|
||||
} else if (event.equals("Reader:FaviconRequest")) {
|
||||
final String url = message.getString("url");
|
||||
handleReaderFaviconRequest(url);
|
||||
} else if (event.equals("Settings:Show")) {
|
||||
// null strings return "null" (http://code.google.com/p/android/issues/detail?id=13830)
|
||||
String resource = null;
|
||||
if (!message.isNull(GeckoPreferences.INTENT_EXTRA_RESOURCES)) {
|
||||
resource = message.getString(GeckoPreferences.INTENT_EXTRA_RESOURCES);
|
||||
}
|
||||
Intent settingsIntent = new Intent(this, GeckoPreferences.class);
|
||||
GeckoPreferences.setResourceToOpen(settingsIntent, resource);
|
||||
startActivityForResult(settingsIntent, ACTIVITY_REQUEST_PREFERENCES);
|
||||
} else if (event.equals("Updater:Launch")) {
|
||||
handleUpdaterLaunch();
|
||||
} else if (event.equals("Prompt:ShowTop")) {
|
||||
// Bring this activity to front so the prompt is visible..
|
||||
Intent bringToFrontIntent = new Intent();
|
||||
bringToFrontIntent.setClassName(AppConstants.ANDROID_PACKAGE_NAME, AppConstants.BROWSER_INTENT_CLASS_NAME);
|
||||
bringToFrontIntent.setFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);
|
||||
startActivity(bringToFrontIntent);
|
||||
} else if (event.equals("Accounts:Create")) {
|
||||
// Do exactly the same thing as if you tapped 'Sync'
|
||||
// in Settings.
|
||||
final Intent intent = new Intent(getContext(), FxAccountGetStartedActivity.class);
|
||||
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
|
||||
getContext().startActivity(intent);
|
||||
} else if (event.equals("Accounts:Exist")) {
|
||||
final String kind = message.getString("kind");
|
||||
final JSONObject response = new JSONObject();
|
||||
|
|
Загрузка…
Ссылка в новой задаче