Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/mapsme/omim.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Magidovich <mgsergio@mapswithme.com>2016-06-27 16:11:43 +0300
committerSergey Magidovich <mgsergio@mapswithme.com>2016-07-01 15:27:59 +0300
commit9f1e419f825cab84b140ec70ce08744cc6d76c07 (patch)
tree9a9334809f2e1c3ed328c553124e142c755d09db /android
parent57f6d206925fe777796d72c81ea975ecedbd6eff (diff)
Add localized names.
Diffstat (limited to 'android')
-rw-r--r--android/3rd_party/BottomSheet/build.gradle2
-rw-r--r--android/UnitTests/build.gradle2
-rw-r--r--android/build.gradle2
-rw-r--r--android/src/com/mapswithme/maps/editor/EditorFragment.java82
-rw-r--r--android/src/com/mapswithme/maps/editor/EditorHostFragment.java63
-rw-r--r--android/src/com/mapswithme/maps/editor/LanguagesFragment.java32
-rw-r--r--android/src/com/mapswithme/maps/editor/MultilanguageAdapter.java60
7 files changed, 179 insertions, 64 deletions
diff --git a/android/3rd_party/BottomSheet/build.gradle b/android/3rd_party/BottomSheet/build.gradle
index f93a7a5d96..70f45ba9ad 100644
--- a/android/3rd_party/BottomSheet/build.gradle
+++ b/android/3rd_party/BottomSheet/build.gradle
@@ -4,7 +4,7 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.1.0'
+ classpath 'com.android.tools.build:gradle:2.1.2'
}
}
diff --git a/android/UnitTests/build.gradle b/android/UnitTests/build.gradle
index e30a3877d5..cbd1b88ad0 100644
--- a/android/UnitTests/build.gradle
+++ b/android/UnitTests/build.gradle
@@ -5,7 +5,7 @@ buildscript {
jcenter()
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.1.0'
+ classpath 'com.android.tools.build:gradle:2.1.2'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
diff --git a/android/build.gradle b/android/build.gradle
index e5ca7b798e..6e87bac5fe 100644
--- a/android/build.gradle
+++ b/android/build.gradle
@@ -7,7 +7,7 @@ buildscript {
}
dependencies {
- classpath 'com.android.tools.build:gradle:2.1.0'
+ classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'io.fabric.tools:gradle:1.+'
}
}
diff --git a/android/src/com/mapswithme/maps/editor/EditorFragment.java b/android/src/com/mapswithme/maps/editor/EditorFragment.java
index fcd3d5a837..7791b4a7f4 100644
--- a/android/src/com/mapswithme/maps/editor/EditorFragment.java
+++ b/android/src/com/mapswithme/maps/editor/EditorFragment.java
@@ -17,6 +17,7 @@ import android.util.SparseArray;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.view.ViewTreeObserver;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.TextView;
@@ -44,8 +45,8 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private EditText mName;
private RecyclerView mLocalizedNames;
- private final RecyclerView.AdapterDataObserver mLocalizedNamesObserver = new RecyclerView.AdapterDataObserver()
- {
+
+ private final RecyclerView.AdapterDataObserver mLocalizedNamesObserver = new RecyclerView.AdapterDataObserver() {
@Override
public void onChanged()
{
@@ -76,6 +77,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
refreshLocalizedNames();
}
};
+
private MultilanguageAdapter mLocalizedNamesAdapter;
private TextView mLocalizedShow;
private boolean mIsLocalizedShown;
@@ -195,6 +197,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
refreshOpeningTime();
refreshEditableFields();
refreshResetButton();
+ refreshLocalizedNames();
}
@Override
@@ -204,6 +207,17 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
setEdits();
}
+ private void writeNames()
+ {
+ LinearLayoutManager lm = (LinearLayoutManager) mLocalizedNames.getLayoutManager();
+ for (int i = 0; i < mLocalizedNamesAdapter.getItemCount(); ++i)
+ {
+ View nameItem = lm.findViewByPosition(i);
+ EditText name = (EditText) nameItem.findViewById(R.id.input);
+ mParent.setLocalizedNameTo(name.getText().toString(), i + 1); // +1 Skip default name.
+ }
+ }
+
boolean setEdits()
{
if (!validateFields())
@@ -218,7 +232,9 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
Editor.nativeSetEmail(mEmail.getText().toString());
Editor.nativeSetHasWifi(mWifi.isChecked());
Editor.nativeSetOperator(mOperator.getText().toString());
- // TODO set localizated names
+
+ writeNames();
+ Editor.nativeSetLocalizedNames(mParent.getLocalizedNamesAsArray());
return true;
}
@@ -324,29 +340,63 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
}
}
+ private void initLocalizedNameView(final View view)
+ {
+ mLocalizedNames = (RecyclerView) view.findViewById(R.id.recycler);
+ mLocalizedNames.setLayoutManager(new LinearLayoutManager(getActivity()));
+ mLocalizedNamesAdapter = new MultilanguageAdapter(mParent);
+ mLocalizedNames.setAdapter(mLocalizedNamesAdapter);
+ mLocalizedNamesAdapter.registerAdapterDataObserver(mLocalizedNamesObserver);
+ refreshLocalizedNames();
+
+ final Bundle args = getArguments();
+ if (args.containsKey(EditorHostFragment.kLastLocalizedNameIndex))
+ {
+ showLocalizedNames(true);
+ UiUtils.waitLayout(mLocalizedNames, new ViewTreeObserver.OnGlobalLayoutListener()
+ {
+ @Override
+ public void onGlobalLayout()
+ {
+ LinearLayoutManager lm = (LinearLayoutManager) mLocalizedNames.getLayoutManager();
+ int position = args.getInt(EditorHostFragment.kLastLocalizedNameIndex);
+
+ View nameItem = mLocalizedNames.getLayoutManager().findViewByPosition(position);
+
+ int cvNameTop = view.findViewById(R.id.cv__name).getTop();
+ int nameItemTop = nameItem.getTop();
+
+ view.scrollTo(0, cvNameTop + nameItemTop);
+
+ // TODO(mgsergio): Uncomment if focus and keyboard are required.
+ // TODO(mgsergio): Keyboard doesn't want to hide. Only pressing back button works.
+ // View nameItemInput = nameItem.findViewById(R.id.input);
+ // nameItemInput.requestFocus();
+ // InputUtils.showKeyboard(nameItemInput);
+ }
+ });
+ }
+ else
+ {
+ showLocalizedNames(false);
+ }
+ }
+
private void initViews(View view)
{
final View categoryBlock = view.findViewById(R.id.category);
categoryBlock.setOnClickListener(this);
// TODO show icon and fill it when core will implement that
- UiUtils.hide(categoryBlock.findViewById(R.id.icon));
+ // UiUtils.hide(categoryBlock.findViewById(R.id.icon));
mCategory = (TextView) categoryBlock.findViewById(R.id.name);
mCardName = view.findViewById(R.id.cv__name);
mCardAddress = view.findViewById(R.id.cv__address);
mCardMetadata = view.findViewById(R.id.cv__metadata);
mName = findInput(mCardName);
- // TODO uncomment and finish localized name
- // view.findViewById(R.id.add_langs).setOnClickListener(this);
- UiUtils.hide(view.findViewById(R.id.add_langs));
+ view.findViewById(R.id.add_langs).setOnClickListener(this);
mLocalizedShow = (TextView) view.findViewById(R.id.show_langs);
mLocalizedShow.setOnClickListener(this);
- mLocalizedNames = (RecyclerView) view.findViewById(R.id.recycler);
- mLocalizedNames.setLayoutManager(new LinearLayoutManager(getActivity()));
- mLocalizedNamesAdapter = new MultilanguageAdapter(Editor.nativeGetLocalizedNames());
- mLocalizedNames.setAdapter(mLocalizedNamesAdapter);
- mLocalizedNamesAdapter.registerAdapterDataObserver(mLocalizedNamesObserver);
- refreshLocalizedNames();
- showLocalizedNames(false);
+ initLocalizedNameView(view);
// Address
view.findViewById(R.id.block_street).setOnClickListener(this);
@@ -462,9 +512,7 @@ public class EditorFragment extends BaseMwmFragment implements View.OnClickListe
private void refreshLocalizedNames()
{
- // TODO uncomment and finish localized names
- // UiUtils.showIf(mLocalizedNamesAdapter.getItemCount() > 0, mLocalizedShow);
- UiUtils.hide(mLocalizedNames, mLocalizedShow);
+ UiUtils.showIf(mLocalizedNamesAdapter.getItemCount() > 0, mLocalizedShow);
}
private void showLocalizedNames(boolean show)
diff --git a/android/src/com/mapswithme/maps/editor/EditorHostFragment.java b/android/src/com/mapswithme/maps/editor/EditorHostFragment.java
index f253b55c25..d8c8fd815b 100644
--- a/android/src/com/mapswithme/maps/editor/EditorHostFragment.java
+++ b/android/src/com/mapswithme/maps/editor/EditorHostFragment.java
@@ -16,6 +16,8 @@ import com.mapswithme.maps.MwmActivity;
import com.mapswithme.maps.R;
import com.mapswithme.maps.base.BaseMwmToolbarFragment;
import com.mapswithme.maps.base.OnBackPressListener;
+import com.mapswithme.maps.editor.data.Language;
+import com.mapswithme.maps.editor.data.LocalizedName;
import com.mapswithme.maps.editor.data.LocalizedStreet;
import com.mapswithme.maps.widget.SearchToolbarController;
import com.mapswithme.maps.widget.ToolbarController;
@@ -24,10 +26,15 @@ import com.mapswithme.util.UiUtils;
import com.mapswithme.util.Utils;
import com.mapswithme.util.statistics.Statistics;
+import java.util.ArrayList;
+import java.util.Arrays;
+
public class EditorHostFragment extends BaseMwmToolbarFragment
- implements OnBackPressListener, View.OnClickListener
+ implements OnBackPressListener, View.OnClickListener, LanguagesFragment.Listener
{
private boolean mIsNewObject;
+ final static String kExistingLocalizedNames = "ExistingLocalizedNames";
+ final static String kLastLocalizedNameIndex = "LastLocalizedNameIndex";
enum Mode
{
@@ -40,6 +47,35 @@ public class EditorHostFragment extends BaseMwmToolbarFragment
private Mode mMode;
+ /// A list of localized names added by a user and those that were in metadata.
+ private ArrayList<LocalizedName> mLocalizedNames;
+
+ /// Used in MultilanguageAdapter to show, select and remove items.
+ ArrayList<LocalizedName> getLocalizedNames()
+ {
+ return mLocalizedNames;
+ }
+
+ public LocalizedName[] getLocalizedNamesAsArray()
+ {
+ return mLocalizedNames.toArray(new LocalizedName[mLocalizedNames.size()]);
+ }
+
+ void setLocalizedNames(LocalizedName[] names)
+ {
+ mLocalizedNames = new ArrayList(Arrays.asList(names));
+ }
+
+ void setLocalizedNameTo(String name, int index)
+ {
+ mLocalizedNames.get(index).name = name;
+ }
+
+ void addLocalizedName(LocalizedName name)
+ {
+ mLocalizedNames.add(name);
+ }
+
@Nullable
@Override
public View onCreateView(LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState)
@@ -65,6 +101,7 @@ public class EditorHostFragment extends BaseMwmToolbarFragment
mIsNewObject = getArguments().getBoolean(EditorActivity.EXTRA_NEW_OBJECT, false);
mToolbarController.setTitle(getTitle());
+ setLocalizedNames(Editor.nativeGetLocalizedNames());
editMapObject();
}
@@ -105,10 +142,18 @@ public class EditorHostFragment extends BaseMwmToolbarFragment
protected void editMapObject()
{
+ editMapObject(false /* focusToLastLocalizedName */);
+ }
+
+ protected void editMapObject(boolean focusToLastLocalizedName)
+ {
mMode = Mode.MAP_OBJECT;
((SearchToolbarController) mToolbarController).showControls(false);
mToolbarController.setTitle(getTitle());
- final Fragment editorFragment = Fragment.instantiate(getActivity(), EditorFragment.class.getName());
+ Bundle args = new Bundle();
+ if (focusToLastLocalizedName)
+ args.putInt(kLastLocalizedNameIndex, mLocalizedNames.size() - 2); // -1 for zero-based and one more -1 for ignoring default name.
+ final Fragment editorFragment = Fragment.instantiate(getActivity(), EditorFragment.class.getName(), args);
getChildFragmentManager().beginTransaction()
.replace(R.id.fragment_container, editorFragment, EditorFragment.class.getName())
.commit();
@@ -133,7 +178,12 @@ public class EditorHostFragment extends BaseMwmToolbarFragment
protected void addLocalizedLanguage()
{
- editWithFragment(Mode.LANGUAGE, R.string.choose_language, null, LanguagesFragment.class, false);
+ Bundle args = new Bundle();
+ String[] languages = new String[mLocalizedNames.size()];
+ for (int i = 0; i < mLocalizedNames.size(); ++i)
+ languages[i] = mLocalizedNames.get(i).lang;
+ args.putStringArray(kExistingLocalizedNames, languages);
+ editWithFragment(Mode.LANGUAGE, R.string.choose_language, args, LanguagesFragment.class, false);
}
private void editWithFragment(Mode newMode, @StringRes int toolbarTitle, @Nullable Bundle args, Class<? extends Fragment> fragmentClass, boolean showSearch)
@@ -249,4 +299,11 @@ public class EditorHostFragment extends BaseMwmToolbarFragment
{
return mIsNewObject;
}
+
+ @Override
+ public void onLanguageSelected(Language lang)
+ {
+ addLocalizedName(Editor.nativeMakeLocalizedName(lang.code, ""));
+ editMapObject(true /* focusToLastLocalizedName */);
+ }
}
diff --git a/android/src/com/mapswithme/maps/editor/LanguagesFragment.java b/android/src/com/mapswithme/maps/editor/LanguagesFragment.java
index 6a981f908b..c7b77ed663 100644
--- a/android/src/com/mapswithme/maps/editor/LanguagesFragment.java
+++ b/android/src/com/mapswithme/maps/editor/LanguagesFragment.java
@@ -1,10 +1,18 @@
package com.mapswithme.maps.editor;
+import android.os.Bundle;
import android.support.v7.widget.RecyclerView;
import com.mapswithme.maps.base.BaseMwmRecyclerFragment;
import com.mapswithme.maps.editor.data.Language;
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Comparator;
+import java.util.HashSet;
+
+import static java.util.Collections.sort;
+
public class LanguagesFragment extends BaseMwmRecyclerFragment
{
public interface Listener
@@ -15,14 +23,30 @@ public class LanguagesFragment extends BaseMwmRecyclerFragment
@Override
protected RecyclerView.Adapter createAdapter()
{
- return new LanguagesAdapter(this, Editor.nativeGetSupportedLanguages());
+ Bundle args = getArguments();
+ HashSet<String> existingLanguages = new HashSet<>(Arrays.asList(args.getStringArray(EditorHostFragment.kExistingLocalizedNames)));
+
+ ArrayList<Language> languages = new ArrayList<>();
+ for (Language lang : Editor.nativeGetSupportedLanguages())
+ {
+ if (existingLanguages.contains(lang.code))
+ continue;
+ languages.add(lang);
+ }
+
+ sort(languages, new Comparator<Language>() {
+ @Override
+ public int compare(Language lhs, Language rhs) {
+ return lhs.name.compareTo(rhs.name);
+ }
+ });
+
+ return new LanguagesAdapter(this, languages.toArray(new Language[languages.size()]));
}
protected void onLanguageSelected(Language language)
{
- if (getActivity() instanceof Listener)
- ((Listener) getActivity()).onLanguageSelected(language);
- else if (getParentFragment() instanceof Listener)
+ if (getParentFragment() instanceof Listener)
((Listener) getParentFragment()).onLanguageSelected(language);
}
}
diff --git a/android/src/com/mapswithme/maps/editor/MultilanguageAdapter.java b/android/src/com/mapswithme/maps/editor/MultilanguageAdapter.java
index 72f5c692d4..46815455e8 100644
--- a/android/src/com/mapswithme/maps/editor/MultilanguageAdapter.java
+++ b/android/src/com/mapswithme/maps/editor/MultilanguageAdapter.java
@@ -1,9 +1,6 @@
package com.mapswithme.maps.editor;
-import android.support.v7.util.SortedList;
import android.support.v7.widget.RecyclerView;
-import android.support.v7.widget.util.SortedListAdapterCallback;
-import android.text.TextUtils;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -11,47 +8,33 @@ import android.widget.EditText;
import com.mapswithme.maps.R;
import com.mapswithme.maps.editor.data.LocalizedName;
+import com.mapswithme.util.UiUtils;
+
+import java.util.ArrayList;
public class MultilanguageAdapter extends RecyclerView.Adapter<MultilanguageAdapter.Holder>
{
- private SortedList<LocalizedName> mNames;
+ private ArrayList<LocalizedName> mNames;
+ private EditorHostFragment mHostFragment;
- MultilanguageAdapter(LocalizedName[] names)
+ // TODO(mgsergio): Refactor: don't pass the whole EditorHostFragment.
+ MultilanguageAdapter(EditorHostFragment hostFragment)
{
- mNames = new SortedList<>(LocalizedName.class,
- new SortedListAdapterCallback<LocalizedName>(this)
- {
- @Override
- public int compare(LocalizedName o1, LocalizedName o2)
- {
- return o1.lang.compareTo(o2.lang);
- }
-
- @Override
- public boolean areContentsTheSame(LocalizedName oldItem, LocalizedName newItem)
- {
- return TextUtils.equals(oldItem.name, newItem.name);
- }
-
- @Override
- public boolean areItemsTheSame(LocalizedName item1, LocalizedName item2)
- {
- return item1.code == item2.code;
- }
- },
- names.length);
+ mHostFragment = hostFragment;
+ mNames = new ArrayList<>();
+ ArrayList<LocalizedName> names = mHostFragment.getLocalizedNames();
- // skip default name
- for (int i = 1; i < names.length; i++)
- mNames.add(names[i]);
+ // Skip default name.
+ for (int i = 1; i < names.size(); i++)
+ mNames.add(names.get(i));
}
- public void setNames(SortedList<LocalizedName> names)
+ public void setNames(ArrayList<LocalizedName> names)
{
mNames = names;
}
- public SortedList<LocalizedName> getNames()
+ public ArrayList<LocalizedName> getNames()
{
return mNames;
}
@@ -60,6 +43,8 @@ public class MultilanguageAdapter extends RecyclerView.Adapter<MultilanguageAdap
public Holder onCreateViewHolder(ViewGroup parent, int viewType)
{
final View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item_localized_name, parent, false);
+ // TODO(mgsergio): Deletion is not implemented.
+ UiUtils.hide(view.findViewById(R.id.delete));
return new Holder(view);
}
@@ -72,10 +57,7 @@ public class MultilanguageAdapter extends RecyclerView.Adapter<MultilanguageAdap
}
@Override
- public int getItemCount()
- {
- return mNames.size();
- }
+ public int getItemCount() { return mNames.size(); }
public class Holder extends RecyclerView.ViewHolder
{
@@ -90,7 +72,11 @@ public class MultilanguageAdapter extends RecyclerView.Adapter<MultilanguageAdap
@Override
public void onClick(View v)
{
- mNames.removeItemAt(getAdapterPosition());
+ // TODO(mgsergio): Implement item deletion.
+ // int position = getAdapterPosition();
+ // mHostFragment.removeLocalizedName(position + 1);
+ // mNames.remove(position);
+ // notifyItemRemoved(position);
}
});
}