Chromium Code Reviews| 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..27d5298cfc02cfa88b7079b5e75cb575d4b14cf9 |
| --- /dev/null |
| +++ b/chrome/android/webapk/shell_apk/src/org/chromium/webapk/shell_apk/ChooseHostBrowserDialogFragment.java |
| @@ -0,0 +1,142 @@ |
| +// 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 |
|
pkotwicz
2017/05/26 22:38:39
Nit: WebAPKs -> WebAPK
Xi Han
2017/05/29 21:18:55
Done.
|
| + * 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. |
|
pkotwicz
2017/05/26 22:38:39
Nit: WebAPKs -> WebAPK
Xi Han
2017/05/29 21:18:55
Done.
|
| + 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); |
| + TextView desc = (TextView) view.findViewById(R.id.desc); |
| + ListView browserList = (ListView) view.findViewById(R.id.browser_list); |
| + desc.setText(getActivity().getString(R.string.choose_host_browser, url)); |
| + browserList.setAdapter(new BrowserArrayAdapter(getActivity(), browserItems)); |
| + |
| + 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_quit, |
| + new DialogInterface.OnClickListener() { |
| + @Override |
| + public void onClick(DialogInterface dialog, int which) { |
| + mListener.onQuit(); |
| + } |
| + }); |
| + |
| + final AlertDialog dialog = builder.create(); |
| + browserList.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"); |
| + } |
| + } |
| + |
| + /** |
| + * 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) { |
| + if (convertView == null) { |
| + convertView = LayoutInflater.from(mContext).inflate( |
| + R.layout.choose_host_browser_dialog_list, null); |
| + } |
| + |
| + WebApkUtils.BrowserItem item = mBrowsers.get(position); |
| + TextView name = (TextView) convertView.findViewById(R.id.browser_name); |
| + ImageView icon = (ImageView) convertView.findViewById(R.id.browser_icon); |
| + name.setText(item.getApplicationName()); |
| + name.setEnabled(item.isEnabled()); |
| + icon.setImageDrawable(item.getApplicationIcon()); |
| + return convertView; |
| + } |
| + |
| + @Override |
| + public boolean isEnabled(int position) { |
| + return mBrowsers.get(position).isEnabled(); |
| + } |
| + } |
| +} |