com.amazonaws.devicefarm.android.referenceapp.Fragments.FixturesFragment.java Source code

Java tutorial

Introduction

Here is the source code for com.amazonaws.devicefarm.android.referenceapp.Fragments.FixturesFragment.java

Source

/*
 * Copyright 2014-2015 Amazon.com, Inc. or its affiliates. All Rights Reserved.
 *
 * Licensed under the Apache License, Version 2.0 (the "License").
 * You may not use this file except in compliance with the License.
 * A copy of the License is located at
 *
 * http://aws.amazon.com/apache2.0
 *
 * or in the "license" file accompanying this file. This file 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.amazonaws.devicefarm.android.referenceapp.Fragments;

import android.annotation.TargetApi;
import android.bluetooth.BluetoothAdapter;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.location.Location;
import android.location.LocationManager;
import android.net.ConnectivityManager;
import android.net.wifi.WifiManager;
import android.nfc.NfcAdapter;
import android.nfc.NfcManager;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

import com.amazonaws.devicefarm.android.referenceapp.R;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.location.LocationServices;

import butterknife.ButterKnife;
import butterknife.InjectView;

/**
 * A fragment to detect the radio statuses within the Android app
 * Used to test out the custom fixtures feature in Device Farm
 */
public class FixturesFragment extends Fragment
        implements GoogleApiClient.ConnectionCallbacks, GoogleApiClient.OnConnectionFailedListener {

    private static final String TAG = "fixtures-fragment";

    @InjectView(R.id.longitude)
    TextView longitude;
    @InjectView(R.id.lat)
    TextView lat;
    @InjectView(R.id.wifi)
    TextView wifi;
    @InjectView(R.id.bluetooth)
    TextView bluetooth;
    @InjectView(R.id.gps)
    TextView gps;
    @InjectView(R.id.nfc)
    TextView nfc;

    private GoogleApiClient googleApiClient;

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, final Bundle savedInstanceState) {
        View view = inflater.inflate(R.layout.fixtures_layout, container, false);
        ButterKnife.inject(this, view);
        buildGoogleApiClient();

        //Registering events to detect radio changes
        final BroadcastReceiver receiver = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                final String action = intent.getAction();
                if (action.equals(BluetoothAdapter.ACTION_STATE_CHANGED)) {
                    updateBluetoothStatusDisplay();
                } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
                    updateWifiStatusDisplay();
                } else if (action.equals(LocationManager.PROVIDERS_CHANGED_ACTION)) {
                    updateGPSStatusDisplay();
                } else if (action.equals(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED)) {
                    updateNFCStatusDisplay();
                }
            }
        };
        IntentFilter filter = new IntentFilter();

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN_MR2) {
            filter.addAction(NfcAdapter.ACTION_ADAPTER_STATE_CHANGED);
        }

        filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
        filter.addAction(BluetoothAdapter.ACTION_STATE_CHANGED);
        filter.addAction(LocationManager.PROVIDERS_CHANGED_ACTION);

        updateWifiStatusDisplay();
        updateBluetoothStatusDisplay();
        updateGPSStatusDisplay();
        updateNFCStatusDisplay();
        getActivity().registerReceiver(receiver, filter);
        return view;
    }

    @Override
    public void onStart() {
        super.onStart();
        googleApiClient.connect();
    }

    @Override
    public void onStop() {
        super.onStop();

        if (googleApiClient.isConnected())
            googleApiClient.disconnect();
    }

    private synchronized void buildGoogleApiClient() {
        googleApiClient = new GoogleApiClient.Builder(getActivity()).addConnectionCallbacks(this)
                .addOnConnectionFailedListener(this).addApi(LocationServices.API).build();
    }

    /**
     * Updates the Wifi status
     */
    private void updateWifiStatusDisplay() {
        final WifiManager wifiManager = (WifiManager) getActivity().getSystemService(Context.WIFI_SERVICE);
        wifi.setText(Boolean.toString(wifiManager.isWifiEnabled()));
    }

    /**
     * Updates the Bluetooth status
     */
    private void updateBluetoothStatusDisplay() {
        final BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
        bluetooth.setText(Boolean.toString(bluetoothAdapter != null && bluetoothAdapter.isEnabled()));
    }

    /**
     * Updates the GPS status
     */
    private void updateGPSStatusDisplay() {
        final LocationManager locationManager = (LocationManager) getActivity()
                .getSystemService(Context.LOCATION_SERVICE);
        gps.setText(Boolean.toString(locationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)));
    }

    /**
     * Updates the NFC Status
     */
    @TargetApi(Build.VERSION_CODES.GINGERBREAD_MR1)
    private void updateNFCStatusDisplay() {
        final NfcManager nfcManager = (NfcManager) getActivity().getSystemService(Context.NFC_SERVICE);
        final NfcAdapter adapter = nfcManager.getDefaultAdapter();
        nfc.setText(Boolean.toString(adapter != null && adapter.isEnabled()));
    }

    /**
     * Sets the location when location api is connected
     * @param bundle
     */
    @Override
    public void onConnected(Bundle bundle) {
        final Location location = LocationServices.FusedLocationApi.getLastLocation(googleApiClient);
        if (location != null) {
            lat.setText("" + location.getLatitude());
            longitude.setText("" + location.getLongitude());
        } else {
            lat.setText("Not Available");
            longitude.setText("Not Available");
        }
    }

    @Override
    public void onConnectionSuspended(int i) {
        googleApiClient.connect();
    }

    @Override
    public void onConnectionFailed(ConnectionResult connectionResult) {
        Log.i(TAG, "Connection failed");
    }
}