mirror of
https://github.com/GrammaticalFramework/gf-core.git
synced 2026-04-22 19:22:50 -06:00
now this is a working version of the app with topic disambiguation but it is still not optimal
This commit is contained in:
BIN
src/ui/android/res/drawable-hdpi/ic_drawer.png
Normal file
BIN
src/ui/android/res/drawable-hdpi/ic_drawer.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.8 KiB |
BIN
src/ui/android/res/drawable-mdpi/ic_drawer.png
Normal file
BIN
src/ui/android/res/drawable-mdpi/ic_drawer.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.8 KiB |
BIN
src/ui/android/res/drawable-xhdpi/ic_drawer.png
Normal file
BIN
src/ui/android/res/drawable-xhdpi/ic_drawer.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 2.8 KiB |
BIN
src/ui/android/res/drawable-xxhdpi/ic_drawer.png
Normal file
BIN
src/ui/android/res/drawable-xxhdpi/ic_drawer.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 202 B |
@@ -4,49 +4,66 @@
|
|||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_width="match_parent">
|
android:layout_width="match_parent">
|
||||||
|
|
||||||
<RelativeLayout
|
<android.support.v4.widget.DrawerLayout
|
||||||
android:layout_height="match_parent"
|
android:id="@+id/drawer_layout"
|
||||||
android:layout_width="match_parent">
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent">
|
||||||
|
|
||||||
|
<!-- The main content view -->
|
||||||
<RelativeLayout
|
<RelativeLayout
|
||||||
android:id="@+id/lexical_header"
|
android:layout_height="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_width="match_parent">
|
||||||
android:layout_width="match_parent"
|
|
||||||
android:layout_alignParentTop="true"
|
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_alignParentRight="true"
|
|
||||||
android:padding="8dp"
|
|
||||||
android:background="#C0C0C0">
|
|
||||||
|
|
||||||
<org.grammaticalframework.ui.android.LanguageSelector
|
<RelativeLayout
|
||||||
android:id="@+id/show_language"
|
android:id="@+id/lexical_header"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_alignParentLeft="true"
|
|
||||||
android:layout_alignParentTop="true"
|
android:layout_alignParentTop="true"
|
||||||
android:padding="0dp"/>
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentRight="true"
|
||||||
|
android:padding="8dp"
|
||||||
|
android:background="#C0C0C0">
|
||||||
|
|
||||||
|
<org.grammaticalframework.ui.android.LanguageSelector
|
||||||
|
android:id="@+id/show_language"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_alignParentLeft="true"
|
||||||
|
android:layout_alignParentTop="true"
|
||||||
|
android:padding="0dp"/>
|
||||||
|
|
||||||
|
</RelativeLayout>
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/lexical_desc"
|
||||||
|
android:layout_width="fill_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_below="@+id/lexical_header"
|
||||||
|
android:paddingLeft="1dp"
|
||||||
|
android:paddingTop="4dp"
|
||||||
|
android:paddingBottom="2dp"
|
||||||
|
android:textSize="25sp"/>
|
||||||
|
|
||||||
|
<ListView
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="match_parent"
|
||||||
|
android:layout_below="@id/lexical_desc"
|
||||||
|
android:orientation="vertical"
|
||||||
|
android:paddingLeft="1dp"
|
||||||
|
android:id="@android:id/list" >
|
||||||
|
</ListView>
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|
||||||
<TextView
|
|
||||||
android:id="@+id/lexical_desc"
|
|
||||||
android:layout_width="fill_parent"
|
|
||||||
android:layout_height="wrap_content"
|
|
||||||
android:layout_below="@+id/lexical_header"
|
|
||||||
android:paddingLeft="1dp"
|
|
||||||
android:paddingTop="4dp"
|
|
||||||
android:paddingBottom="2dp"
|
|
||||||
android:textSize="25sp"/>
|
|
||||||
|
|
||||||
<ListView
|
<!-- The navigation drawer -->
|
||||||
android:layout_width="match_parent"
|
<ListView android:id="@+id/topics_list"
|
||||||
|
android:layout_width="250dp"
|
||||||
android:layout_height="match_parent"
|
android:layout_height="match_parent"
|
||||||
android:layout_below="@id/lexical_desc"
|
android:layout_gravity="start"
|
||||||
android:orientation="vertical"
|
android:choiceMode="singleChoice"
|
||||||
android:paddingLeft="1dp"
|
android:divider="@android:color/transparent"
|
||||||
android:id="@android:id/list" >
|
android:dividerHeight="0dp"
|
||||||
</ListView>
|
android:background="#FFFFE0"/>
|
||||||
</RelativeLayout>
|
</android.support.v4.widget.DrawerLayout>
|
||||||
|
|
||||||
<LinearLayout
|
<LinearLayout
|
||||||
android:id="@+id/progressBarView"
|
android:id="@+id/progressBarView"
|
||||||
@@ -60,4 +77,4 @@
|
|||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"/>
|
android:layout_height="wrap_content"/>
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
</FrameLayout>
|
</FrameLayout>
|
||||||
|
|||||||
@@ -18,10 +18,10 @@
|
|||||||
android:layout_toRightOf="@id/arrow"
|
android:layout_toRightOf="@id/arrow"
|
||||||
android:paddingLeft="10dp"
|
android:paddingLeft="10dp"
|
||||||
android:textSize="25sp"/>
|
android:textSize="25sp"/>
|
||||||
|
|
||||||
<WebView
|
<WebView
|
||||||
android:id="@+id/desc_details"
|
android:id="@+id/desc_details"
|
||||||
android:layout_width="wrap_content"
|
android:layout_width="wrap_content"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
android:layout_below="@id/lexical_desc"/>
|
android:layout_below="@id/lexical_desc"/>
|
||||||
</RelativeLayout>
|
</RelativeLayout>
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
|
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
|
||||||
<item android:id="@+id/input_mode"
|
<item android:id="@+id/input_mode"
|
||||||
android:title="@string/keyboard_input"/>
|
android:title="@string/keyboard_input"/>
|
||||||
|
<item android:id="@+id/topics"
|
||||||
|
android:title="@string/topics"/>
|
||||||
<item android:id="@+id/help"
|
<item android:id="@+id/help"
|
||||||
android:title="@string/help"/>
|
android:title="@string/help"/>
|
||||||
</menu>
|
</menu>
|
||||||
|
|||||||
@@ -29,4 +29,8 @@
|
|||||||
|
|
||||||
<string name="search_hint">Search word:</string>
|
<string name="search_hint">Search word:</string>
|
||||||
<string name="search_description">Search for words in the lexicon</string>
|
<string name="search_description">Search for words in the lexicon</string>
|
||||||
|
|
||||||
|
<string name="topics">Topics</string>
|
||||||
|
<string name="topics_open">Open topics</string>
|
||||||
|
<string name="topics_close">Close topics</string>
|
||||||
</resources>
|
</resources>
|
||||||
|
|||||||
@@ -5,19 +5,30 @@ import java.util.*;
|
|||||||
import android.app.Activity;
|
import android.app.Activity;
|
||||||
import android.app.ListActivity;
|
import android.app.ListActivity;
|
||||||
import android.content.Context;
|
import android.content.Context;
|
||||||
|
import android.content.res.Configuration;
|
||||||
import android.os.AsyncTask;
|
import android.os.AsyncTask;
|
||||||
import android.os.Bundle;
|
import android.os.Bundle;
|
||||||
import android.view.LayoutInflater;
|
import android.view.*;
|
||||||
import android.view.View;
|
import android.view.View;
|
||||||
import android.view.View.OnClickListener;
|
import android.view.View.OnClickListener;
|
||||||
import android.view.ViewGroup;
|
import android.view.ViewGroup;
|
||||||
import android.view.ViewGroup.LayoutParams;
|
import android.view.ViewGroup.LayoutParams;
|
||||||
|
import android.view.MenuItem;
|
||||||
|
import android.view.LayoutInflater;
|
||||||
import android.webkit.WebView;
|
import android.webkit.WebView;
|
||||||
|
import android.widget.BaseAdapter;
|
||||||
|
import android.widget.ListAdapter;
|
||||||
import android.widget.ArrayAdapter;
|
import android.widget.ArrayAdapter;
|
||||||
import android.widget.ImageView;
|
import android.widget.ImageView;
|
||||||
import android.widget.RelativeLayout;
|
import android.widget.RelativeLayout;
|
||||||
import android.widget.TextView;
|
import android.widget.TextView;
|
||||||
|
import android.widget.CheckBox;
|
||||||
|
import android.widget.CompoundButton;
|
||||||
|
import android.widget.ListView;
|
||||||
|
import android.widget.AdapterView;
|
||||||
import android.util.Log;
|
import android.util.Log;
|
||||||
|
import android.support.v4.widget.DrawerLayout;
|
||||||
|
import android.support.v4.app.ActionBarDrawerToggle;
|
||||||
|
|
||||||
import org.grammaticalframework.pgf.*;
|
import org.grammaticalframework.pgf.*;
|
||||||
import org.grammaticalframework.ui.android.LanguageSelector.OnLanguageSelectedListener;
|
import org.grammaticalframework.ui.android.LanguageSelector.OnLanguageSelectedListener;
|
||||||
@@ -28,6 +39,9 @@ public class AlternativesActivity extends ListActivity {
|
|||||||
private LanguageSelector mShowLanguageView;
|
private LanguageSelector mShowLanguageView;
|
||||||
private View mProgressBarView = null;
|
private View mProgressBarView = null;
|
||||||
private AlternativesAdapter mAdapter = null;
|
private AlternativesAdapter mAdapter = null;
|
||||||
|
private DrawerLayout mDrawerLayout;
|
||||||
|
private ListView mDrawerList;
|
||||||
|
private ActionBarDrawerToggle mDrawerToggle;
|
||||||
|
|
||||||
/** Called when the activity is first created. */
|
/** Called when the activity is first created. */
|
||||||
@Override
|
@Override
|
||||||
@@ -64,23 +78,44 @@ public class AlternativesActivity extends ListActivity {
|
|||||||
}.execute();
|
}.execute();
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout);
|
||||||
|
mDrawerToggle = new ActionBarDrawerToggle(this, mDrawerLayout,
|
||||||
|
R.drawable.ic_drawer,
|
||||||
|
R.string.topics_open,
|
||||||
|
R.string.topics_close);
|
||||||
|
mDrawerLayout.setDrawerListener(mDrawerToggle);
|
||||||
|
|
||||||
|
getActionBar().setDisplayHomeAsUpEnabled(true);
|
||||||
|
getActionBar().setHomeButtonEnabled(true);
|
||||||
|
|
||||||
TextView descrView = (TextView) findViewById(R.id.lexical_desc);
|
TextView descrView = (TextView) findViewById(R.id.lexical_desc);
|
||||||
|
|
||||||
String authority = getIntent().getData().getAuthority();
|
if (getIntent().getData() != null) {
|
||||||
String source = getIntent().getData().getQueryParameter("source");
|
String authority = getIntent().getData().getAuthority();
|
||||||
List analyses = new ArrayList();
|
String source = getIntent().getData().getQueryParameter("source");
|
||||||
for (String an : getIntent().getData().getQueryParameters("alternative")) {
|
|
||||||
analyses.add(Expr.readExpr(an));
|
|
||||||
}
|
|
||||||
descrView.setText(source);
|
|
||||||
|
|
||||||
mAdapter = new AlternativesAdapter(this, authority, analyses);
|
List analyses = new ArrayList();
|
||||||
|
for (String an : getIntent().getData().getQueryParameters("alternative")) {
|
||||||
|
analyses.add(Expr.readExpr(an));
|
||||||
|
}
|
||||||
|
descrView.setText(source);
|
||||||
|
|
||||||
|
mAdapter = new AlternativesAdapter(this, authority, analyses);
|
||||||
|
} else {
|
||||||
|
mDrawerLayout.openDrawer(Gravity.LEFT);
|
||||||
|
|
||||||
|
mAdapter = new AlternativesAdapter(this, Translator.WORDS);
|
||||||
|
}
|
||||||
|
|
||||||
|
expandedView = null;
|
||||||
setListAdapter(mAdapter);
|
setListAdapter(mAdapter);
|
||||||
expandedView = null;
|
|
||||||
|
mDrawerList = (ListView) findViewById(R.id.topics_list);
|
||||||
|
mDrawerList.setAdapter(mAdapter.getTopicsAdapter());
|
||||||
|
|
||||||
mProgressBarView = findViewById(R.id.progressBarView);
|
mProgressBarView = findViewById(R.id.progressBarView);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected void onResume() {
|
protected void onResume() {
|
||||||
@@ -98,7 +133,7 @@ public class AlternativesActivity extends ListActivity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private View expandedView;
|
private View expandedView;
|
||||||
|
|
||||||
private void collapse() {
|
private void collapse() {
|
||||||
if (expandedView == null)
|
if (expandedView == null)
|
||||||
return;
|
return;
|
||||||
@@ -182,22 +217,183 @@ public class AlternativesActivity extends ListActivity {
|
|||||||
expandedView = view;
|
expandedView = view;
|
||||||
}
|
}
|
||||||
|
|
||||||
private class AlternativesAdapter extends ArrayAdapter<Expr> {
|
private class Topic {
|
||||||
private String mAuthority;
|
public String name;
|
||||||
|
public Expr expr;
|
||||||
|
public boolean isChecked;
|
||||||
|
public boolean isAvailable;
|
||||||
|
|
||||||
|
public Topic(String name, Expr expr) {
|
||||||
|
this.name = name;
|
||||||
|
this.expr = expr;
|
||||||
|
this.isChecked = false;
|
||||||
|
this.isAvailable = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public AlternativesAdapter(Context context, String authority, List<Expr> data) {
|
private class AlternativesAdapter extends BaseAdapter implements ListAdapter {
|
||||||
super(context, android.R.layout.simple_list_item_1, data);
|
/**
|
||||||
mAuthority = authority;
|
* Contains the list of objects that represent the alternatives
|
||||||
}
|
*/
|
||||||
|
private List<Expr> mAlternatives;
|
||||||
|
|
||||||
|
private Context mContext;
|
||||||
|
|
||||||
|
// A copy of the original mAlternatives array, initialized from and then used instead as soon as
|
||||||
|
// a topic filtering is applied. mAlternatives will then only contain the filtered values.
|
||||||
|
private ArrayList<Expr> mOriginalAlternatives;
|
||||||
|
|
||||||
|
private LayoutInflater mInflater;
|
||||||
|
|
||||||
|
private String mAuthority;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A list of lists of topics. Each element in this list contains
|
||||||
|
* the list of topics for the correponding item in
|
||||||
|
* mAlternatives/mOriginalAlternatives
|
||||||
|
*/
|
||||||
|
private List<List<Topic>> mTopics;
|
||||||
|
|
||||||
|
private Map<String,Topic> mTopicMap;
|
||||||
|
private Topic[] mAllTopics;
|
||||||
|
private Topic[] mOriginalAllTopics;
|
||||||
|
|
||||||
|
private Topic mOtherTopic;
|
||||||
|
private Topic mSourceTopic;
|
||||||
|
|
||||||
|
private TopicsAdapter mTopicsAdapter;
|
||||||
|
|
||||||
|
public AlternativesAdapter(Context context, String authority, List<Expr> alternatives) {
|
||||||
|
mContext = context;
|
||||||
|
mAuthority = authority;
|
||||||
|
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
mAlternatives = alternatives;
|
||||||
|
|
||||||
|
boolean addOther = false;
|
||||||
|
mTopics = new ArrayList<List<Topic>>();
|
||||||
|
mTopicMap = new TreeMap<String,Topic>();
|
||||||
|
for (Expr e : mAlternatives) {
|
||||||
|
List<Topic> topics = new ArrayList<Topic>();
|
||||||
|
for (Expr topicExpr : mTranslator.getTopicsOf(e)) {
|
||||||
|
String name = mTranslator.linearizeSource(topicExpr);
|
||||||
|
String key = name.toLowerCase();
|
||||||
|
Topic topic = mTopicMap.get(key);
|
||||||
|
if (topic == null) {
|
||||||
|
topic = new Topic(name, topicExpr);
|
||||||
|
mTopicMap.put(key,topic);
|
||||||
|
}
|
||||||
|
topics.add(topic);
|
||||||
|
}
|
||||||
|
mTopics.add(topics);
|
||||||
|
|
||||||
|
if (topics.size() == 0)
|
||||||
|
addOther = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
mAllTopics = new Topic[mTopicMap.size() + (addOther ? 1 : 0)];
|
||||||
|
for (Map.Entry<String,Topic> entry : mTopicMap.entrySet()) {
|
||||||
|
mAllTopics[i++] = entry.getValue();
|
||||||
|
}
|
||||||
|
if (addOther) {
|
||||||
|
Expr topicExpr = Expr.readExpr("other_1_A");
|
||||||
|
String name = mTranslator.linearizeSource(topicExpr);
|
||||||
|
mOtherTopic = new Topic(name, topicExpr);
|
||||||
|
mAllTopics[i++] = mOtherTopic;
|
||||||
|
}
|
||||||
|
|
||||||
|
mOriginalAllTopics = mAllTopics;
|
||||||
|
|
||||||
|
mTopicsAdapter = new TopicsAdapter();
|
||||||
|
}
|
||||||
|
|
||||||
|
public AlternativesAdapter(Context context, String authority) {
|
||||||
|
mContext = context;
|
||||||
|
mAuthority = authority;
|
||||||
|
mInflater = (LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
|
||||||
|
mAlternatives = null;
|
||||||
|
|
||||||
|
mTopics = null;
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
mTopicMap = new TreeMap<String,Topic>();
|
||||||
|
for (Expr topicExpr : mTranslator.getTopicsOf(null)) {
|
||||||
|
String name = mTranslator.linearizeSource(topicExpr);
|
||||||
|
String key = name.toLowerCase();
|
||||||
|
Topic topic = mTopicMap.get(key);
|
||||||
|
if (topic == null) {
|
||||||
|
topic = new Topic(name, topicExpr);
|
||||||
|
mTopicMap.put(key,topic);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
mAllTopics = new Topic[mTopicMap.size()];
|
||||||
|
for (Map.Entry<String,Topic> entry : mTopicMap.entrySet()) {
|
||||||
|
mAllTopics[i++] = entry.getValue();
|
||||||
|
}
|
||||||
|
|
||||||
|
mOriginalAllTopics = mAllTopics;
|
||||||
|
|
||||||
|
mTopicsAdapter = new TopicsAdapter();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the context associated with this array adapter. The context is used
|
||||||
|
* to create views from the resource passed to the constructor.
|
||||||
|
*
|
||||||
|
* @return The Context associated with this adapter.
|
||||||
|
*/
|
||||||
|
public Context getContext() {
|
||||||
|
return mContext;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthority() {
|
||||||
|
return mAuthority;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public int getCount() {
|
||||||
|
if (mAlternatives == null)
|
||||||
|
return 0;
|
||||||
|
else
|
||||||
|
return mAlternatives.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public Expr getItem(int position) {
|
||||||
|
return mAlternatives.get(position);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the position of the specified item in the array.
|
||||||
|
*
|
||||||
|
* @param item The item to retrieve the position of.
|
||||||
|
*
|
||||||
|
* @return The position of the specified item.
|
||||||
|
*/
|
||||||
|
public int getPosition(Expr item) {
|
||||||
|
if (mAlternatives == null)
|
||||||
|
return -1;
|
||||||
|
else
|
||||||
|
return mAlternatives.indexOf(item);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* {@inheritDoc}
|
||||||
|
*/
|
||||||
|
public long getItemId(int position) {
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
public View getView(int position, View convertView, ViewGroup parent) {
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
final Expr expr = getItem(position);
|
final Expr expr = getItem(position);
|
||||||
|
|
||||||
if (mAuthority.equals(Translator.WORDS)) {
|
if (mAuthority.equals(Translator.WORDS)) {
|
||||||
if (convertView == null) {
|
if (convertView == null) {
|
||||||
LayoutInflater inflater = (LayoutInflater)
|
convertView = mInflater.inflate(R.layout.lexical_item, null);
|
||||||
getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
|
|
||||||
convertView = inflater.inflate(R.layout.lexical_item, null);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
TextView descView = (TextView)
|
TextView descView = (TextView)
|
||||||
@@ -221,9 +417,7 @@ public class AlternativesActivity extends ListActivity {
|
|||||||
});
|
});
|
||||||
} else if (mAuthority.equals(Translator.SENTENCES)) {
|
} else if (mAuthority.equals(Translator.SENTENCES)) {
|
||||||
if (convertView == null) {
|
if (convertView == null) {
|
||||||
LayoutInflater inflater = (LayoutInflater)
|
convertView = mInflater.inflate(R.layout.alternative_item, null);
|
||||||
getContext().getSystemService(Activity.LAYOUT_INFLATER_SERVICE);
|
|
||||||
convertView = inflater.inflate(R.layout.alternative_item, null);
|
|
||||||
|
|
||||||
View treeView = (View) convertView.findViewById(R.id.desc_details);
|
View treeView = (View) convertView.findViewById(R.id.desc_details);
|
||||||
((RelativeLayout) convertView).removeView(treeView);
|
((RelativeLayout) convertView).removeView(treeView);
|
||||||
@@ -283,5 +477,192 @@ public class AlternativesActivity extends ListActivity {
|
|||||||
|
|
||||||
return convertView;
|
return convertView;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean areAllItemsEnabled() {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isEnabled(int position) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
public TopicsAdapter getTopicsAdapter() {
|
||||||
|
return mTopicsAdapter;
|
||||||
|
}
|
||||||
|
|
||||||
|
void filterOnTopics(List<Topic> selected_topics) {
|
||||||
|
if (mSourceTopic != null && !selected_topics.contains(mSourceTopic))
|
||||||
|
mAlternatives = null;
|
||||||
|
|
||||||
|
if (mAlternatives == null) {
|
||||||
|
if (selected_topics.size() == 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
mSourceTopic = selected_topics.get(0);
|
||||||
|
mAlternatives = mTranslator.getTopicWords(mSourceTopic.expr);
|
||||||
|
|
||||||
|
mTopics = new ArrayList<List<Topic>>();
|
||||||
|
for (Expr e : mAlternatives) {
|
||||||
|
List<Topic> topics = new ArrayList<Topic>();
|
||||||
|
for (Expr topicExpr : mTranslator.getTopicsOf(e)) {
|
||||||
|
String name = mTranslator.linearizeSource(topicExpr);
|
||||||
|
String key = name.toLowerCase();
|
||||||
|
topics.add(mTopicMap.get(key));
|
||||||
|
}
|
||||||
|
mTopics.add(topics);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (mOriginalAlternatives == null) {
|
||||||
|
mOriginalAlternatives = new ArrayList<Expr>(mAlternatives);
|
||||||
|
}
|
||||||
|
|
||||||
|
mAlternatives = new ArrayList<Expr>();
|
||||||
|
List<List<Expr>> topics = new ArrayList<List<Expr>>();
|
||||||
|
|
||||||
|
for (Topic topic : mOriginalAllTopics) {
|
||||||
|
topic.isAvailable = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
int count = 0;
|
||||||
|
for (int i = 0; i < mOriginalAlternatives.size(); i++) {
|
||||||
|
boolean match = true;
|
||||||
|
for (Topic topic : selected_topics) {
|
||||||
|
if (topic == mOtherTopic) {
|
||||||
|
if (mTopics.get(i).size() > 0) {
|
||||||
|
match = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
} else if (!mTopics.get(i).contains(topic)) {
|
||||||
|
match = false;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (match) {
|
||||||
|
mAlternatives.add(mOriginalAlternatives.get(i));
|
||||||
|
if (mTopics.get(i).size() == 0) {
|
||||||
|
if (!mOtherTopic.isAvailable)
|
||||||
|
count++;
|
||||||
|
mOtherTopic.isAvailable = true;
|
||||||
|
} else {
|
||||||
|
for (Topic topic : mTopics.get(i)) {
|
||||||
|
if (!topic.isAvailable)
|
||||||
|
count++;
|
||||||
|
topic.isAvailable = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
int i = 0;
|
||||||
|
mAllTopics = new Topic[count];
|
||||||
|
for (Topic topic : mOriginalAllTopics) {
|
||||||
|
if (topic.isAvailable)
|
||||||
|
mAllTopics[i++] = topic;
|
||||||
|
}
|
||||||
|
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private class TopicsAdapter extends BaseAdapter implements ListAdapter {
|
||||||
|
public TopicsAdapter() {
|
||||||
|
}
|
||||||
|
|
||||||
|
public Context getContext() {
|
||||||
|
return mAdapter.getContext();
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getCount() {
|
||||||
|
return mAdapter.mAllTopics.length;
|
||||||
|
}
|
||||||
|
|
||||||
|
public Topic getItem(int position) {
|
||||||
|
return mAdapter.mAllTopics[position];
|
||||||
|
}
|
||||||
|
|
||||||
|
public int getPosition(Topic topic) {
|
||||||
|
for (int i = 0; i < mAdapter.mAllTopics.length; i++) {
|
||||||
|
if (mAdapter.mAllTopics[i] == topic)
|
||||||
|
return i;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getItemId(int position) {
|
||||||
|
return position;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Shame on you Google this class should not have been here
|
||||||
|
// but unfortuantely CheckBox.setChecked doesn't work and here
|
||||||
|
// we need a workarround. Since the class is there now it is also
|
||||||
|
// used to implement OnClickListener.
|
||||||
|
private class TopicCheckBox extends CheckBox implements OnClickListener {
|
||||||
|
private Topic mTopic;
|
||||||
|
|
||||||
|
public TopicCheckBox(Context context, Topic topic) {
|
||||||
|
super(context);
|
||||||
|
mTopic = topic;
|
||||||
|
setOnClickListener(this);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isChecked() {
|
||||||
|
if (mTopic == null)
|
||||||
|
return false;
|
||||||
|
else
|
||||||
|
return mTopic.isChecked;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onClick(View view) {
|
||||||
|
mTopic.isChecked = !mTopic.isChecked;
|
||||||
|
filterOnTopics();
|
||||||
|
notifyDataSetChanged();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void filterOnTopics() {
|
||||||
|
List<Topic> selected_topics = new ArrayList<Topic>();
|
||||||
|
for (int i = 0; i < getCount(); i++) {
|
||||||
|
Topic topic = getItem(i);
|
||||||
|
if (topic.isChecked)
|
||||||
|
selected_topics.add(topic);
|
||||||
|
}
|
||||||
|
mAdapter.filterOnTopics(selected_topics);
|
||||||
|
}
|
||||||
|
|
||||||
|
public View getView(int position, View convertView, ViewGroup parent) {
|
||||||
|
Topic entry = getItem(position);
|
||||||
|
|
||||||
|
CheckBox checkBox = new TopicCheckBox(getContext(), entry);
|
||||||
|
checkBox.setText(entry.name);
|
||||||
|
checkBox.setTextSize(25);
|
||||||
|
checkBox.setTextColor(android.graphics.Color.parseColor("#808080"));
|
||||||
|
return checkBox;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
protected void onPostCreate(Bundle savedInstanceState) {
|
||||||
|
super.onPostCreate(savedInstanceState);
|
||||||
|
// Sync the toggle state after onRestoreInstanceState has occurred.
|
||||||
|
mDrawerToggle.syncState();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onConfigurationChanged(Configuration newConfig) {
|
||||||
|
super.onConfigurationChanged(newConfig);
|
||||||
|
mDrawerToggle.onConfigurationChanged(newConfig);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean onOptionsItemSelected(MenuItem item) {
|
||||||
|
// Pass the event to ActionBarDrawerToggle, if it returns
|
||||||
|
// true, then it has handled the app icon touch event
|
||||||
|
if (mDrawerToggle.onOptionsItemSelected(item)) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
return super.onOptionsItemSelected(item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -191,8 +191,8 @@ public class MainActivity extends Activity {
|
|||||||
editor.commit();
|
editor.commit();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
case R.id.semantic_graph: {
|
case R.id.topics: {
|
||||||
Intent myIntent = new Intent(MainActivity.this, SemanticGraphActivity.class);
|
Intent myIntent = new Intent(MainActivity.this, AlternativesActivity.class);
|
||||||
MainActivity.this.startActivity(myIntent);
|
MainActivity.this.startActivity(myIntent);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -338,11 +338,26 @@ public class Translator {
|
|||||||
if (s == null)
|
if (s == null)
|
||||||
s = "% "; // make sure that we return something
|
s = "% "; // make sure that we return something
|
||||||
|
|
||||||
if (getTargetLanguage().getLangCode().equals("cmn-Hans-CN") ||
|
if (getTargetLanguage().getLangCode().equals("cmn-Hans-CN") ||
|
||||||
getTargetLanguage().getLangCode().equals("ja-JP") ||
|
getTargetLanguage().getLangCode().equals("ja-JP") ||
|
||||||
getTargetLanguage().getLangCode().equals("th-TH"))
|
getTargetLanguage().getLangCode().equals("th-TH"))
|
||||||
return implode(s) ;
|
return implode(s);
|
||||||
else return s ;
|
else
|
||||||
|
return s;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String linearizeSource(Expr expr) {
|
||||||
|
Concr targetLang = getSourceConcr();
|
||||||
|
String s = targetLang.linearize(expr);
|
||||||
|
if (s == null)
|
||||||
|
s = "% "; // make sure that we return something
|
||||||
|
|
||||||
|
if (getTargetLanguage().getLangCode().equals("cmn-Hans-CN") ||
|
||||||
|
getTargetLanguage().getLangCode().equals("ja-JP") ||
|
||||||
|
getTargetLanguage().getLangCode().equals("th-TH"))
|
||||||
|
return implode(s);
|
||||||
|
else
|
||||||
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Object[] bracketedLinearize(Expr expr) {
|
public Object[] bracketedLinearize(Expr expr) {
|
||||||
@@ -443,15 +458,34 @@ public class Translator {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private Expr getTopicWords(Expr lemma) {
|
public List<Expr> getTopicWords(Expr lemma) {
|
||||||
StringBuilder sbuilder = new StringBuilder();
|
TripleResult res = null;
|
||||||
|
List<Expr> words = new ArrayList<Expr>();
|
||||||
try {
|
try {
|
||||||
TripleResult res = mSGManager.queryTriple(null, topic_pred, lemma);
|
res = mSGManager.queryTriple(null, topic_pred, lemma);
|
||||||
|
while (res.hasNext()) {
|
||||||
|
words.add(res.getSubject());
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
// nothing
|
||||||
|
} catch (SGError e) {
|
||||||
|
// nothing
|
||||||
|
} finally {
|
||||||
|
if (res != null)
|
||||||
|
res.close();
|
||||||
|
}
|
||||||
|
return words;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Expr getTopicWordsHtml(Expr lemma) {
|
||||||
|
StringBuilder sbuilder = new StringBuilder();
|
||||||
|
TripleResult res = null;
|
||||||
|
try {
|
||||||
|
res = mSGManager.queryTriple(null, topic_pred, lemma);
|
||||||
Map<String,Uri.Builder> map = new TreeMap<String,Uri.Builder>();
|
Map<String,Uri.Builder> map = new TreeMap<String,Uri.Builder>();
|
||||||
while (res.hasNext()) {
|
while (res.hasNext()) {
|
||||||
updateWordsMap(res.getSubject(), map);
|
updateWordsMap(res.getSubject(), map);
|
||||||
}
|
}
|
||||||
res.close();
|
|
||||||
|
|
||||||
StringBuilder builder = new StringBuilder();
|
StringBuilder builder = new StringBuilder();
|
||||||
buildWordsHtml(map, builder);
|
buildWordsHtml(map, builder);
|
||||||
@@ -460,6 +494,9 @@ public class Translator {
|
|||||||
// nothing
|
// nothing
|
||||||
} catch (SGError e) {
|
} catch (SGError e) {
|
||||||
// nothing
|
// nothing
|
||||||
|
} finally {
|
||||||
|
if (res != null)
|
||||||
|
res.close();
|
||||||
}
|
}
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
@@ -483,9 +520,9 @@ public class Translator {
|
|||||||
Expr e = new Expr("MkDocument",
|
Expr e = new Expr("MkDocument",
|
||||||
def,
|
def,
|
||||||
new Expr("Inflection"+cat,lemma),
|
new Expr("Inflection"+cat,lemma),
|
||||||
getTopicWords(lemma));
|
getTopicWordsHtml(lemma));
|
||||||
String html =
|
String html =
|
||||||
"<html><head><meta charset=\"UTF-8\"/><style>a {color: gray;}</style></head><body>" +
|
"<html><head><meta charset=\"UTF-8\"/><style>a {color: #808080;}</style></head><body>" +
|
||||||
targetLang.linearize(e) +
|
targetLang.linearize(e) +
|
||||||
"</body>";
|
"</body>";
|
||||||
return html;
|
return html;
|
||||||
@@ -495,7 +532,26 @@ public class Translator {
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public List<Expr> getTopicsOf(Expr lemma) {
|
||||||
|
TripleResult res = null;
|
||||||
|
List<Expr> topics = new ArrayList<Expr>();
|
||||||
|
try {
|
||||||
|
res = mSGManager.queryTriple(lemma, topic_pred, null);
|
||||||
|
while (res.hasNext()) {
|
||||||
|
topics.add(res.getObject());
|
||||||
|
}
|
||||||
|
} catch (IOException e) {
|
||||||
|
// nothing
|
||||||
|
} catch (SGError e) {
|
||||||
|
// nothing
|
||||||
|
} finally {
|
||||||
|
if (res != null)
|
||||||
|
res.close();
|
||||||
|
}
|
||||||
|
return topics;
|
||||||
|
}
|
||||||
|
|
||||||
private static String escapeHtml(CharSequence text) {
|
private static String escapeHtml(CharSequence text) {
|
||||||
StringBuilder out = new StringBuilder();
|
StringBuilder out = new StringBuilder();
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user