| Index: chrome/android/webapk/shell_apk/src/org/chromium/webapk/shell_apk/ChooseHostBrowserDialogFragment.java
|
| diff --git a/chrome/android/webapk/shell_apk/src/org/chromium/webapk/shell_apk/ChooseHostBrowserDialogFragment.java b/chrome/android/webapk/shell_apk/src/org/chromium/webapk/shell_apk/ChooseHostBrowserDialogFragment.java
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..6fb6841c9d1394bc5e56e3fb49a66685b03df07d
|
| --- /dev/null
|
| +++ b/chrome/android/webapk/shell_apk/src/org/chromium/webapk/shell_apk/ChooseHostBrowserDialogFragment.java
|
| @@ -0,0 +1,166 @@
|
| +// 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.AlertDialog;
|
| +import android.app.Dialog;
|
| +import android.content.Context;
|
| +import android.content.DialogInterface;
|
| +import android.os.Bundle;
|
| +import android.support.v4.app.DialogFragment;
|
| +import android.view.ContextThemeWrapper;
|
| +import android.view.LayoutInflater;
|
| +import android.view.View;
|
| +import android.view.ViewGroup;
|
| +import android.widget.AdapterView;
|
| +import android.widget.AdapterView.OnItemClickListener;
|
| +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 WebAPKs. Calls the listener callback when the
|
| + * host browser is chosen.
|
| + */
|
| +public class ChooseHostBrowserDialogFragment extends DialogFragment {
|
| + /**
|
| + * 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();
|
| + }
|
| +
|
| + private static final String EXTRA_URL = "url";
|
| +
|
| + // Listens to which browser is chosen by the user to launch WebAPKs.
|
| + private DialogListener mListener;
|
| +
|
| + public static ChooseHostBrowserDialogFragment newInstance(String url) {
|
| + ChooseHostBrowserDialogFragment dialogFragment = new ChooseHostBrowserDialogFragment();
|
| + Bundle args = new Bundle();
|
| + args.putString(EXTRA_URL, url);
|
| + dialogFragment.setArguments(args);
|
| +
|
| + return dialogFragment;
|
| + }
|
| +
|
| + @Override
|
| + public Dialog onCreateDialog(Bundle savedInstanceState) {
|
| + String url = getArguments().getString(EXTRA_URL);
|
| + final List<WebApkUtils.BrowserItem> browserItems =
|
| + WebApkUtils.getBrowserInfosForHostBrowserSelection(
|
| + getActivity().getPackageManager());
|
| +
|
| + // The dialog contains:
|
| + // 1) a description of the dialog.
|
| + // 2) a list of browsers for user to choose from.
|
| + View view = LayoutInflater.from(getActivity())
|
| + .inflate(R.layout.choose_host_browser_dialog, null);
|
| + ContentViewHolder contentViewHolder = new ContentViewHolder();
|
| + contentViewHolder.mDesc = (TextView) view.findViewById(R.id.desc);
|
| + contentViewHolder.mDesc.setText(getActivity().getString(R.string.choose_host_browser, url));
|
| + contentViewHolder.mBrowserList = (ListView) view.findViewById(R.id.browser_list);
|
| + contentViewHolder.mBrowserList.setAdapter(
|
| + new BrowserArrayAdapter(getActivity(), browserItems));
|
| + view.setTag(contentViewHolder);
|
| +
|
| + AlertDialog.Builder builder = new AlertDialog.Builder(new ContextThemeWrapper(
|
| + getActivity(), android.R.style.Theme_DeviceDefault_Light_Dialog));
|
| + builder.setTitle(getActivity().getString(R.string.choose_host_browser_dialog_title, url))
|
| + .setView(view)
|
| + .setNegativeButton(R.string.choose_host_browser_dialog_cancel,
|
| + new DialogInterface.OnClickListener() {
|
| + @Override
|
| + public void onClick(DialogInterface dialog, int which) {
|
| + mListener.onQuit();
|
| + }
|
| + });
|
| +
|
| + final AlertDialog dialog = builder.create();
|
| + contentViewHolder.mBrowserList.setOnItemClickListener(new OnItemClickListener() {
|
| + @Override
|
| + public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
|
| + WebApkUtils.BrowserItem browserItem = browserItems.get(position);
|
| + if (browserItem.isEnabled()) {
|
| + mListener.onHostBrowserSelected(browserItem.getPackageName());
|
| + dialog.cancel();
|
| + }
|
| + }
|
| + });
|
| +
|
| + return dialog;
|
| + };
|
| +
|
| + @Override
|
| + public void onAttach(Context context) {
|
| + super.onAttach(context);
|
| + try {
|
| + mListener = (DialogListener) context;
|
| + } catch (ClassCastException e) {
|
| + throw new ClassCastException(context.toString() + "must implement DialogListener");
|
| + }
|
| + }
|
| +
|
| + /** View holder for the content of the dialog. */
|
| + private static class ContentViewHolder {
|
| + TextView mDesc;
|
| + ListView mBrowserList;
|
| + }
|
| +
|
| + /**
|
| + * Item holder for the browser list. Each item contains the icon and application name of the
|
| + * browser.
|
| + */
|
| + private static class BrowserListViewHolder {
|
| + ImageView mIcon;
|
| + TextView mName;
|
| + }
|
| +
|
| + /**
|
| + * Item adaptor for the list of browsers.
|
| + */
|
| + private static class BrowserArrayAdapter extends ArrayAdapter<WebApkUtils.BrowserItem> {
|
| + private List<WebApkUtils.BrowserItem> mBrowsers;
|
| + private Context mContext;
|
| +
|
| + public BrowserArrayAdapter(Context context, List<WebApkUtils.BrowserItem> browsers) {
|
| + super(context, R.layout.choose_host_browser_dialog_list, browsers);
|
| + mContext = context;
|
| + mBrowsers = browsers;
|
| + }
|
| +
|
| + @Override
|
| + public View getView(int position, View convertView, ViewGroup parent) {
|
| + BrowserListViewHolder holder;
|
| +
|
| + if (convertView == null) {
|
| + convertView = LayoutInflater.from(mContext).inflate(
|
| + R.layout.choose_host_browser_dialog_list, null);
|
| + holder = new BrowserListViewHolder();
|
| + holder.mName = (TextView) convertView.findViewById(R.id.browser_name);
|
| + holder.mIcon = (ImageView) convertView.findViewById(R.id.browser_icon);
|
| + convertView.setTag(holder);
|
| + } else {
|
| + holder = (BrowserListViewHolder) convertView.getTag();
|
| + }
|
| +
|
| + WebApkUtils.BrowserItem item = mBrowsers.get(position);
|
| + holder.mName.setText(item.getApplicationName());
|
| + holder.mName.setEnabled(item.isEnabled());
|
| + holder.mIcon.setImageDrawable(item.getApplicationIcon());
|
| + return convertView;
|
| + }
|
| +
|
| + @Override
|
| + public boolean isEnabled(int position) {
|
| + return mBrowsers.get(position).isEnabled();
|
| + }
|
| + }
|
| +}
|
|
|