content: package org.opencv.android;
  
  import android.app.Activity;
  import android.app.AlertDialog;
  import android.content.Context;
  import android.content.DialogInterface;
  import android.content.DialogInterface.OnClickListener;
  import android.util.Log;
  
  /**
   * Basic implementation of LoaderCallbackInterface.
   */
  public abstract class BaseLoaderCallback implements LoaderCallbackInterface {
  
      public BaseLoaderCallback(Context AppContext) {
          mAppContext = AppContext;
      }
  
      public void onManagerConnected(int status)
      {
          switch (status)
          {
              /** OpenCV initialization was successful. **/
              case LoaderCallbackInterface.SUCCESS:
              {
                  /** Application must override this method to handle successful library initialization. **/
              } break;
              /** OpenCV loader can not start Google Play Market. **/
              case LoaderCallbackInterface.MARKET_ERROR:
              {
                  Log.e(TAG, "Package installation failed!");
                  AlertDialog MarketErrorMessage = new AlertDialog.Builder(mAppContext).create();
                  MarketErrorMessage.setTitle("OpenCV Manager");
                  MarketErrorMessage.setMessage("Package installation failed!");
                  MarketErrorMessage.setCancelable(false); // This blocks the 'BACK' button
                  MarketErrorMessage.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new OnClickListener() {
                      public void onClick(DialogInterface dialog, int which) {
                          finish();
                      }
                  });
                  MarketErrorMessage.show();
              } break;
              /** Package installation has been canceled. **/
              case LoaderCallbackInterface.INSTALL_CANCELED:
              {
                  Log.d(TAG, "OpenCV library instalation was canceled by user");
                  finish();
              } break;
              /** Application is incompatible with this version of OpenCV Manager. Possibly, a service update is required. **/
              case LoaderCallbackInterface.INCOMPATIBLE_MANAGER_VERSION:
              {
                  Log.d(TAG, "OpenCV Manager Service is uncompatible with this app!");
                  AlertDialog IncomatibilityMessage = new AlertDialog.Builder(mAppContext).create();
                  IncomatibilityMessage.setTitle("OpenCV Manager");
                  IncomatibilityMessage.setMessage("OpenCV Manager service is incompatible with this app. Try to update it via Google Play.");
                  IncomatibilityMessage.setCancelable(false); // This blocks the 'BACK' button
                  IncomatibilityMessage.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new OnClickListener() {
                      public void onClick(DialogInterface dialog, int which) {
                          finish();
                      }
                  });
                  IncomatibilityMessage.show();
              } break;
              /** Other status, i.e. INIT_FAILED. **/
              default:
              {
                  Log.e(TAG, "OpenCV loading failed!");
                  AlertDialog InitFailedDialog = new AlertDialog.Builder(mAppContext).create();
                  InitFailedDialog.setTitle("OpenCV error");
                  InitFailedDialog.setMessage("OpenCV was not initialised correctly. Application will be shut down");
                  InitFailedDialog.setCancelable(false); // This blocks the 'BACK' button
                  InitFailedDialog.setButton(AlertDialog.BUTTON_POSITIVE, "OK", new OnClickListener() {
  
                      public void onClick(DialogInterface dialog, int which) {
                          finish();
                      }
                  });
  
                  InitFailedDialog.show();
              } break;
          }
      }
  
      public void onPackageInstall(final int operation, final InstallCallbackInterface callback)
      {
          switch (operation)
          {
              case InstallCallbackInterface.NEW_INSTALLATION:
              {
                  AlertDialog InstallMessage = new AlertDialog.Builder(mAppContext).create();
                  InstallMessage.setTitle("Package not found");
                  InstallMessage.setMessage(callback.getPackageName() + " package was not found! Try to install it?");
                  InstallMessage.setCancelable(false); // This blocks the 'BACK' button
                  InstallMessage.setButton(AlertDialog.BUTTON_POSITIVE, "Yes", new OnClickListener()
                  {
                      public void onClick(DialogInterface dialog, int which)
                      {
                          callback.install();
                      }
                  });
  
                  InstallMessage.setButton(AlertDialog.BUTTON_NEGATIVE, "No", new OnClickListener() {
  
                      public void onClick(DialogInterface dialog, int which)
                      {
                          callback.cancel();
                      }
                  });
  
                  InstallMessage.show();
              } break;
              case InstallCallbackInterface.INSTALLATION_PROGRESS:
              {
                  AlertDialog WaitMessage = new AlertDialog.Builder(mAppContext).create();
                  WaitMessage.setTitle("OpenCV is not ready");
                  WaitMessage.setMessage("Installation is in progress. Wait or exit?");
                  WaitMessage.setCancelable(false); // This blocks the 'BACK' button
                  WaitMessage.setButton(AlertDialog.BUTTON_POSITIVE, "Wait", new OnClickListener() {
                      public void onClick(DialogInterface dialog, int which) {
                          callback.wait_install();
                      }
                  });
                  WaitMessage.setButton(AlertDialog.BUTTON_NEGATIVE, "Exit", new OnClickListener() {
                      public void onClick(DialogInterface dialog, int which) {
                          callback.cancel();
                      }
                  });
  
                  WaitMessage.show();
              } break;
          }
      }
  
      void finish()
      {
          ((Activity) mAppContext).finish();
      }
  
      protected Context mAppContext;
      private final static String TAG = "BaseLoaderCallback";
  }
  