Android Open Source - geoar-app Plugin Fragment






From Project

Back to project page geoar-app.

License

The source code is released under:

Apache License

If you think the Android project geoar-app listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/**
 * Copyright 2012 52North Initiative for Geospatial Open Source Software GmbH
 *//w w w . j  a v  a2 s  . com
 * 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 org.n52.geoar.newdata;

import java.util.List;

import org.n52.geoar.R;
import org.n52.geoar.ar.view.IntroController;
import org.n52.geoar.newdata.CheckList.OnCheckedChangedListener;
import org.n52.geoar.newdata.CheckList.OnItemChangedListenerWrapper;
import org.n52.geoar.newdata.PluginDownloader.OnDataSourceResultListener;
import org.n52.geoar.newdata.PluginGridAdapter.OnItemCheckedListener;

import android.content.Context;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnTouchListener;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.GridView;
import android.widget.ProgressBar;
import android.widget.TabHost;
import android.widget.TabHost.OnTabChangeListener;
import android.widget.TabHost.TabSpec;

import com.actionbarsherlock.app.SherlockFragment;
import com.actionbarsherlock.app.SherlockFragmentActivity;
import com.actionbarsherlock.view.Menu;
import com.actionbarsherlock.view.MenuInflater;
import com.actionbarsherlock.view.MenuItem;

/**
 * Fragment for managing and downloading data sources to use within the
 * application
 * 
 */
public class PluginFragment extends SherlockFragment {

  private static final String CURRENT_TAB_KEY = "current_tab";
  private GridView mGridViewInstalled;
  private GridView mGridViewDownload;
  private DownloadPluginsAdapter gridAdapterDownload;
  private InstalledPluginsAdapter gridAdapterInstalled;
  private TabHost mTabHost;

  @Override
  public void onCreate(Bundle savedInstanceState) {
    setHasOptionsMenu(true);
    setRetainInstance(true);
    super.onCreate(savedInstanceState);
  }

  @Override
  public View onCreateView(final LayoutInflater inflater,
      final ViewGroup container, final Bundle savedInstanceState) {
    return inflater.inflate(R.layout.fragment_plugins, container, false);
  }

  public void onActivityCreated(Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);

    mGridViewInstalled = (GridView) getView().findViewById(
        R.id.gridViewInstalled);
    mGridViewDownload = (GridView) getView().findViewById(
        R.id.gridViewDownload);

    gridAdapterInstalled = new InstalledPluginsAdapter(getActivity());
    mGridViewInstalled.setAdapter(gridAdapterInstalled);
    mGridViewInstalled.setOnItemClickListener(new OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
        if (getActivity() != null) {
          InstalledPluginHolder plugin = gridAdapterInstalled
              .getItem(position);

          PluginDialogFragment.newInstance(plugin).show(
              getFragmentManager(), "Plugin");
        }
      }
    });
    mGridViewInstalled.setOnTouchListener(new OnTouchListener() {

      @Override
      public boolean onTouch(View v, MotionEvent event) {
        int action = event.getActionMasked();
        if (getActivity() != null && action == MotionEvent.ACTION_UP) {
          float currentXPosition = event.getX();
          float currentYPosition = event.getY();
          int position = mGridViewDownload.pointToPosition(
              (int) currentXPosition, (int) currentYPosition);
          InstalledPluginHolder plugin = gridAdapterInstalled
              .getItem(position);
          if (plugin != null)
            PluginDialogFragment.newInstance(plugin).show(
                getFragmentManager(), "Plugin");
        }
        return false;
      }
    });
    gridAdapterInstalled
        .setOnItemCheckedListener(new OnItemCheckedListener() {

          @Override
          public void onItemChecked(boolean newState, int position) {
            InstalledPluginHolder plugin = gridAdapterInstalled
                .getItem(position);

            plugin.setChecked(newState);
          }
        });
    gridAdapterInstalled.setShowCheckBox(true);
    gridAdapterDownload = new DownloadPluginsAdapter(getActivity());
    mGridViewDownload.setOnItemClickListener(new OnItemClickListener() {
      @Override
      public void onItemClick(AdapterView<?> parent, View view,
          int position, long id) {
        // if (getActivity() != null) {
        // PluginDownloadHolder plugin = gridAdapterDownload
        // .getItem(position);
        //
        // PluginDialogFragment.newInstance(plugin).show(
        // getFragmentManager(), "Plugin");
        // }
      }
    });
    mGridViewDownload.setOnTouchListener(new OnTouchListener() {

      @Override
      public boolean onTouch(View v, MotionEvent event) {
        int action = event.getActionMasked();
        if (getActivity() != null && action == MotionEvent.ACTION_UP) {
          float currentXPosition = event.getX();
          float currentYPosition = event.getY();
          int position = mGridViewDownload.pointToPosition(
              (int) currentXPosition, (int) currentYPosition);
          PluginDownloadHolder plugin = gridAdapterDownload
              .getItem(position);
          if (plugin != null)
            PluginDialogFragment.newInstance(plugin).show(
                getFragmentManager(), "Plugin");
        }
        return false;
      }
    });
    gridAdapterDownload.setShowCheckBox(false);

    mTabHost = (TabHost) getView().findViewById(android.R.id.tabhost);
    mTabHost.setup();
    TabSpec download = mTabHost.newTabSpec("download")
        .setIndicator(getActivity().getString(R.string.download))
        .setContent(R.id.gridViewDownload);
    mTabHost.addTab(mTabHost.newTabSpec("installed")
        .setIndicator(getActivity().getString(R.string.installed))
        .setContent(R.id.gridViewInstalled));
    mTabHost.addTab(download);

    mTabHost.setOnTabChangedListener(new OnTabChangeListener() {
      @Override
      public void onTabChanged(String tabId) {
        if (tabId.equals("download")
            && mGridViewDownload.getAdapter() == null) {
          mGridViewDownload.setAdapter(gridAdapterDownload);
          IntroController.notify(R.string.intro_desc_1_4);
          IntroController.addViewToStep(7,
              ((SherlockFragmentActivity) getActivity())
                  .findViewById(R.id.item_map));
        }
        if (tabId.equals("installed")) {
          IntroController.notify(R.string.intro_desc_2_2);
        }
      }
    });
    if (savedInstanceState != null) {
      mTabHost.setCurrentTab(savedInstanceState
          .getInt(CURRENT_TAB_KEY, 0));
    } else {
      mTabHost.setCurrentTab(0);
    }

    addStepsToIntro();
    IntroController.notify(mTabHost.getTabWidget()
        .getChildTabViewAt(1));
  }

  private void addStepsToIntro() {
    IntroController.addViewToStep(3, mTabHost.getTabWidget()
        .getChildTabViewAt(1));
    IntroController.addViewToStep(4, null);
    IntroController.addViewToStep(5, mTabHost.getTabWidget()
        .getChildTabViewAt(0));
    IntroController.addViewToStep(6, null);
    View view = ((SherlockFragmentActivity) getActivity())
        .findViewById(R.id.item_map);
    if (view != null)
      IntroController.addViewToStep(7, view);
  }

  @Override
  public void onSaveInstanceState(Bundle outState) {
    super.onSaveInstanceState(outState);
    if (mTabHost != null) {
      outState.putInt(CURRENT_TAB_KEY, mTabHost.getCurrentTab());
    }
  }

  @Override
  public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
    inflater.inflate(R.menu.menu_datasources, menu);
    super.onCreateOptionsMenu(menu, inflater);
  }

  @Override
  public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
    case R.id.item_reload:
      PluginLoader.reloadPlugins();
      if (mTabHost.getCurrentTabTag().equals("download")) {
        PluginDownloader.getDataSources(gridAdapterDownload, true);
      }
      return true;
    }
    return super.onOptionsItemSelected(item);
  }

  @Override
  public void onDestroyView() {
    super.onDestroyView();
    gridAdapterInstalled.destroy();
    gridAdapterDownload.destroy();
  }

  private class InstalledPluginsAdapter extends
      PluginGridAdapter<InstalledPluginHolder> {

    private OnCheckedChangedListener<InstalledPluginHolder> pluginCheckedChangeListener = new OnCheckedChangedListener<InstalledPluginHolder>() {

      @Override
      public void onCheckedChanged(InstalledPluginHolder item,
          boolean newState) {
        notifyDataSetChanged();
      }
    };
    private OnItemChangedListenerWrapper<InstalledPluginHolder> pluginItemChangeListener = new OnItemChangedListenerWrapper<InstalledPluginHolder>() {

      @Override
      public void onItemChanged() {
        notifyDataSetInvalidated();
      }
    };

    public InstalledPluginsAdapter(Context context) {
      super(context);
      plugins = PluginLoader.getInstalledPlugins();
      PluginLoader.getInstalledPlugins().addOnCheckedChangeListener(
          pluginCheckedChangeListener);
      PluginLoader.getInstalledPlugins().addOnItemChangeListener(
          pluginItemChangeListener);
    }

    public void destroy() {
      PluginLoader.getInstalledPlugins().removeOnCheckedChangeListener(
          pluginCheckedChangeListener);
      PluginLoader.getInstalledPlugins().removeOnItemChangeListener(
          pluginItemChangeListener);
    }

    @Override
    protected boolean getItemChecked(int position) {
      return getItem(position).isChecked();
    }

    @Override
    protected String getPluginStatus(InstalledPluginHolder plugin) {
      return plugin.isChecked() ? getString(R.string.activated) : "";
    }
  }

  private class DownloadPluginsAdapter extends
      PluginGridAdapter<PluginDownloadHolder> implements
      OnDataSourceResultListener {

    private OnItemChangedListenerWrapper<InstalledPluginHolder> pluginItemChangeListener = new OnItemChangedListenerWrapper<InstalledPluginHolder>() {
      @Override
      public void onItemChanged() {
        notifyDataSetInvalidated();
      }
    };
    boolean initialized = false;

    public DownloadPluginsAdapter(Context context) {
      super(context);
      PluginLoader.getInstalledPlugins().addOnItemChangeListener(
          pluginItemChangeListener);
    }

    @Override
    public int getViewTypeCount() {
      return super.getViewTypeCount() + 1; // Normal + Progress
    }

    @Override
    public int getItemViewType(int position) {
      if (plugins == null && position == 0) {
        return super.getViewTypeCount();
      } else {
        return super.getItemViewType(position);
      }
    }

    @Override
    public int getCount() {
      if (!initialized) {
        PluginDownloader.getDataSources(this);
        initialized = true;
      }
      if (plugins != null)
        return super.getCount();
      return 1; // The loading view
    }

    @Override
    public View getView(int position, View view, ViewGroup parent) {
      if (plugins == null) {
        return new ProgressBar(getActivity());
      }

      return super.getView(position, view, parent);
    }

    @Override
    public void onDataSourceResult(List<PluginDownloadHolder> dataSources) {
      this.plugins = dataSources;
      // IntroController.releaseNextStep();
      notifyDataSetInvalidated();
    }

    @Override
    protected String getPluginStatus(PluginDownloadHolder plugin) {
      InstalledPluginHolder installedPlugin = PluginLoader
          .getPluginByIdentifier(plugin.getIdentifier());
      if (installedPlugin != null) {
        if (installedPlugin.getVersion() != null
            && plugin.getVersion() != null
            && installedPlugin.getVersion() < plugin.getVersion()) {
          return getActivity().getString(R.string.update_available);
        } else {
          return getActivity().getString(R.string.installed);
        }
      } else {
        return "";
      }
    }

    public void destroy() {
      PluginLoader.getInstalledPlugins().removeOnItemChangeListener(
          pluginItemChangeListener);
    }
  }
}




Java Source Code List

.DataSourcesOverlay.java
.VisualizationOverlayItem.java
org.n52.geoar.AboutDialog.java
org.n52.geoar.DataSourceListAdapter.java
org.n52.geoar.GeoARActivity.java
org.n52.geoar.GeoARApplication.java
org.n52.geoar.ar.view.ARFragment.java
org.n52.geoar.ar.view.ARObject.java
org.n52.geoar.ar.view.ARView.java
org.n52.geoar.ar.view.DataSourceVisualizationHandler.java
org.n52.geoar.ar.view.IntroController.java
org.n52.geoar.ar.view.IntroViewer.java
org.n52.geoar.ar.view.gl.ARSurfaceViewRenderer.java
org.n52.geoar.ar.view.gl.ARSurfaceView.java
org.n52.geoar.ar.view.gl.GLESCamera.java
org.n52.geoar.ar.view.gl.MultisampleConfigs.java
org.n52.geoar.ar.view.gl.SurfaceTopology.java
org.n52.geoar.ar.view.overlay.ARCanvasSurfaceView.java
org.n52.geoar.ar.view.overlay.GUIDrawable.java
org.n52.geoar.ar.view.overlay.Radar.java
org.n52.geoar.exception.UnsupportedGeometryType.java
org.n52.geoar.map.view.DataSourceOverlayHandler.java
org.n52.geoar.map.view.GeoARMapView.java
org.n52.geoar.map.view.MapActivityContext.java
org.n52.geoar.map.view.MapFragment.java
org.n52.geoar.map.view.overlay.DataSourceOverlay.java
org.n52.geoar.map.view.overlay.DataSourcePointOverlay.java
org.n52.geoar.map.view.overlay.DataSourcePolygonOverlay.java
org.n52.geoar.map.view.overlay.DataSourcePolylineOverlay.java
org.n52.geoar.map.view.overlay.DataSourcesOverlay.java
org.n52.geoar.map.view.overlay.OverlayType.java
org.n52.geoar.map.view.overlay.PointOverlayType.java
org.n52.geoar.map.view.overlay.PolygonOverlayType.java
org.n52.geoar.map.view.overlay.PolylineOverlayType.java
org.n52.geoar.newdata.CheckList.java
org.n52.geoar.newdata.DataCache.java
org.n52.geoar.newdata.DataSourceHolder.java
org.n52.geoar.newdata.DataSourceInstanceHolder.java
org.n52.geoar.newdata.DataSourceInstanceSettingsDialogActivity.java
org.n52.geoar.newdata.InstalledPluginHolder.java
org.n52.geoar.newdata.PluginActivityContext.java
org.n52.geoar.newdata.PluginContext.java
org.n52.geoar.newdata.PluginDialogFragment.java
org.n52.geoar.newdata.PluginDownloadHolder.java
org.n52.geoar.newdata.PluginDownloader.java
org.n52.geoar.newdata.PluginFragment.java
org.n52.geoar.newdata.PluginGridAdapter.java
org.n52.geoar.newdata.PluginHolder.java
org.n52.geoar.newdata.PluginLoader.java
org.n52.geoar.newdata.PluginLogger.java
org.n52.geoar.newdata.PluginStateInputStream.java
org.n52.geoar.newdata.Tile.java
org.n52.geoar.settings.DateTimeSettingsViewField.java
org.n52.geoar.settings.DateUtils.java
org.n52.geoar.settings.NumberSettingsViewField.java
org.n52.geoar.settings.SettingsException.java
org.n52.geoar.settings.SettingsHelper.java
org.n52.geoar.settings.SettingsViewField.java
org.n52.geoar.settings.SettingsView.java
org.n52.geoar.settings.SpinnerSettingsViewField.java
org.n52.geoar.settings.StringSettingsViewField.java
org.n52.geoar.tracking.camera.CameraView.java
org.n52.geoar.tracking.camera.RealityCamera.java
org.n52.geoar.tracking.location.AdaptiveLowPassSensorBuffer.java
org.n52.geoar.tracking.location.LocationHandler.java
org.n52.geoar.tracking.location.LowPassSensorBuffer.java
org.n52.geoar.tracking.location.MeanSensorBuffer.java
org.n52.geoar.tracking.location.SensorBuffer.java
org.n52.geoar.view.InfoView.java
org.n52.geoar.view.geoar.CalibrationControlView.java
org.n52.geoar.view.geoar.Settings.java
org.n52.geoar.view.geoar.gl.mode.BilligerColorShader.java
org.n52.geoar.view.geoar.gl.mode.BilligerLightShader.java
org.n52.geoar.view.geoar.gl.mode.BilligerTextureShader.java
org.n52.geoar.view.geoar.gl.mode.BoundingBox.java
org.n52.geoar.view.geoar.gl.mode.FeatureShader.java
org.n52.geoar.view.geoar.gl.mode.PhongFeatureShader.java
org.n52.geoar.view.geoar.gl.mode.RenderFeature2.java
org.n52.geoar.view.geoar.gl.mode.Spatial.java
org.n52.geoar.view.geoar.gl.mode.TextureFeatureShader.java
org.n52.geoar.view.geoar.gl.mode.Texture.java
org.n52.geoar.view.geoar.gl.mode.features.CubeFeature2.java
org.n52.geoar.view.geoar.gl.mode.features.FlatCircleFeature.java
org.n52.geoar.view.geoar.gl.mode.features.HeightMapFeature.java
org.n52.geoar.view.geoar.gl.mode.features.NewGridFeature.java
org.n52.geoar.view.geoar.gl.mode.features.ReferencedGridFeature.java
org.n52.geoar.view.geoar.gl.mode.features.SphereFeature.java
org.n52.geoar.view.geoar.gl.mode.features.TriangleFeature.java