Ejemplo n.º 1
0
  @Override
  public TiUIView createView(Activity activity) {
    // for HW windows, we often don't have the correct activity available until this point
    // so set the passed in activity on the proxy for future use
    if (activity != getActivity()) {
      setActivity(activity);
    }

    ((TiBaseActivity) activity).addOnLifecycleEventListener(this);

    destroyed = false;
    if (lam == null) {
      /*
       * TiContext tiContext = getTiContext();
       * if (tiContext == null) {
       * Log.w(LCAT, "MapView proxy context is no longer valid.  Unable to create MapView.");
       * return null;
       * }
       */
      final TiRootActivity rootActivity = TiApplication.getInstance().getRootActivity();
      if (rootActivity == null) {
        Log.w(TAG, "Application's root activity has been destroyed.  Unable to create MapView.");
        return null;
      }
      /*
       * TiContext rootContext = rootActivity.getTiContext();
       * if (rootContext == null) {
       * Log.w(LCAT, "Application's root context is no longer valid.  Unable to create MapView.");
       * return null;
       * }
       */
      // We need to know when root activity destroys, since this lam is
      // based on its context;
      rootLifecycleListener =
          new OnLifecycleEvent() {
            @Override
            public void onCreate(Activity activity, Bundle savedInstanceState) {}

            @Override
            public void onStop(Activity activity) {}

            @Override
            public void onStart(Activity activity) {}

            @Override
            public void onResume(Activity activity) {}

            @Override
            public void onPause(Activity activity) {}

            @Override
            public void onDestroy(Activity activity) {
              if (activity != null && activity.equals(rootActivity)) {
                destroyMapActivity();
                lam = null;
              }
            }
          };
      TiApplication.getInstance()
          .getRootActivity()
          .addOnLifecycleEventListener(rootLifecycleListener);
      lam = new LocalActivityManager(rootActivity, true);
      lam.dispatchCreate(null);
    }

    if (mapWindow != null) {
      throw new IllegalStateException(
          "MapView already created. Android can support one MapView per Application.");
    }

    for (int i = 0; i < annotations.size(); i++) {
      annotations.get(i).setViewProxy(this);
    }

    TiApplication tiApp = TiApplication.getInstance();
    Intent intent = new Intent(tiApp, TiMapActivity.class);
    mapWindow = lam.startActivity("TIMAP", intent);
    lam.dispatchResume();
    mapView = new TiMapView(this, mapWindow, annotations, selectedAnnotations);

    Object location = getProperty(TiC.PROPERTY_LOCATION);
    if (location != null) {
      if (location instanceof HashMap) {
        mapView.doSetLocation((HashMap) location);
      } else {
        Log.w(TAG, "Location is set, but the structure is not correct", Log.DEBUG_MODE);
      }
    }

    mapView.updateAnnotations();
    mapView.updateRoute();

    return mapView;
  }