Add the ability to open article from search

This commit is contained in:
Alexander Sytnyk 2018-03-28 12:39:29 +03:00
parent 69f891c82f
commit 3ff4bb8dbd
4 changed files with 101 additions and 3 deletions

View file

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:osmand="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<android.support.v7.widget.Toolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="@dimen/dashboard_map_toolbar"
android:minHeight="@dimen/dashboard_map_toolbar"
android:theme="?attr/toolbar_theme"
osmand:contentInsetLeft="54dp"
osmand:contentInsetStart="54dp">
</android.support.v7.widget.Toolbar>
<ScrollView
android:layout_width="match_parent"
android:layout_height="match_parent">
<TextView
android:id="@+id/content_text_view"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
</ScrollView>
</LinearLayout>

View file

@ -0,0 +1,61 @@
package net.osmand.plus.wikivoyage;
import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v4.app.FragmentManager;
import android.support.v7.widget.Toolbar;
import android.text.Html;
import android.text.SpannableString;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;
import net.osmand.plus.R;
import net.osmand.plus.base.BaseOsmAndDialogFragment;
import net.osmand.plus.wikivoyage.data.SearchResult;
import net.osmand.plus.wikivoyage.data.WikivoyageArticle;
public class WikivoyageArticleDialogFragment extends BaseOsmAndDialogFragment {
public static final String TAG = "WikivoyageArticleDialogFragment";
private SearchResult searchResult;
public void setSearchResult(SearchResult searchResult) {
this.searchResult = searchResult;
}
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
final View mainView = inflater.inflate(R.layout.fragment_wikivoyage_article_dialog, container);
Toolbar toolbar = (Toolbar) mainView.findViewById(R.id.toolbar);
toolbar.setNavigationIcon(getContentIcon(R.drawable.ic_arrow_back));
toolbar.setNavigationContentDescription(R.string.access_shared_string_navigate_up);
toolbar.setNavigationOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
}
});
TextView contentTv = (TextView) mainView.findViewById(R.id.content_text_view);
WikivoyageArticle article = getMyApplication().getWikivoyageDbHelper().getArticle(searchResult);
contentTv.setText(new SpannableString(Html.fromHtml(article.getContent())));
return mainView;
}
public static boolean showInstance(FragmentManager fm, SearchResult searchResult) {
try {
WikivoyageArticleDialogFragment fragment = new WikivoyageArticleDialogFragment();
fragment.setSearchResult(searchResult);
fragment.show(fm, TAG);
return true;
} catch (RuntimeException e) {
return false;
}
}
}

View file

@ -7,8 +7,10 @@ import net.osmand.IndexConstants;
import net.osmand.plus.OsmandApplication; import net.osmand.plus.OsmandApplication;
import net.osmand.plus.api.SQLiteAPI.SQLiteConnection; import net.osmand.plus.api.SQLiteAPI.SQLiteConnection;
import net.osmand.plus.api.SQLiteAPI.SQLiteCursor; import net.osmand.plus.api.SQLiteAPI.SQLiteCursor;
import net.osmand.util.Algorithms;
import java.io.File; import java.io.File;
import java.io.IOException;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
@ -129,7 +131,11 @@ public class WikivoyageDbHelper {
res.id = cursor.getString(0); res.id = cursor.getString(0);
res.title = cursor.getString(1); res.title = cursor.getString(1);
byte[] contentBlob = cursor.getBlob(2); try {
res.content = Algorithms.gzipToString(cursor.getBlob(2));
} catch (IOException e) {
e.printStackTrace();
}
res.isPartOf = cursor.getString(3); res.isPartOf = cursor.getString(3);
res.lat = cursor.getDouble(4); res.lat = cursor.getDouble(4);
res.lon = cursor.getDouble(5); res.lon = cursor.getDouble(5);

View file

@ -17,7 +17,7 @@ import android.widget.TextView;
import net.osmand.plus.R; import net.osmand.plus.R;
import net.osmand.plus.base.BaseOsmAndDialogFragment; import net.osmand.plus.base.BaseOsmAndDialogFragment;
import net.osmand.plus.wikivoyage.data.WikivoyageArticle; import net.osmand.plus.wikivoyage.WikivoyageArticleDialogFragment;
import net.osmand.plus.wikivoyage.data.WikivoyageDbHelper; import net.osmand.plus.wikivoyage.data.WikivoyageDbHelper;
public class WikivoyageSearchDialogFragment extends BaseOsmAndDialogFragment { public class WikivoyageSearchDialogFragment extends BaseOsmAndDialogFragment {
@ -76,7 +76,7 @@ public class WikivoyageSearchDialogFragment extends BaseOsmAndDialogFragment {
public void onClick(View v) { public void onClick(View v) {
int pos = rv.getChildAdapterPosition(v); int pos = rv.getChildAdapterPosition(v);
if (pos != RecyclerView.NO_POSITION) { if (pos != RecyclerView.NO_POSITION) {
WikivoyageArticle article = dbHelper.getArticle(adapter.getItem(pos)); WikivoyageArticleDialogFragment.showInstance(getFragmentManager(), adapter.getItem(pos));
} }
} }
}); });