Bug 783312 - Show the awesomescreen as a way to select sites for pinning. r=mfinkle

This commit is contained in:
Wes Johnston 2012-12-28 13:46:08 -08:00
parent 39bc9ef372
commit 85191e56e5
8 changed files with 69 additions and 14 deletions

View File

@ -7,10 +7,13 @@ package org.mozilla.gecko;
import org.mozilla.gecko.db.BrowserContract.Thumbnails;
import org.mozilla.gecko.db.BrowserContract.Bookmarks;
import org.mozilla.gecko.db.BrowserContract.Combined;
import org.mozilla.gecko.db.BrowserDB;
import org.mozilla.gecko.db.BrowserDB.URLColumns;
import org.mozilla.gecko.db.BrowserDB.PinnedSite;
import org.mozilla.gecko.sync.setup.SyncAccounts;
import org.mozilla.gecko.sync.setup.activities.SetupSyncActivity;
import org.mozilla.gecko.util.ActivityResultHandler;
import org.mozilla.gecko.util.GeckoAsyncTask;
import org.json.JSONArray;
@ -162,6 +165,12 @@ public class AboutHomeContent extends ScrollView
TopSitesViewHolder holder = (TopSitesViewHolder) v.getTag();
String spec = holder.url;
// If we don't have a url, this must be an empty row. Show the edit dialog box
if (TextUtils.isEmpty(spec)) {
editSite(spec, position);
return;
}
if (mUriLoadCallback != null)
mUriLoadCallback.callback(spec);
}
@ -839,4 +848,38 @@ public class AboutHomeContent extends ScrollView
return buildView(url, title, convertView);
}
}
// Edit the site at position. Provide a url to start editing with
public void editSite(String url, final int position) {
Intent intent = new Intent(mContext, AwesomeBar.class);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.putExtra(AwesomeBar.TARGET_KEY, AwesomeBar.Target.PICK_SITE.toString());
if (url != null && !TextUtils.isEmpty(url)) {
intent.putExtra(AwesomeBar.CURRENT_URL_KEY, url);
}
int requestCode = GeckoAppShell.sActivityHelper.makeRequestCode(new ActivityResultHandler() {
public void onActivityResult(int resultCode, Intent data) {
final String title = data.getStringExtra(AwesomeBar.TITLE_KEY);
final String url = data.getStringExtra(AwesomeBar.URL_KEY);
// update the database on a background thread
(new GeckoAsyncTask<Void, Void, Void>(GeckoApp.mAppContext, GeckoAppShell.getHandler()) {
@Override
public Void doInBackground(Void... params) {
final ContentResolver resolver = mActivity.getContentResolver();
BrowserDB.pinSite(resolver, url, (title == null ? url : title), position);
return null;
}
@Override
public void onPostExecute(Void v) {
update(EnumSet.of(UpdateFlags.TOP_SITES));
}
}).execute();
}
});
mActivity.startActivityForResult(intent, requestCode);
}
}

View File

@ -51,6 +51,10 @@ class ActivityHandlerHelper {
return mActivityResultHandlerMap.put(mAwesomebarResultHandler);
}
int makeRequestCode(ActivityResultHandler aHandler) {
return mActivityResultHandlerMap.put(aHandler);
}
private int addIntentActivitiesToList(Context context, Intent intent, ArrayList<PromptService.PromptListItem> items, ArrayList<Intent> aIntents) {
PackageManager pm = context.getPackageManager();
List<ResolveInfo> lri = pm.queryIntentActivityOptions(GeckoApp.mAppContext.getComponentName(), null, intent, 0);

View File

@ -60,9 +60,10 @@ public class AwesomeBar extends GeckoActivity {
static final String CURRENT_URL_KEY = "currenturl";
static final String TARGET_KEY = "target";
static final String SEARCH_KEY = "search";
static final String TITLE_KEY = "title";
static final String USER_ENTERED_KEY = "user_entered";
static final String READING_LIST_KEY = "reading_list";
public static enum Target { NEW_TAB, CURRENT_TAB };
public static enum Target { NEW_TAB, CURRENT_TAB, PICK_SITE };
private String mTarget;
private AwesomeBarTabs mAwesomeTabs;
@ -91,8 +92,8 @@ public class AwesomeBar extends GeckoActivity {
mAwesomeTabs = (AwesomeBarTabs) findViewById(R.id.awesomebar_tabs);
mAwesomeTabs.setOnUrlOpenListener(new AwesomeBarTabs.OnUrlOpenListener() {
public void onUrlOpen(String url) {
openUrlAndFinish(url);
public void onUrlOpen(String url, String title) {
openUrlAndFinish(url, title, false);
}
public void onSearch(String engine, String text) {
@ -347,8 +348,16 @@ public class AwesomeBar extends GeckoActivity {
}
private void openUrlAndFinish(String url) {
openUrlAndFinish(url, null, false);
}
private void openUrlAndFinish(String url, String title, boolean userEntered) {
Intent resultIntent = new Intent();
resultIntent.putExtra(URL_KEY, url);
if (title != null && !TextUtils.isEmpty(title))
resultIntent.putExtra(TITLE_KEY, title);
if (userEntered)
resultIntent.putExtra(USER_ENTERED_KEY, userEntered);
resultIntent.putExtra(TARGET_KEY, mTarget);
finishWithResult(resultIntent);
}
@ -371,11 +380,7 @@ public class AwesomeBar extends GeckoActivity {
url = keywordUrl.replace("%s", search);
}
Intent resultIntent = new Intent();
resultIntent.putExtra(URL_KEY, url);
resultIntent.putExtra(TARGET_KEY, mTarget);
resultIntent.putExtra(USER_ENTERED_KEY, true);
finishWithResult(resultIntent);
openUrlAndFinish(url, "", true);
}
private void openSearchAndFinish(String url, String engine) {

View File

@ -44,7 +44,7 @@ public class AwesomeBarTabs extends TabHost
private static final int MAX_RESULTS = 100;
public interface OnUrlOpenListener {
public void onUrlOpen(String url);
public void onUrlOpen(String url, String title);
public void onSearch(String engine, String text);
public void onEditSuggestion(String suggestion);
}

View File

@ -249,7 +249,8 @@ public class AllPagesTab extends AwesomeBarTab implements GeckoEventListener {
return;
String url = mCursor.getString(mCursor.getColumnIndexOrThrow(URLColumns.URL));
listener.onUrlOpen(url);
String title = mCursor.getString(mCursor.getColumnIndexOrThrow(URLColumns.TITLE));
listener.onUrlOpen(url, title);
}
public ContextMenuSubject getSubject() {
@ -460,7 +461,7 @@ public class AllPagesTab extends AwesomeBarTab implements GeckoEventListener {
// pattern, go to that URL. Otherwise, do a search for
// the term.
if (v != viewHolder.userEnteredView && !StringUtils.isSearchQuery(suggestion)) {
listener.onUrlOpen(suggestion);
listener.onUrlOpen(suggestion, null);
} else {
listener.onSearch(engine.name, suggestion);
}

View File

@ -192,11 +192,12 @@ public class BookmarksTab extends AwesomeBarTab {
}
String url = cursor.getString(cursor.getColumnIndexOrThrow(URLColumns.URL));
String title = cursor.getString(cursor.getColumnIndexOrThrow(URLColumns.TITLE));
long parentId = cursor.getLong(cursor.getColumnIndexOrThrow(Bookmarks.PARENT));
if (parentId == Bookmarks.FIXED_READING_LIST_ID) {
url = ReaderModeUtils.getAboutReaderForUrl(url, true);
}
listener.onUrlOpen(url);
listener.onUrlOpen(url, title);
}
private class BookmarksListAdapter extends SimpleCursorAdapter {

View File

@ -377,9 +377,10 @@ public class HistoryTab extends AwesomeBarTab {
Map<String,Object> historyItem = (Map<String,Object>) adapter.getChild(groupPosition, childPosition);
String url = (String) historyItem.get(URLColumns.URL);
String title = (String) historyItem.get(URLColumns.TITLE);
AwesomeBarTabs.OnUrlOpenListener listener = getUrlListener();
if (!TextUtils.isEmpty(url) && listener != null)
listener.onUrlOpen(url);
listener.onUrlOpen(url, title);
return true;
}

View File

@ -277,7 +277,7 @@ public class BrowserDB {
return sDb.getPinnedSites(cr, limit);
}
private static class PinnedSite {
public static class PinnedSite {
public String title = "";
public String url = "";