| 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
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..d63dd27fa05cb8984253bfa265dd33a8e7d6ccfb
|
| --- /dev/null
|
| +++ b/chrome/android/webapk/shell_apk/src/org/chromium/webapk/shell_apk/ChooseHostBrowserDialog.java
|
| @@ -0,0 +1,139 @@
|
| +// Copyright 2017 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +package org.chromium.webapk.shell_apk;
|
| +
|
| +import android.app.Activity;
|
| +import android.app.AlertDialog;
|
| +import android.content.Context;
|
| +import android.content.DialogInterface;
|
| +import android.graphics.Color;
|
| +import android.view.ContextThemeWrapper;
|
| +import android.view.LayoutInflater;
|
| +import android.view.View;
|
| +import android.view.ViewGroup;
|
| +import android.widget.AdapterView;
|
| +import android.widget.ArrayAdapter;
|
| +import android.widget.ImageView;
|
| +import android.widget.ListView;
|
| +import android.widget.TextView;
|
| +
|
| +import java.util.List;
|
| +
|
| +/**
|
| + * Shows the dialog to choose a host browser to launch WebAPK. Calls the listener callback when the
|
| + * host browser is chosen.
|
| + */
|
| +public class ChooseHostBrowserDialog {
|
| + /**
|
| + * A listener to receive updates when user chooses a host browser for the WebAPK, or dismiss the
|
| + * dialog.
|
| + */
|
| + public interface DialogListener {
|
| + void onHostBrowserSelected(String packageName);
|
| + void onQuit();
|
| + }
|
| +
|
| + /** 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.
|
| + */
|
| + 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());
|
| +
|
| + // 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);
|
| + 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, url));
|
| +
|
| + // The context theme wrapper is needed for pre-L.
|
| + 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))
|
| + .setView(view)
|
| + .setNegativeButton(R.string.choose_host_browser_dialog_quit,
|
| + new DialogInterface.OnClickListener() {
|
| + @Override
|
| + public void onClick(DialogInterface dialog, int which) {
|
| + mListener.onQuit();
|
| + }
|
| + });
|
| +
|
| + final AlertDialog dialog = builder.create();
|
| + browserList.setOnItemClickListener(new AdapterView.OnItemClickListener() {
|
| + @Override
|
| + public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
| + WebApkUtils.BrowserItem browserItem = browserItems.get(position);
|
| + if (browserItem.supportsWebApks()) {
|
| + mListener.onHostBrowserSelected(browserItem.getPackageName());
|
| + dialog.cancel();
|
| + }
|
| + }
|
| + });
|
| +
|
| + dialog.show();
|
| + };
|
| +
|
| + /** Item adaptor for the list of browsers. */
|
| + private static class BrowserArrayAdapter extends ArrayAdapter<WebApkUtils.BrowserItem> {
|
| + private List<WebApkUtils.BrowserItem> mBrowsers;
|
| + private Context mContext;
|
| + private String mUrl;
|
| +
|
| + public BrowserArrayAdapter(
|
| + Context context, List<WebApkUtils.BrowserItem> browsers, String url) {
|
| + super(context, R.layout.choose_host_browser_dialog_list, browsers);
|
| + mContext = context;
|
| + mBrowsers = browsers;
|
| + mUrl = url;
|
| + }
|
| +
|
| + @Override
|
| + public View getView(int position, View convertView, ViewGroup parent) {
|
| + if (convertView == null) {
|
| + convertView = LayoutInflater.from(mContext).inflate(
|
| + R.layout.choose_host_browser_dialog_list, null);
|
| + }
|
| +
|
| + TextView name = (TextView) convertView.findViewById(R.id.browser_name);
|
| + ImageView icon = (ImageView) convertView.findViewById(R.id.browser_icon);
|
| + WebApkUtils.BrowserItem item = mBrowsers.get(position);
|
| +
|
| + name.setEnabled(item.supportsWebApks());
|
| + if (item.supportsWebApks()) {
|
| + name.setText(item.getApplicationName());
|
| + name.setTextColor(Color.BLACK);
|
| + } else {
|
| + name.setText(mContext.getString(R.string.host_browser_item_not_supporting_webapks,
|
| + item.getApplicationName(), mUrl));
|
| + name.setSingleLine(false);
|
| + name.setTextColor(Color.LTGRAY);
|
| + }
|
| + icon.setImageDrawable(item.getApplicationIcon());
|
| + icon.setEnabled(item.supportsWebApks());
|
| + return convertView;
|
| + }
|
| +
|
| + @Override
|
| + public boolean isEnabled(int position) {
|
| + return mBrowsers.get(position).supportsWebApks();
|
| + }
|
| + }
|
| +}
|
|
|