/* * Copyright (C) 2017 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.bips.ui; import android.annotation.SuppressLint; import android.app.AlertDialog; import android.app.Fragment; import android.net.wifi.p2p.WifiP2pDevice; import android.os.Bundle; import android.view.View; import com.android.bips.BuiltInPrintService; import com.android.bips.R; import com.android.bips.discovery.ConnectionListener; import com.android.bips.discovery.DiscoveredPrinter; import com.android.bips.p2p.P2pPrinterConnection; /** * Keep users aware of the P2P connection progress and allow them to cancel. */ public class AddP2pPrinterDialog extends AlertDialog implements ConnectionListener { private final WifiP2pDevice mPeer; private final BuiltInPrintService mPrintService; private final Fragment mFragment; private P2pPrinterConnection mValidating; AddP2pPrinterDialog(Fragment fragment, BuiltInPrintService printService, WifiP2pDevice peer) { super(fragment.getContext()); mFragment = fragment; mPrintService = printService; mPeer = peer; } @SuppressLint("InflateParams") @Override protected void onCreate(Bundle savedInstanceState) { // Prepare the dialog for display setView(getLayoutInflater().inflate(R.layout.manual_printer_add, null)); setTitle(getContext().getString(R.string.connecting_to, mPeer.deviceName)); setButton(AlertDialog.BUTTON_NEGATIVE, getContext().getString(android.R.string.cancel), (OnClickListener) null); super.onCreate(savedInstanceState); findViewById(R.id.labelHostname).setVisibility(View.GONE); findViewById(R.id.hostname).setVisibility(View.GONE); findViewById(R.id.progress).setVisibility(View.VISIBLE); setOnDismissListener(d -> mValidating.close()); // Attempt to add the discovered device as a P2P printer mValidating = new P2pPrinterConnection(mPrintService, mPeer, this); } @Override public void onConnectionComplete(DiscoveredPrinter printer) { if (printer != null) { // Callback could arrive quickly if we are already connected, so run later mPrintService.getMainHandler().post(() -> { mValidating.close(); mPrintService.getP2pDiscovery().addValidPrinter(printer); mFragment.getActivity().finish(); }); dismiss(); } else { fail(); } } @Override public void onConnectionDelayed(boolean delayed) { findViewById(R.id.connect_hint).setVisibility(delayed ? View.VISIBLE : View.GONE); } private void fail() { cancel(); new AlertDialog.Builder(getContext()) .setTitle(getContext().getString(R.string.failed_connection, mPeer.deviceName)) .setPositiveButton(android.R.string.ok, null) .show(); } }