Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(30)

Unified Diff: chrome/android/webapk/shell_apk/src/org/chromium/webapk/shell_apk/ChooseHostBrowserDialog.java

Issue 2912393005: Add support for webapk without runtimeHost (part 2) (Closed)
Patch Set: pkotwicz@'s comments. Created 3 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/android/webapk/shell_apk/src/org/chromium/webapk/shell_apk/ChooseHostBrowserDialog.java
diff --git a/chrome/android/webapk/shell_apk/src/org/chromium/webapk/shell_apk/ChooseHostBrowserDialog.java b/chrome/android/webapk/shell_apk/src/org/chromium/webapk/shell_apk/ChooseHostBrowserDialog.java
index b56fbac64444afaddf85380c178c4c301475974a..a853bdee13af6d1d49d861300a881d270c1622a3 100644
--- a/chrome/android/webapk/shell_apk/src/org/chromium/webapk/shell_apk/ChooseHostBrowserDialog.java
+++ b/chrome/android/webapk/shell_apk/src/org/chromium/webapk/shell_apk/ChooseHostBrowserDialog.java
@@ -4,10 +4,12 @@
package org.chromium.webapk.shell_apk;
-import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
+import android.content.pm.PackageManager;
+import android.content.pm.ResolveInfo;
+import android.graphics.drawable.Drawable;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
import android.view.View;
@@ -18,6 +20,7 @@ import android.widget.ImageView;
import android.widget.ListView;
import android.widget.TextView;
+import java.util.ArrayList;
import java.util.List;
/**
@@ -31,47 +34,79 @@ public class ChooseHostBrowserDialog {
* dialog.
*/
public interface DialogListener {
- void onHostBrowserSelected(String packageName);
+ void onHostBrowserSelected(String selectedHostBrowser);
void onQuit();
}
+ /** Stores information about a potential host browser for the WebAPK. */
+ public static class BrowserItem {
+ private String mPackageName;
+ private CharSequence mApplicationLabel;
+ private Drawable mIcon;
+ private boolean mSupportWebApks;
+
+ public BrowserItem(String packageName, CharSequence applicationLabel, Drawable icon,
+ boolean supportWebApks) {
+ mPackageName = packageName;
+ mApplicationLabel = applicationLabel;
+ mIcon = icon;
+ mSupportWebApks = supportWebApks;
+ }
+
+ /** Returns the package name of a browser. */
+ public String getPackageName() {
+ return mPackageName;
+ }
+
+ /** Returns the application name of a browser. */
+ public CharSequence getApplicationName() {
+ return mApplicationLabel;
+ }
+
+ /** Returns a drawable of the browser icon. */
+ public Drawable getApplicationIcon() {
+ return mIcon;
+ }
+
+ /** Returns whether the browser supports WebAPKs. */
+ public boolean supportWebApks() {
+ return mSupportWebApks;
+ }
+ }
+
/** Listens to which browser is chosen by the user to launch WebAPK. */
private DialogListener mListener;
/**
* Shows the dialog for choosing a host browser.
- * @param activity The current activity in which to create the dialog.
- * @param url URL of the WebAPK that is shown on the dialog.
+ * @param context The current Context.
+ * @param listener The listener for the dialog.
+ * @param infos The list of resolved infos of the browsers that is shown on the dialog.
pkotwicz 2017/06/05 19:18:20 Nit: "resolved infos" -> ResolveInfos
Xi Han 2017/06/06 15:12:28 Done.
+ * @param url URL of the WebAPK for which the dialog is shown.
*/
- public void show(Activity activity, String url) {
- if (!(activity instanceof DialogListener)) {
- throw new IllegalArgumentException(
- activity.toString() + " must implement DialogListener");
- }
-
- mListener = (DialogListener) activity;
- final List<WebApkUtils.BrowserItem> browserItems =
- WebApkUtils.getBrowserInfosForHostBrowserSelection(activity.getPackageManager());
+ public static void show(
+ Context context, final DialogListener listener, List<ResolveInfo> infos, String url) {
+ final List<BrowserItem> browserItems =
+ getBrowserInfosForHostBrowserSelection(context.getPackageManager(), infos);
// The dialog contains:
// 1) a description of the dialog.
// 2) a list of browsers for user to choose from.
- View view =
- LayoutInflater.from(activity).inflate(R.layout.choose_host_browser_dialog, null);
+ View view = LayoutInflater.from(context).inflate(R.layout.choose_host_browser_dialog, null);
TextView desc = (TextView) view.findViewById(R.id.desc);
ListView browserList = (ListView) view.findViewById(R.id.browser_list);
- desc.setText(activity.getString(R.string.choose_host_browser, url));
- browserList.setAdapter(new BrowserArrayAdapter(activity, browserItems));
+ desc.setText(context.getString(R.string.choose_host_browser, url));
+ browserList.setAdapter(new BrowserArrayAdapter(context, browserItems));
- AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(
- activity, android.R.style.Theme_DeviceDefault_Light_Dialog));
- builder.setTitle(activity.getString(R.string.choose_host_browser_dialog_title, url))
+ AlertDialog.Builder builder = new AlertDialog.Builder(
+ new ContextThemeWrapper(context, android.R.style.Theme_DeviceDefault_Light_Dialog));
+ builder.setTitle(context.getString(R.string.choose_host_browser_dialog_title, url))
.setView(view)
.setNegativeButton(R.string.choose_host_browser_dialog_quit,
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
- mListener.onQuit();
+ listener.onQuit();
}
});
@@ -79,9 +114,9 @@ public class ChooseHostBrowserDialog {
browserList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
- WebApkUtils.BrowserItem browserItem = browserItems.get(position);
+ BrowserItem browserItem = browserItems.get(position);
if (browserItem.supportWebApks()) {
- mListener.onHostBrowserSelected(browserItem.getPackageName());
+ listener.onHostBrowserSelected(browserItem.getPackageName());
dialog.cancel();
}
}
@@ -90,12 +125,26 @@ public class ChooseHostBrowserDialog {
dialog.show();
};
+ /** Returns a list of BrowserItem for all of the installed browsers. */
+ private static List<BrowserItem> getBrowserInfosForHostBrowserSelection(
+ PackageManager packageManager, List<ResolveInfo> resolveInfos) {
+ List<BrowserItem> browsers = new ArrayList<>();
+ List<String> browsersSupportingWebApk = WebApkUtils.getBrowsersSupportingWebApk();
+
+ for (ResolveInfo info : resolveInfos) {
+ browsers.add(new BrowserItem(info.activityInfo.packageName,
+ info.loadLabel(packageManager), info.loadIcon(packageManager),
+ browsersSupportingWebApk.contains(info.activityInfo.packageName)));
+ }
+ return browsers;
pkotwicz 2017/06/05 19:18:19 A friendly reminder to add the Comparable logic fr
Xi Han 2017/06/06 15:12:28 Thanks!
+ }
+
/** Item adaptor for the list of browsers. */
- private static class BrowserArrayAdapter extends ArrayAdapter<WebApkUtils.BrowserItem> {
- private List<WebApkUtils.BrowserItem> mBrowsers;
+ private static class BrowserArrayAdapter extends ArrayAdapter<BrowserItem> {
+ private List<BrowserItem> mBrowsers;
private LayoutInflater mLayoutInflater;
- public BrowserArrayAdapter(Context context, List<WebApkUtils.BrowserItem> browsers) {
+ public BrowserArrayAdapter(Context context, List<BrowserItem> browsers) {
super(context, R.layout.choose_host_browser_dialog_list, browsers);
mLayoutInflater = LayoutInflater.from(context);
mBrowsers = browsers;
@@ -110,7 +159,7 @@ public class ChooseHostBrowserDialog {
TextView name = (TextView) convertView.findViewById(R.id.browser_name);
ImageView icon = (ImageView) convertView.findViewById(R.id.browser_icon);
- WebApkUtils.BrowserItem item = mBrowsers.get(position);
+ BrowserItem item = mBrowsers.get(position);
name.setText(item.getApplicationName());
name.setEnabled(item.supportWebApks());
@@ -124,4 +173,4 @@ public class ChooseHostBrowserDialog {
return mBrowsers.get(position).supportWebApks();
}
}
-}
+}

Powered by Google App Engine
This is Rietveld 408576698