diff --git a/android/src/fishrungames/bashgid/ArticleFragment.java b/android/src/fishrungames/bashgid/ArticleFragment.java index b19360e..ec39ba4 100644 --- a/android/src/fishrungames/bashgid/ArticleFragment.java +++ b/android/src/fishrungames/bashgid/ArticleFragment.java @@ -1,10 +1,20 @@ package fishrungames.bashgid; +import it.sephiroth.android.library.widget.AdapterView.OnItemClickListener; import it.sephiroth.android.library.widget.HListView; import java.util.ArrayList; +import org.osmdroid.DefaultResourceProxyImpl; +import org.osmdroid.ResourceProxy; +import org.osmdroid.api.IMapController; +import org.osmdroid.util.GeoPoint; +import org.osmdroid.views.MapView; + +import fishrungames.bashgid.OsmMapHolderFragment.CustomItemizedOverlay; +import fishrungames.bashgid.OsmMapHolderFragment.NoInteractionOverlay; +import fishrungames.bashgid.core.LocationHolder; import fishrungames.bashgid.core.AlbumManager.AlbumFullData; import fishrungames.bashgid.core.ArticleManager.ArticleFullData; import fishrungames.bashgid.core.PhotoManager.PhotoRecordData; @@ -21,12 +31,14 @@ import android.view.View.OnClickListener; import android.view.ViewGroup; import android.widget.BaseAdapter; +import android.widget.AdapterView; import android.widget.Button; import android.widget.ImageView; import android.widget.ListView; import android.widget.TextView; + public class ArticleFragment extends Fragment { @@ -258,21 +270,69 @@ public class ArticleFragment extends Fragment } else if (getItemViewType(position) == 3) { - //TextView textView = (TextView) view.findViewById(R.id.textView); + double geoLat = articleLayout.get(position).geoLat; + double geoLon = articleLayout.get(position).geoLon; - //textView.setText(articleLayout.get(position).value); - + MapView mapView = (MapView) view.findViewById(R.id.mapview); + + mapView.setMaxZoomLevel(20); + mapView.setMinZoomLevel(4); + + //mapView.setBuiltInZoomControls(true); + mapView.setMultiTouchControls(true); + + + IMapController mapController = mapView.getController(); + + + GeoPoint markerPoint = new GeoPoint(geoLat, geoLon); + + mapController.setZoom(16); + mapController.animateTo(markerPoint); + + + ResourceProxy resourceProxy = new DefaultResourceProxyImpl(getActivity()); + NoInteractionOverlay itemizedOverlay = new NoInteractionOverlay(getResources().getDrawable(R.drawable.russia_icon), resourceProxy); + + itemizedOverlay.addOverlayItem(markerPoint); + + mapView.getOverlays().add(itemizedOverlay); + } else if (getItemViewType(position) == 4) { - //TextView textView = (TextView) view.findViewById(R.id.textView); - - //textView.setText(articleLayout.get(position).value); - HListView hListView = (HListView) view.findViewById(R.id.hListView); hListView.setAdapter(new MainPageHListViewAdapters.PhotoAlbumElementAdapter(getActivity(), article.albumArr.get(articleLayout.get(position).albumPos))); + hListView.setOnItemClickListener(new OnItemClickListener(){ + + @Override + public void onItemClick(it.sephiroth.android.library.widget.AdapterView parent, View view, int innerPosition, long id) + { + MainActivity.getInstance().SetLastArticleName(articleName); + + String albumName = article.albumArr.get(articleLayout.get(position).albumPos).name; + + MainActivity.getInstance().OpenPhotoScreen(albumName, innerPosition, MainActivity.TAG_FROM_ARTICLEFRAGMENT_TO_PHOTOFRAGMENT); + + } + }); + + /* + * + hListView.setOnItemClickListener(new OnItemClickListener(){ + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) + { + MainActivity.getInstance().SetLastAlbumName(albumName); + MainActivity.getInstance().OpenPhotoScreen(albumName, position, MainActivity.TAG_FROM_PHOTOLISTFRAGMENT_TO_PHOTOFRAGMENT); + + } + + });*/ + } else if (getItemViewType(position) == 5) { diff --git a/android/src/fishrungames/bashgid/MainActivity.java b/android/src/fishrungames/bashgid/MainActivity.java index 433d5a7..bfc8f71 100644 --- a/android/src/fishrungames/bashgid/MainActivity.java +++ b/android/src/fishrungames/bashgid/MainActivity.java @@ -13,11 +13,10 @@ import fishrungames.bashgid.core.ArticleManager; import fishrungames.bashgid.core.ArticleManager.ArticleRecordData; import fishrungames.bashgid.core.BookManager.BookRecord; -import fishrungames.bashgid.core.ArticleManager.ArticleFullData; import fishrungames.bashgid.core.ArticleManager.ArticleShortData; import fishrungames.bashgid.core.HtmlDownloadManager.TextFileRecord; import fishrungames.bashgid.core.NewsDownloadTask; -import fishrungames.bashgid.core.NewsManager.NewsRecord; + import fishrungames.bashgid.core.PhotoManager.PhotoRecordData; import fishrungames.bashgid.core.VideoManager; import fishrungames.bashgid.core.VideoManager.VideoRecordData; @@ -29,12 +28,14 @@ import fishrungames.bashgid.core.db.JournalDataSource; import fishrungames.bashgid.core.db.NewsDataSource; import fishrungames.bashgid.core.db.PhotoDataSource; import fishrungames.bashgid.core.db.VideoDataSource; + import fishrungames.networkutils.ContextHolder; import fishrungames.networkutils.ImageDownloadTask; import fishrungames.networkutils.ImageManager; import android.support.v7.app.ActionBarActivity; import android.support.v4.app.Fragment; +import android.content.SharedPreferences; import android.content.res.Configuration; import android.os.Bundle; import android.os.Handler; @@ -58,10 +59,18 @@ public class MainActivity extends ActionBarActivity implements NavigationDrawerF public static final String TAG_FROM_BOOKSFRAGMENT_TO_BOOKRECORDFRAGMENT = "TAG_FROM_BOOKSFRAGMENT_TO_BOOKRECORDFRAGMENT"; public static final String TAG_FROM_VIDEOLISTFRAGMENT_TO_VIDEORECORDFRAGMENT = "TAG_FROM_VIDEOLISTFRAGMENT_TO_VIDEORECORDFRAGMENT"; + public static final String TAG_FROM_PHOTOLISTFRAGMENT_TO_PHOTOFRAGMENT = "TAG_FROM_PHOTOLISTFRAGMENT_TO_PHOTOFRAGMENT"; + public static final String TAG_FROM_ARTICLEFRAGMENT_TO_PHOTOFRAGMENT = "TAG_FROM_ARTICLEFRAGMENT_TO_PHOTOFRAGMENT"; + + + public static final String TAG_TO_WELCOMEFRAGMENT = "WelcomeFragment"; public static final String TAG_TO_SEARCHFRAGMENT = "SearchFragment"; public static final String TAG_TO_MAINFRAGMENT = "MainFragment"; public static final String TAG_TO_MAPFRAGMENT = "MapFragment"; + + + public static final String PREFS_MAIN = "PREFS_MAIN"; public static final int NEWS_DOWNLOADER_STATE_UPDATE = 10; public static final int NEWS_DOWNLOADER_STATE_FINISHED = 11; @@ -208,8 +217,8 @@ public class MainActivity extends ActionBarActivity implements NavigationDrawerF 0, "Photos", "Wow 2 photos", - 50, - 50, + 54.779610, + 56.032101, "http://www.yandex.ru/", articleTestDate )); @@ -479,7 +488,7 @@ public class MainActivity extends ActionBarActivity implements NavigationDrawerF // getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, // new MapHolderFragment(), TAG_TO_MAINFRAGMENT).commit(); - getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new OsmMapHolderFragment(), TAG_TO_MAINFRAGMENT).commit(); + getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new OsmMapHolderFragment("news"), TAG_TO_MAINFRAGMENT).commit(); mNavigationDrawerFragment.EnableDrawer(); } @@ -510,6 +519,16 @@ public class MainActivity extends ActionBarActivity implements NavigationDrawerF mNavigationDrawerFragment.EnableDrawer(); } + + + public void OpenPhotoScreen(String albumName, int position, String tag) + { + ClearAllFragmentLinks(); + + getSupportFragmentManager().beginTransaction().replace(R.id.fragment_container, new PhotoFragment(albumName, position), tag).commit(); + + mNavigationDrawerFragment.EnableDrawer(); + } public void OpenNewsRecordScreen(String articleName, String tag) { @@ -540,6 +559,7 @@ public class MainActivity extends ActionBarActivity implements NavigationDrawerF mNavigationDrawerFragment.EnableDrawer(); } + public void OpenHtmlViewerScreen(String url) { @@ -738,6 +758,18 @@ public class MainActivity extends ActionBarActivity implements NavigationDrawerF return; } + + if (getSupportFragmentManager().findFragmentByTag(TAG_FROM_PHOTOLISTFRAGMENT_TO_PHOTOFRAGMENT) != null) + { + OpenPhotoAlbumScreen(GetLastAlbumName()); + return; + } + + if (getSupportFragmentManager().findFragmentByTag(TAG_FROM_ARTICLEFRAGMENT_TO_PHOTOFRAGMENT) != null) + { + OpenArticleScreen(GetLastArticleName(), TAG_TO_MAINFRAGMENT); + return; + } if (getSupportFragmentManager().findFragmentByTag(TAG_TO_SEARCHFRAGMENT) != null) { @@ -769,6 +801,36 @@ public class MainActivity extends ActionBarActivity implements NavigationDrawerF * super.onBackPressed(); } */ } + + public void SetLastAlbumName(String lastAlbumName) + { + SharedPreferences settings = MainActivity.getInstance().getSharedPreferences(PREFS_MAIN, 0); + + SharedPreferences.Editor editor = settings.edit(); + editor.putString("lastAlbumName", lastAlbumName); + editor.commit(); + } + + public String GetLastAlbumName() + { + SharedPreferences settings = MainActivity.getInstance().getSharedPreferences(PREFS_MAIN, 0); + return settings.getString("lastAlbumName", ""); + } + + public void SetLastArticleName(String lastArticleName) + { + SharedPreferences settings = MainActivity.getInstance().getSharedPreferences(PREFS_MAIN, 0); + + SharedPreferences.Editor editor = settings.edit(); + editor.putString("lastArticleName", lastArticleName); + editor.commit(); + } + + public String GetLastArticleName() + { + SharedPreferences settings = MainActivity.getInstance().getSharedPreferences(PREFS_MAIN, 0); + return settings.getString("lastArticleName", ""); + } @Override protected void onResume() @@ -783,4 +845,5 @@ public class MainActivity extends ActionBarActivity implements NavigationDrawerF super.onPause(); } + } diff --git a/android/src/fishrungames/bashgid/NewsListFragment.java b/android/src/fishrungames/bashgid/NewsListFragment.java index 1e77eb6..d78db66 100644 --- a/android/src/fishrungames/bashgid/NewsListFragment.java +++ b/android/src/fishrungames/bashgid/NewsListFragment.java @@ -52,7 +52,11 @@ public class NewsListFragment extends Fragment @Override public void onItemClick(AdapterView parent, View view, int position, long id) { - MainActivity.getInstance().OpenArticleScreen(journal.articleArr.get(position).name, MainActivity.TAG_FROM_NEWSLISTFRAGMENT_TO_NEWSRECORDFRAGMENT); + //Add position + 1, because first element of list is always title + if (position > 0) + { + MainActivity.getInstance().OpenArticleScreen(journal.articleArr.get(position - 1).name, MainActivity.TAG_FROM_NEWSLISTFRAGMENT_TO_NEWSRECORDFRAGMENT); + } } }); diff --git a/android/src/fishrungames/bashgid/OsmMapHolderFragment.java b/android/src/fishrungames/bashgid/OsmMapHolderFragment.java index afb6d41..118abd7 100644 --- a/android/src/fishrungames/bashgid/OsmMapHolderFragment.java +++ b/android/src/fishrungames/bashgid/OsmMapHolderFragment.java @@ -5,6 +5,7 @@ package fishrungames.bashgid; import java.util.ArrayList; import android.app.AlertDialog; +import android.content.DialogInterface; import android.graphics.Point; import android.graphics.drawable.Drawable; import android.os.Bundle; @@ -13,6 +14,7 @@ import android.support.v4.app.Fragment; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; +import android.widget.ImageView; import org.osmdroid.DefaultResourceProxyImpl; @@ -27,14 +29,19 @@ import org.osmdroid.views.overlay.ItemizedOverlay; import org.osmdroid.views.overlay.OverlayItem; import org.osmdroid.views.overlay.OverlayItem.HotspotPlace; +import fishrungames.bashgid.core.ArticleManager.ArticleRecordData; import fishrungames.bashgid.core.LocationHolder; +import fishrungames.bashgid.core.JournalManager.JournalSemiFullData; +import fishrungames.networkutils.ImageManager; public class OsmMapHolderFragment extends Fragment { - private class CustomItemizedOverlay extends ItemizedOverlay{ + public static class CustomItemizedOverlay extends ItemizedOverlay{ + private ArrayList mOverlayItems = new ArrayList(); + private ArrayList mArticles = new ArrayList(); public CustomItemizedOverlay(Drawable pDefaultMarker, ResourceProxy pResourceProxy) { super(pDefaultMarker, pResourceProxy); @@ -51,22 +58,14 @@ public class OsmMapHolderFragment extends Fragment else return 0; } - public void addOverlayItem(GeoPoint geoPoint){ - - - - /*if(Preferences.DEBUG) Log.d("MapActivity", "Latitude: "+latitude+" Longitude: "+longitude); - MarkerDrawable drawable = new MarkerDrawable(MapActivity.this, bitmap); - OverlayItem item = new OverlayItem("a", "a", new GeoPoint((int)(latitude*1e6), (int)(longitude*1e6))); - item.setMarker(drawable); - item.setMarkerHotspot(HotspotPlace.CENTER); - mOverlayItems.add(item);*/ - - OverlayItem item = new OverlayItem("Title", "Lol, snippet", geoPoint); - item.setMarker(getResources().getDrawable(R.drawable.marker_default)); + public void addOverlayItem(GeoPoint geoPoint, String articleName, String title, String imageUrl){ + + OverlayItem item = new OverlayItem(title, imageUrl, geoPoint); + item.setMarker(MainActivity.getInstance().getResources().getDrawable(R.drawable.marker_default)); item.setMarkerHotspot(HotspotPlace.CENTER); mOverlayItems.add(item); + mArticles.add(articleName); populateNow(); } @@ -83,21 +82,118 @@ public class OsmMapHolderFragment extends Fragment } @Override - protected boolean onTap(int index) { + protected boolean onTap(final int index) { OverlayItem item = mOverlayItems.get(index); - AlertDialog.Builder dialog = new AlertDialog.Builder(OsmMapHolderFragment.this.getActivity()); + AlertDialog.Builder dialog = new AlertDialog.Builder(MainActivity.getInstance()); dialog.setTitle(item.getTitle()); - dialog.setMessage(item.getSnippet()); + //dialog.setMessage(item.getSnippet()); + + ImageView image = new ImageView(MainActivity.getInstance()); + ImageManager.getInstance().ApplyImageToImageView(image, item.getSnippet()); + //image.setImageResource(R.drawable.YOUR_IMAGE_ID); + + dialog.setView(image); + + + dialog.setPositiveButton("Open", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + MainActivity.getInstance().OpenArticleScreen(mArticles.get(index), null); + } + }); + + dialog.setNegativeButton("Cancel", new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }); + + + + dialog.show(); + + return true; } } + + public static class NoInteractionOverlay extends ItemizedOverlay{ + private ArrayList mOverlayItems = new ArrayList(); + + public NoInteractionOverlay(Drawable pDefaultMarker, ResourceProxy pResourceProxy) { + super(pDefaultMarker, pResourceProxy); + } + + @Override + protected OverlayItem createItem(int pos) { + return mOverlayItems.get(pos); + } + + @Override + public int size() { + if(mOverlayItems!=null) return mOverlayItems.size(); + else return 0; + } + + public void addOverlayItem(GeoPoint geoPoint){ + + OverlayItem item = new OverlayItem("", "", geoPoint); + item.setMarker(MainActivity.getInstance().getResources().getDrawable(R.drawable.marker_default)); + item.setMarkerHotspot(HotspotPlace.CENTER); + + mOverlayItems.add(item); + + populateNow(); + } + + public void populateNow(){ + populate(); + } + + @Override + public boolean onSnapToItem(int arg0, int arg1, Point arg2, IMapView arg3) + { + return false; + } + } + CustomItemizedOverlay itemizedOverlay; + + String journalName; + + JournalSemiFullData journal; + + + public OsmMapHolderFragment() + { + journal = null; + journalName = ""; + } + + + public OsmMapHolderFragment(String journalName) + { + this.journalName = journalName; + RestoreJournal(); + } + + @Override + public void onSaveInstanceState(final Bundle outState) { + super.onSaveInstanceState(outState); + outState.putString("journalName", journalName); + } + + @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { + if (savedInstanceState != null) { + journalName = savedInstanceState.getString("journalName"); + RestoreJournal(); + } + View rootView = inflater.inflate(R.layout.fragment_osm_map_page, container, false); MapView mapView = (MapView) rootView.findViewById(R.id.mapview); @@ -118,18 +214,37 @@ public class OsmMapHolderFragment extends Fragment mapController.animateTo(center); - GeoPoint markerPoint = new GeoPoint( LocationHolder.CONST_UFA_LATITUDE, LocationHolder.CONST_UFA_LONGITUDE); - ResourceProxy resourceProxy = new DefaultResourceProxyImpl(getActivity()); itemizedOverlay = new CustomItemizedOverlay(getResources().getDrawable(R.drawable.russia_icon), resourceProxy); - itemizedOverlay.addOverlayItem(markerPoint); + //JournalSemiFullData journal = MainActivity.getInstance().journalDataSource.GetJournalSemiFullData(journalName); + + for (int i = 0; i < journal.articleArr.size(); i++) + //for (ArticleRecordData article : journal.articleArr) + { + ArticleRecordData article = journal.articleArr.get(i); + + if (article.geoLat != 0 || article.geoLon != 0) + { + GeoPoint markerPoint = new GeoPoint(article.geoLat, article.geoLon); + + + itemizedOverlay.addOverlayItem(markerPoint, article.name, article.title, journal.previewImageArr.get(i)); + + } + } + + //itemizedOverlay.addOverlayItem(markerPoint); mapView.getOverlays().add(itemizedOverlay); return rootView; } + void RestoreJournal() + { + journal = MainActivity.getInstance().journalDataSource.GetJournalSemiFullData(journalName); + } } diff --git a/android/src/fishrungames/bashgid/PhotoAlbumFragment.java b/android/src/fishrungames/bashgid/PhotoAlbumFragment.java index 08f7cd1..648282e 100644 --- a/android/src/fishrungames/bashgid/PhotoAlbumFragment.java +++ b/android/src/fishrungames/bashgid/PhotoAlbumFragment.java @@ -11,8 +11,10 @@ import android.view.ViewGroup; import android.widget.BaseAdapter; +import android.widget.AdapterView; import android.widget.ImageView; import android.widget.ListView; +import android.widget.AdapterView.OnItemClickListener; import fishrungames.bashgid.core.AlbumManager; import fishrungames.bashgid.core.AlbumManager.AlbumFullData; @@ -61,6 +63,18 @@ public class PhotoAlbumFragment extends Fragment listView.setAdapter(listAdapter); + listView.setOnItemClickListener(new OnItemClickListener(){ + + @Override + public void onItemClick(AdapterView parent, View view, int position, long id) + { + MainActivity.getInstance().SetLastAlbumName(albumName); + MainActivity.getInstance().OpenPhotoScreen(albumName, position, MainActivity.TAG_FROM_PHOTOLISTFRAGMENT_TO_PHOTOFRAGMENT); + + } + + }); + return rootView; }