morristech
3/10/2017 - 6:08 AM

in Activity BroadcastReceiver

in Activity BroadcastReceiver

package com.kuapay.mo.activity;

import android.app.ActionBar;
import android.app.AlertDialog;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.IntentFilter;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.BatteryManager;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.webkit.WebView;

import android.widget.TextView;
import android.widget.Toast;

import com.kuapay.mo.KuaApplication;
import com.kuapay.mo.fragment.MobileOrderingWebViewFragment;
import com.kuapay.mo.R;
import com.kuapay.mo.fragment.PinDialogFragment;
import com.kuapay.mo.interfaces.PinDialogFragmentInterface;
import com.kuapay.mo.util.Utils;

public class MainActivity extends BaseFragmentActivity implements PinDialogFragmentInterface
{
    //region Constant
    private final String DEBUG_TAG = "["+getClass().getSimpleName()+"]";
    private static final String CONNECTIVITY_ACTION = "android.net.conn.CONNECTIVITY_CHANGE";
    private static final String BATTERY_ACTION = "android.intent.action.ACTION_BATTERY_LOW";
    private static final String BOOT_COMPLETED = "android.intent.action.BOOT_COMPLETED";
    private static final String WEB_VIEW_FRAGMENT = "web_view_fragment";
    private static final String PIN_DIALOG_FRAGMENT = "pin_dialog_fragment";
    //endregion

    //region Variables
    private AlertDialog batteryAlertDialog;
    private AlertDialog connectivityAlertDialog;
    private ConnectivityReceiver connectivityReceiver;
    private BatteryLevelReceiver batteryLevelReceiver;
    private BootReceiver bootReceiver;
    private TextView darkOverylayTextView;
    //endregion

    //region Listeners
    private View.OnClickListener hideActionBarClickListener = new View.OnClickListener()
    {
        @Override
        public void onClick(View view)
        {
            ActionBar mActionBar = getActionBar();
            if(mActionBar.isShowing())
                mActionBar.hide();

            darkOverylayTextView.setVisibility(View.GONE);
        }
    };
    //endregion

    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        ActionBar mActionBar = getActionBar();
        mActionBar.hide();

        if (savedInstanceState == null)
            getFragmentManager()
                    .beginTransaction()
                    .add(R.id.fragment_placeHolder_frameLayout,new MobileOrderingWebViewFragment(), WEB_VIEW_FRAGMENT)
                    .commit();

        connectivityReceiver = new ConnectivityReceiver();
        batteryLevelReceiver = new BatteryLevelReceiver();
        bootReceiver = new BootReceiver();

        IntentFilter filter = new IntentFilter(CONNECTIVITY_ACTION);
        registerReceiver(connectivityReceiver,filter);

        filter = new IntentFilter(BATTERY_ACTION);
        registerReceiver(batteryLevelReceiver,filter);

        filter = new IntentFilter(BOOT_COMPLETED);
        registerReceiver(bootReceiver, filter);

        bindUIElements();
        setListeners();
    }

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

        if (((KuaApplication)getApplication()).isNewURL())
        {
           ((KuaApplication) getApplication()).setHasNewURL(false);
            reloadWithNewURL();
        }
    }

    @Override
    public void reloadWithNewURL()
    {
        getFragmentManager()
                .beginTransaction()
                .replace(R.id.fragment_placeHolder_frameLayout,new MobileOrderingWebViewFragment(), WEB_VIEW_FRAGMENT)
                .commit();
    }

    @Override
    protected void onDestroy()
    {
        unregisterReceiver(connectivityReceiver);
        unregisterReceiver(batteryLevelReceiver);
        unregisterReceiver(bootReceiver);
        super.onDestroy();
    }

    @Override
    public void onBackPressed()
    {
        MobileOrderingWebViewFragment fragment = (MobileOrderingWebViewFragment)getFragmentManager().findFragmentByTag(WEB_VIEW_FRAGMENT);
        if (fragment.isVisible())
        {
            WebView webView = fragment.getWebView();
            if(webView != null && webView.canGoBack())
                webView.goBack();
        }

        PinDialogFragment selectDialogFragment = new PinDialogFragment();
        selectDialogFragment.show(getFragmentManager(), PIN_DIALOG_FRAGMENT);
    }

    private void bindUIElements()
    {
        darkOverylayTextView = (TextView) findViewById(R.id.dark_overlay_frameLayout);
    }

    private void setListeners()
    {
        darkOverylayTextView.setOnClickListener(hideActionBarClickListener);
    }

    private void showNetworkDialog()
    {
        if (connectivityAlertDialog == null)
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, R.style.CustomAlertDialogTheme);
            builder.setTitle(getString(R.string.header_connectivity_issue))

                    .setMessage(getString(R.string.body_connect_to_internet))
                    .setCancelable(false)
                    .setNeutralButton(getString(R.string.ok), new DialogInterface.OnClickListener()
                    {
                        public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id)
                        {
                            dialog.cancel();
                        }
                    });

            connectivityAlertDialog = builder.create();
            connectivityAlertDialog.show();
        }
        else if (!connectivityAlertDialog.isShowing())
            connectivityAlertDialog.show();
    }

    private void showBatteryDialog()
    {
        if (batteryAlertDialog == null)
        {
            AlertDialog.Builder builder = new AlertDialog.Builder(MainActivity.this, R.style.CustomAlertDialogTheme);
            builder.setTitle(getString(R.string.header_battery_low))
                    .setMessage(getString(R.string.body_connect_power))
                    .setCancelable(false)
                    .setNeutralButton(getString(R.string.ok), new DialogInterface.OnClickListener()
                    {
                        public void onClick(@SuppressWarnings("unused") final DialogInterface dialog, @SuppressWarnings("unused") final int id)
                        {
                            dialog.cancel();
                        }
                    });
            batteryAlertDialog = builder.create();
            batteryAlertDialog.show();
        }
        else if (!batteryAlertDialog.isShowing())
            batteryAlertDialog.show();
    }

    @Override
    public void onVerifyPin(String pin)
    {
        PinDialogFragment pinDialogFragment = (PinDialogFragment) getFragmentManager().findFragmentByTag(PIN_DIALOG_FRAGMENT);
        if(pin.equalsIgnoreCase(getString(R.string.pin)))
        {
            if(pinDialogFragment != null)
                pinDialogFragment.dismiss();

            ActionBar mActionBar = getActionBar();
            if(!mActionBar.isShowing())
            {    mActionBar.show();
                darkOverylayTextView.setVisibility(View.VISIBLE);
            }
            Utils.hideKeyboard(this);
        }
        else
        {
           Toast.makeText(this, getString(R.string.msg_error_wrong_pin), Toast.LENGTH_SHORT).show();

            if(pinDialogFragment != null)
                pinDialogFragment.clearPin();
        }
    }

    //region Classes

    private class ConnectivityReceiver extends BroadcastReceiver
    {
        public void onReceive(Context context, Intent intent)
        {
            ConnectivityManager cm = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            NetworkInfo netInfo = cm.getActiveNetworkInfo();
            boolean isConnected = netInfo != null && netInfo.isConnectedOrConnecting();
            Log.i(DEBUG_TAG, isConnected ? "is connected" : "not connected");

            if (!isConnected)
                showNetworkDialog();
        }
    }

    private class BatteryLevelReceiver extends BroadcastReceiver
    {
        public void onReceive(Context context, Intent intent)
        {
            int status = intent.getIntExtra(BatteryManager.EXTRA_STATUS, -1);
            boolean isCharging = status == BatteryManager.BATTERY_STATUS_CHARGING ||status == BatteryManager.BATTERY_STATUS_FULL;

            if (!isCharging)
                showBatteryDialog();
        }
    }

    private class BootReceiver extends BroadcastReceiver
    {
        public void onReceive(Context context, Intent intent)
        {
            reloadWithNewURL();
        }
    }
    //endregion
}