Back to project page geoar-app.
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.
/** * 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); } } }