/**
*
*/
package net.osmand.plus.myplaces;
import android.annotation.TargetApi;
import android.app.Activity;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.net.Uri;
import android.os.Build;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.support.v7.widget.SearchView;
import android.text.Spannable;
import android.text.SpannableStringBuilder;
import android.text.style.ImageSpan;
import android.view.MenuItem;
import android.widget.ImageView;
import net.osmand.IndexConstants;
import net.osmand.plus.OsmAndLocationProvider;
import net.osmand.plus.OsmandApplication;
import net.osmand.plus.OsmandPlugin;
import net.osmand.plus.OsmandSettings;
import net.osmand.plus.R;
import net.osmand.plus.activities.FavoritesTreeFragment;
import net.osmand.plus.activities.TabActivity;
import net.osmand.plus.helpers.GpxImportHelper;
import net.osmand.plus.views.controls.PagerSlidingTabStrip;
import java.io.File;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.List;
/**
*
*/
public class FavoritesActivity extends TabActivity {
private static final int OPEN_GPX_DOCUMENT_REQUEST = 1006;
public static final int GPX_TAB = R.string.shared_string_my_tracks;
public static final int FAV_TAB = R.string.shared_string_my_favorites;
protected List<WeakReference<Fragment>> fragList = new ArrayList<>();
private int tabSize;
private GpxImportHelper gpxImportHelper;
@Override
public void onCreate(Bundle icicle) {
OsmandApplication app = (OsmandApplication) getApplication();
app.applyTheme(this);
super.onCreate(icicle);
app.logEvent(this, "myplaces_open");
gpxImportHelper = new GpxImportHelper(this, getMyApplication(), null);
//noinspection ConstantConditions
getSupportActionBar().setTitle(R.string.shared_string_my_places);
getSupportActionBar().setElevation(0);
setContentView(R.layout.tab_content);
List<TabItem> mTabs = getTabItems();
setTabs(mTabs);
// setupHomeButton();
}
@TargetApi(Build.VERSION_CODES.KITKAT)
public void addTrack() {
Intent intent = new Intent(Intent.ACTION_OPEN_DOCUMENT);
intent.setType("*/*");
startActivityForResult(intent, OPEN_GPX_DOCUMENT_REQUEST);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
if (requestCode == OPEN_GPX_DOCUMENT_REQUEST && resultCode == Activity.RESULT_OK) {
if (data != null) {
Uri uri = data.getData();
AvailableGPXFragment gpxFragment = getGpxFragment();
if (gpxFragment!= null) {
gpxFragment.startImport();
}
gpxImportHelper.setGpxImportCompleteListener(new GpxImportHelper.OnGpxImportCompleteListener() {
@Override
public void onComplete(boolean success) {
AvailableGPXFragment gpxFragment = getGpxFragment();
if (gpxFragment!= null) {
gpxFragment.finishImport(success);
}
gpxImportHelper.setGpxImportCompleteListener(null);
}
});
if (!gpxImportHelper.handleGpxImport(uri, false)) {
if (gpxFragment!= null) {
gpxFragment.finishImport(false);
}
}
}
} else {
super.onActivityResult(requestCode, resultCode, data);
}
}
private AvailableGPXFragment getGpxFragment() {
AvailableGPXFragment gpxFragment = null;
for (WeakReference<Fragment> f : fragList) {
Fragment frag = f.get();
if (frag instanceof AvailableGPXFragment) {
gpxFragment = (AvailableGPXFragment) frag;
}
}
return gpxFragment;
}
private void setTabs(List<TabItem> mTabs) {
PagerSlidingTabStrip mSlidingTabLayout = (PagerSlidingTabStrip) findViewById(R.id.sliding_tabs);
OsmandSettings settings = ((OsmandApplication) getApplication()).getSettings();
ViewPager mViewPager = (ViewPager) findViewById(R.id.pager);
Integer tabId = settings.FAVORITES_TAB.get();
int tab = 0;
for(int i = 0; i < mTabs.size(); i++) {
if(mTabs.get(i).resId == tabId) {
tab = i;
}
}
tabSize = mTabs.size();
setViewPagerAdapter(mViewPager, mTabs);
mSlidingTabLayout.setViewPager(mViewPager);
mViewPager.setCurrentItem(tab);
}
private List<TabItem> getTabItems() {
File[] lf = ((OsmandApplication) getApplication()).getAppPath(IndexConstants.GPX_INDEX_DIR).listFiles();
boolean hasGpx = false;
if (lf != null) {
for (File t : lf) {
if (t.isDirectory() || (t.getName().toLowerCase().endsWith(".gpx"))) {
hasGpx = true;
break;
}
}
}
List<TabItem> mTabs = new ArrayList<>();
mTabs.add(getTabIndicator(FAV_TAB, FavoritesTreeFragment.class));
if (hasGpx) {
mTabs.add(getTabIndicator(GPX_TAB, AvailableGPXFragment.class));
}
OsmandPlugin.addMyPlacesTabPlugins(this, mTabs, getIntent());
return mTabs;
}
@Override
public void onAttachFragment(Fragment fragment) {
fragList.add(new WeakReference<>(fragment));
}
@Override
protected void onResume() {
super.onResume();
List<TabItem> mTabs = getTabItems();
if(mTabs.size() != tabSize ) {
setTabs(mTabs);
}
}
public OsmandApplication getMyApplication() {
return (OsmandApplication) getApplication();
}
private OsmAndLocationProvider getLocationProvider() {
return getMyApplication().getLocationProvider();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
int itemId = item.getItemId();
switch (itemId) {
case android.R.id.home:
finish();
return true;
}
return false;
}
public static void updateSearchView(Activity activity, SearchView searchView) {
//do not ever do like this
OsmandApplication app = (OsmandApplication) activity.getApplication();
if (!app.getSettings().isLightContent()) {
return;
}
try {
ImageView cancelIcon = (ImageView) searchView.findViewById(R.id.search_close_btn);
cancelIcon.setImageResource(R.drawable.ic_action_gremove_dark);
//styling search hint icon and text
SearchView.SearchAutoComplete searchEdit = (SearchView.SearchAutoComplete) searchView.findViewById(R.id.search_src_text);
searchEdit.setTextColor(activity.getResources().getColor(R.color.color_white));
SpannableStringBuilder stopHint = new SpannableStringBuilder(" ");
Float rawTextSize = searchEdit.getTextSize();
int textSize = (int) (rawTextSize * 1.25);
//setting icon as spannable
Drawable searchIcon = activity.getResources().getDrawable(R.drawable.ic_action_search_dark);
searchIcon.setBounds(0,0, textSize, textSize);
stopHint.setSpan(new ImageSpan(searchIcon), 1, 2, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
searchEdit.setHint(stopHint);
} catch (Exception e) {
e.printStackTrace();
}
}
}