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(); |
+ } |
+ } |
+} |