Improve code / xml formatting, closes #54

This commit is contained in:
Emux
2016-07-09 19:45:22 +03:00
parent 7919d0ab9c
commit e793e8851b
458 changed files with 58405 additions and 63062 deletions

View File

@@ -1,20 +0,0 @@
# To enable ProGuard in your project, edit project.properties
# to define the proguard.config property as described in that file.
#
# Add project specific ProGuard rules here.
# By default, the flags in this file are appended to flags specified
# in ${sdk.dir}/tools/proguard/proguard-android.txt
# You can edit the include path and order by changing the ProGuard
# include property in project.properties.
#
# For more details, see
# http://developer.android.com/guide/developing/tools/proguard.html
# Add any project specific keep options here:
# If your project uses WebView with JS, uncomment the following
# and specify the fully qualified class name to the JavaScript interface
# class:
#-keepclassmembers class fqcn.of.javascript.interface.for.webview {
# public *;
#}

View File

@@ -11,6 +11,4 @@
#proguard.config=${sdk.dir}/tools/proguard/proguard-android.txt:proguard-project.txt
# Project target.
target=android-21
android.library.reference.1=../vtm-android
android.library.reference.2=../appcompat
target=android-23

View File

@@ -1,4 +1,9 @@
<?xml version="1.0" encoding="UTF-8"?>
<GridView xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/filePickerView"
android:layout_width="fill_parent" android:layout_height="fill_parent" android:fadingEdge="vertical"
android:fadingEdgeLength="30dip" android:columnWidth="100dip" android:numColumns="auto_fit" />
<GridView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/filePickerView"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:fadingEdge="vertical"
android:fadingEdgeLength="30dip"
android:columnWidth="100dip"
android:numColumns="auto_fit" />

View File

@@ -1,7 +1,6 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:layout_height="match_parent">
<org.oscim.android.MapView
android:id="@+id/mapView"

View File

@@ -1,18 +1,16 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:layout_height="match_parent">
<org.oscim.android.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</org.oscim.android.MapView>
android:layout_height="fill_parent"></org.oscim.android.MapView>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical" >
android:orientation="vertical">
<ToggleButton
android:id="@+id/toggleControls"
@@ -31,7 +29,7 @@
android:paddingLeft="10dp"
android:paddingRight="10dp"
android:paddingTop="10dp"
android:visibility="gone" >
android:visibility="gone">
<SeekBar
android:id="@+id/seekBarS"
@@ -56,10 +54,10 @@
android:paddingTop="10dp" />
<RadioGroup
android:layout_width="fill_parent"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="horizontal" >
android:orientation="horizontal">
<RadioButton
android:id="@+id/checkBoxLine"

View File

@@ -1,7 +1,12 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/samples" android:layout_width="fill_parent" android:layout_height="wrap_content"
android:orientation="vertical" android:gravity="center_horizontal" />
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:id="@+id/samples"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:gravity="center_horizontal" />
</ScrollView>

View File

@@ -1,13 +1,11 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent" >
android:layout_height="match_parent">
<org.oscim.android.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</org.oscim.android.MapView>
android:layout_height="fill_parent"></org.oscim.android.MapView>
<LinearLayout
android:layout_width="wrap_content"
@@ -15,7 +13,7 @@
android:layout_alignParentRight="true"
android:alpha="0.7"
android:gravity="center"
android:orientation="vertical" >
android:orientation="vertical">
<ToggleButton
android:id="@+id/level7"

View File

@@ -1,5 +1,6 @@
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<item android:id="@+id/menu_settings"
<item
android:id="@+id/menu_settings"
android:title="@string/menu_settings"
android:orderInCategory="100"
android:showAsAction="never" />

View File

@@ -1,37 +1,32 @@
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android" >
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group
android:id="@+id/themes"
android:checkableBehavior="single" >
android:checkableBehavior="single">
<item
android:id="@+id/theme_default"
android:checked="true"
android:showAsAction="never"
android:title="@string/theme_default">
</item>
android:title="@string/theme_default"></item>
<item
android:id="@+id/theme_tubes"
android:showAsAction="never"
android:title="@string/theme_tubes">
</item>
android:title="@string/theme_tubes"></item>
<item
android:id="@+id/theme_osmarender"
android:showAsAction="never"
android:title="@string/theme_osmarender">
</item>
android:title="@string/theme_osmarender"></item>
<item
android:id="@+id/theme_newtron"
android:showAsAction="never"
android:title="@string/theme_newtron">
</item>
android:title="@string/theme_newtron"></item>
</group>
<item
android:id="@+id/gridlayer"
android:showAsAction="never"
android:checkable="true"
android:title="@string/menu_gridlayer">
</item>
android:title="@string/menu_gridlayer"></item>
</menu>

View File

@@ -14,13 +14,6 @@
*/
package org.oscim.android.filepicker;
import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
import java.util.Comparator;
import org.oscim.android.test.R;
import android.app.Activity;
import android.app.AlertDialog;
import android.app.Dialog;
@@ -32,6 +25,13 @@ import android.view.View;
import android.widget.AdapterView;
import android.widget.GridView;
import org.oscim.android.test.R;
import java.io.File;
import java.io.FileFilter;
import java.util.Arrays;
import java.util.Comparator;
/**
* A FilePicker displays the contents of directories. The user can navigate
* within the file system and select a single
@@ -40,211 +40,208 @@ import android.widget.GridView;
* {@link #setFileComparator(Comparator)}. By default subfolders and files are
* grouped and each group is ordered
* alphabetically.
* <p>
* <p/>
* A {@link FileFilter} can be activated via
* {@link #setFileDisplayFilter(FileFilter)} to restrict the displayed files and
* folders. By default all files and folders are visible.
* <p>
* <p/>
* Another <code>FileFilter</code> can be applied via
* {@link #setFileSelectFilter(ValidFileFilter)} to check if a selected file is
* valid before its path is returned. By default all files are considered as
* valid and can be selected.
*/
public class FilePicker extends Activity implements AdapterView.OnItemClickListener {
/**
* The name of the extra data in the result {@link Intent}.
*/
public static final String SELECTED_FILE = "selectedFile";
/**
* The name of the extra data in the result {@link Intent}.
*/
public static final String SELECTED_FILE = "selectedFile";
private static final String PREFERENCES_FILE = "FilePicker";
private static final String CURRENT_DIRECTORY = "currentDirectory";
private static final String DEFAULT_DIRECTORY = "/";
private static final int DIALOG_FILE_INVALID = 0;
private static final String PREFERENCES_FILE = "FilePicker";
private static final String CURRENT_DIRECTORY = "currentDirectory";
private static final String DEFAULT_DIRECTORY = "/";
private static final int DIALOG_FILE_INVALID = 0;
// private static final int DIALOG_FILE_SELECT = 1;
protected Comparator<File> mFileComparator = getDefaultFileComparator();
protected FileFilter mFileDisplayFilter;
protected ValidFileFilter mFileSelectFilter;
// private static final int DIALOG_FILE_SELECT = 1;
protected Comparator<File> mFileComparator = getDefaultFileComparator();
protected FileFilter mFileDisplayFilter;
protected ValidFileFilter mFileSelectFilter;
/**
* Sets the file comparator which is used to order the contents of all
* directories before displaying them. If set to
* null, subfolders and files will not be ordered.
*
* @param fileComparator
* the file comparator (may be null).
*/
public void setFileComparator(Comparator<File> fileComparator) {
mFileComparator = fileComparator;
}
/**
* Sets the file comparator which is used to order the contents of all
* directories before displaying them. If set to
* null, subfolders and files will not be ordered.
*
* @param fileComparator the file comparator (may be null).
*/
public void setFileComparator(Comparator<File> fileComparator) {
mFileComparator = fileComparator;
}
/**
* Sets the file display filter. This filter is used to determine which
* files and subfolders of directories will be
* displayed. If set to null, all files and subfolders are shown.
*
* @param fileDisplayFilter
* the file display filter (may be null).
*/
public void setFileDisplayFilter(FileFilter fileDisplayFilter) {
mFileDisplayFilter = fileDisplayFilter;
}
/**
* Sets the file display filter. This filter is used to determine which
* files and subfolders of directories will be
* displayed. If set to null, all files and subfolders are shown.
*
* @param fileDisplayFilter the file display filter (may be null).
*/
public void setFileDisplayFilter(FileFilter fileDisplayFilter) {
mFileDisplayFilter = fileDisplayFilter;
}
/**
* Sets the file select filter. This filter is used when the user selects a
* file to determine if it is valid. If set
* to null, all files are considered as valid.
*
* @param fileSelectFilter
* the file selection filter (may be null).
*/
public void setFileSelectFilter(ValidFileFilter fileSelectFilter) {
mFileSelectFilter = fileSelectFilter;
}
/**
* Sets the file select filter. This filter is used when the user selects a
* file to determine if it is valid. If set
* to null, all files are considered as valid.
*
* @param fileSelectFilter the file selection filter (may be null).
*/
public void setFileSelectFilter(ValidFileFilter fileSelectFilter) {
mFileSelectFilter = fileSelectFilter;
}
/**
* Creates the default file comparator.
*
* @return the default file comparator.
*/
private static Comparator<File> getDefaultFileComparator() {
// order all files by type and alphabetically by name
return new Comparator<File>() {
@Override
public int compare(File file1, File file2) {
if (file1.isDirectory() && !file2.isDirectory()) {
return -1;
} else if (!file1.isDirectory() && file2.isDirectory()) {
return 1;
} else {
return file1.getName().compareToIgnoreCase(file2.getName());
}
}
};
}
/**
* Creates the default file comparator.
*
* @return the default file comparator.
*/
private static Comparator<File> getDefaultFileComparator() {
// order all files by type and alphabetically by name
return new Comparator<File>() {
@Override
public int compare(File file1, File file2) {
if (file1.isDirectory() && !file2.isDirectory()) {
return -1;
} else if (!file1.isDirectory() && file2.isDirectory()) {
return 1;
} else {
return file1.getName().compareToIgnoreCase(file2.getName());
}
}
};
}
private File mDirectory;
private FilePickerIconAdapter mFilePickerIconAdapter;
private File[] mFiles;
private File[] mFilesWithParentFolder;
private File mDirectory;
private FilePickerIconAdapter mFilePickerIconAdapter;
private File[] mFiles;
private File[] mFilesWithParentFolder;
@SuppressWarnings("deprecation")
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
File selectedFile = mFiles[(int) id];
if (selectedFile.isDirectory()) {
mDirectory = selectedFile;
browseToCurrentDirectory();
} else if (mFileSelectFilter == null || mFileSelectFilter.accept(selectedFile)) {
setResult(RESULT_OK,
new Intent().putExtra(SELECTED_FILE, selectedFile.getAbsolutePath()));
finish();
} else {
showDialog(DIALOG_FILE_INVALID);
}
}
@SuppressWarnings("deprecation")
@Override
public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
File selectedFile = mFiles[(int) id];
if (selectedFile.isDirectory()) {
mDirectory = selectedFile;
browseToCurrentDirectory();
} else if (mFileSelectFilter == null || mFileSelectFilter.accept(selectedFile)) {
setResult(RESULT_OK,
new Intent().putExtra(SELECTED_FILE, selectedFile.getAbsolutePath()));
finish();
} else {
showDialog(DIALOG_FILE_INVALID);
}
}
/**
* Browses to the current directory.
*/
private void browseToCurrentDirectory() {
setTitle(mDirectory.getAbsolutePath());
/**
* Browses to the current directory.
*/
private void browseToCurrentDirectory() {
setTitle(mDirectory.getAbsolutePath());
// read the subfolders and files from the current directory
if (mFileDisplayFilter == null) {
mFiles = mDirectory.listFiles();
} else {
mFiles = mDirectory.listFiles(mFileDisplayFilter);
}
// read the subfolders and files from the current directory
if (mFileDisplayFilter == null) {
mFiles = mDirectory.listFiles();
} else {
mFiles = mDirectory.listFiles(mFileDisplayFilter);
}
if (mFiles == null) {
mFiles = new File[0];
} else {
// order the subfolders and files
Arrays.sort(mFiles, mFileComparator);
}
if (mFiles == null) {
mFiles = new File[0];
} else {
// order the subfolders and files
Arrays.sort(mFiles, mFileComparator);
}
// if a parent directory exists, add it at the first position
if (mDirectory.getParentFile() != null) {
mFilesWithParentFolder = new File[mFiles.length + 1];
mFilesWithParentFolder[0] = mDirectory.getParentFile();
System.arraycopy(mFiles, 0, mFilesWithParentFolder, 1,
mFiles.length);
mFiles = mFilesWithParentFolder;
mFilePickerIconAdapter.setFiles(mFiles, true);
} else {
mFilePickerIconAdapter.setFiles(mFiles, false);
}
mFilePickerIconAdapter.notifyDataSetChanged();
}
// if a parent directory exists, add it at the first position
if (mDirectory.getParentFile() != null) {
mFilesWithParentFolder = new File[mFiles.length + 1];
mFilesWithParentFolder[0] = mDirectory.getParentFile();
System.arraycopy(mFiles, 0, mFilesWithParentFolder, 1,
mFiles.length);
mFiles = mFilesWithParentFolder;
mFilePickerIconAdapter.setFiles(mFiles, true);
} else {
mFilePickerIconAdapter.setFiles(mFiles, false);
}
mFilePickerIconAdapter.notifyDataSetChanged();
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_picker);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_file_picker);
mFilePickerIconAdapter = new FilePickerIconAdapter(this);
GridView gridView = (GridView) findViewById(R.id.filePickerView);
gridView.setOnItemClickListener(this);
gridView.setAdapter(mFilePickerIconAdapter);
mFilePickerIconAdapter = new FilePickerIconAdapter(this);
GridView gridView = (GridView) findViewById(R.id.filePickerView);
gridView.setOnItemClickListener(this);
gridView.setAdapter(mFilePickerIconAdapter);
// if (savedInstanceState == null) {
// // first start of this instance
// showDialog(DIALOG_FILE_SELECT);
// }
}
// if (savedInstanceState == null) {
// // first start of this instance
// showDialog(DIALOG_FILE_SELECT);
// }
}
@Override
protected Dialog onCreateDialog(int id) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
switch (id) {
case DIALOG_FILE_INVALID:
builder.setIcon(android.R.drawable.ic_menu_info_details);
builder.setTitle(R.string.error);
@Override
protected Dialog onCreateDialog(int id) {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
switch (id) {
case DIALOG_FILE_INVALID:
builder.setIcon(android.R.drawable.ic_menu_info_details);
builder.setTitle(R.string.error);
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(getString(R.string.file_invalid));
stringBuilder.append("\n\n");
stringBuilder.append(mFileSelectFilter.getFileOpenResult()
.getErrorMessage());
StringBuilder stringBuilder = new StringBuilder();
stringBuilder.append(getString(R.string.file_invalid));
stringBuilder.append("\n\n");
stringBuilder.append(mFileSelectFilter.getFileOpenResult()
.getErrorMessage());
builder.setMessage(stringBuilder.toString());
builder.setPositiveButton(R.string.ok, null);
return builder.create();
// case DIALOG_FILE_SELECT:
// builder.setMessage(R.string.file_select);
// builder.setPositiveButton(R.string.ok, null);
// return builder.create();
default:
// do dialog will be created
return null;
}
}
builder.setMessage(stringBuilder.toString());
builder.setPositiveButton(R.string.ok, null);
return builder.create();
// case DIALOG_FILE_SELECT:
// builder.setMessage(R.string.file_select);
// builder.setPositiveButton(R.string.ok, null);
// return builder.create();
default:
// do dialog will be created
return null;
}
}
@Override
protected void onPause() {
super.onPause();
// save the current directory
Editor editor = getSharedPreferences(PREFERENCES_FILE, MODE_PRIVATE).edit();
editor.clear();
if (mDirectory != null) {
editor.putString(CURRENT_DIRECTORY, mDirectory.getAbsolutePath());
}
editor.commit();
}
@Override
protected void onPause() {
super.onPause();
// save the current directory
Editor editor = getSharedPreferences(PREFERENCES_FILE, MODE_PRIVATE).edit();
editor.clear();
if (mDirectory != null) {
editor.putString(CURRENT_DIRECTORY, mDirectory.getAbsolutePath());
}
editor.commit();
}
@Override
protected void onResume() {
super.onResume();
@Override
protected void onResume() {
super.onResume();
// restore the current directory
SharedPreferences preferences = getSharedPreferences(PREFERENCES_FILE,
MODE_PRIVATE);
mDirectory = new File(preferences.getString(CURRENT_DIRECTORY,
DEFAULT_DIRECTORY));
if (!mDirectory.exists() || !mDirectory.canRead()) {
mDirectory = new File(DEFAULT_DIRECTORY);
}
browseToCurrentDirectory();
}
// restore the current directory
SharedPreferences preferences = getSharedPreferences(PREFERENCES_FILE,
MODE_PRIVATE);
mDirectory = new File(preferences.getString(CURRENT_DIRECTORY,
DEFAULT_DIRECTORY));
if (!mDirectory.exists() || !mDirectory.canRead()) {
mDirectory = new File(DEFAULT_DIRECTORY);
}
browseToCurrentDirectory();
}
}

View File

@@ -14,10 +14,6 @@
*/
package org.oscim.android.filepicker;
import java.io.File;
import org.oscim.android.test.R;
import android.content.Context;
import android.view.Gravity;
import android.view.View;
@@ -25,92 +21,93 @@ import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
import org.oscim.android.test.R;
import java.io.File;
/**
* An adapter for the FilePicker GridView.
*/
class FilePickerIconAdapter extends BaseAdapter {
private final Context mContext;
private File mCurrentFile;
private File[] mFiles;
private boolean mHasParentFolder;
private TextView mTextView;
private final Context mContext;
private File mCurrentFile;
private File[] mFiles;
private boolean mHasParentFolder;
private TextView mTextView;
/**
* Creates a new FilePickerIconAdapter with the given context.
*
* @param context
* the context of this adapter, through which new Views are
* created.
*/
FilePickerIconAdapter(Context context) {
super();
mContext = context;
}
/**
* Creates a new FilePickerIconAdapter with the given context.
*
* @param context the context of this adapter, through which new Views are
* created.
*/
FilePickerIconAdapter(Context context) {
super();
mContext = context;
}
@Override
public int getCount() {
if (mFiles == null) {
return 0;
}
return mFiles.length;
}
@Override
public int getCount() {
if (mFiles == null) {
return 0;
}
return mFiles.length;
}
@Override
public Object getItem(int index) {
return mFiles[index];
}
@Override
public Object getItem(int index) {
return mFiles[index];
}
@Override
public long getItemId(int index) {
return index;
}
@Override
public long getItemId(int index) {
return index;
}
@Override
public View getView(int index, View convertView, ViewGroup parent) {
if (convertView instanceof TextView) {
// recycle the old view
mTextView = (TextView) convertView;
} else {
// create a new view object
mTextView = new TextView(mContext);
mTextView.setLines(2);
mTextView.setGravity(Gravity.CENTER_HORIZONTAL);
mTextView.setPadding(5, 10, 5, 10);
}
@Override
public View getView(int index, View convertView, ViewGroup parent) {
if (convertView instanceof TextView) {
// recycle the old view
mTextView = (TextView) convertView;
} else {
// create a new view object
mTextView = new TextView(mContext);
mTextView.setLines(2);
mTextView.setGravity(Gravity.CENTER_HORIZONTAL);
mTextView.setPadding(5, 10, 5, 10);
}
if (index == 0 && mHasParentFolder) {
// the parent directory of the current folder
mTextView.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.file_picker_back, 0, 0);
mTextView.setText("..");
} else {
mCurrentFile = mFiles[index];
if (mCurrentFile.isDirectory()) {
mTextView.setCompoundDrawablesWithIntrinsicBounds(0,
R.drawable.file_picker_folder,
0,
0);
} else {
mTextView.setCompoundDrawablesWithIntrinsicBounds(0,
R.drawable.file_picker_file,
0,
0);
}
mTextView.setText(mCurrentFile.getName());
}
return mTextView;
}
if (index == 0 && mHasParentFolder) {
// the parent directory of the current folder
mTextView.setCompoundDrawablesWithIntrinsicBounds(0, R.drawable.file_picker_back, 0, 0);
mTextView.setText("..");
} else {
mCurrentFile = mFiles[index];
if (mCurrentFile.isDirectory()) {
mTextView.setCompoundDrawablesWithIntrinsicBounds(0,
R.drawable.file_picker_folder,
0,
0);
} else {
mTextView.setCompoundDrawablesWithIntrinsicBounds(0,
R.drawable.file_picker_file,
0,
0);
}
mTextView.setText(mCurrentFile.getName());
}
return mTextView;
}
/**
* Sets the data of this adapter.
*
* @param files
* the new files for this adapter.
* @param newHasParentFolder
* true if the file array has a parent folder at index 0, false
* otherwise.
*/
void setFiles(File[] files, boolean newHasParentFolder) {
mFiles = files.clone();
mHasParentFolder = newHasParentFolder;
}
/**
* Sets the data of this adapter.
*
* @param files the new files for this adapter.
* @param newHasParentFolder true if the file array has a parent folder at index 0, false
* otherwise.
*/
void setFiles(File[] files, boolean newHasParentFolder) {
mFiles = files.clone();
mHasParentFolder = newHasParentFolder;
}
}

View File

@@ -22,27 +22,26 @@ import java.io.FileFilter;
* extension.
*/
public class FilterByFileExtension implements FileFilter {
private final String mExtension;
private final String mExtension;
/**
* @param extension
* the allowed file name extension.
*/
public FilterByFileExtension(String extension) {
mExtension = extension;
}
/**
* @param extension the allowed file name extension.
*/
public FilterByFileExtension(String extension) {
mExtension = extension;
}
@Override
public boolean accept(File file) {
// accept only readable files
if (file.canRead()) {
if (file.isDirectory()) {
// accept all directories
return true;
} else if (file.isFile() && file.getName().endsWith(mExtension)) {
return true;
}
}
return false;
}
@Override
public boolean accept(File file) {
// accept only readable files
if (file.canRead()) {
if (file.isDirectory()) {
// accept all directories
return true;
} else if (file.isFile() && file.getName().endsWith(mExtension)) {
return true;
}
}
return false;
}
}

View File

@@ -14,16 +14,16 @@
*/
package org.oscim.android.filepicker;
import java.io.FileFilter;
import org.oscim.tiling.TileSource.OpenResult;
import java.io.FileFilter;
/**
* An extension of the {@link FileFilter} interface.
*/
public interface ValidFileFilter extends FileFilter {
/**
* @return the result of the last {@link #accept} call (might be null).
*/
OpenResult getFileOpenResult();
/**
* @return the result of the last {@link #accept} call (might be null).
*/
OpenResult getFileOpenResult();
}

View File

@@ -14,29 +14,29 @@
*/
package org.oscim.android.filepicker;
import java.io.File;
import org.oscim.tiling.TileSource.OpenResult;
import org.oscim.tiling.source.mapfile.MapFileTileSource;
import java.io.File;
/**
* Accepts all valid map files.
*/
public final class ValidMapFile implements ValidFileFilter {
private OpenResult mOpenResult;
private OpenResult mOpenResult;
@Override
public boolean accept(File file) {
MapFileTileSource mapFileSource = new MapFileTileSource();
mapFileSource.setMapFile(file.getAbsolutePath());
@Override
public boolean accept(File file) {
MapFileTileSource mapFileSource = new MapFileTileSource();
mapFileSource.setMapFile(file.getAbsolutePath());
this.mOpenResult = mapFileSource.open();
mapFileSource.close();
return mOpenResult.isSuccess();
}
this.mOpenResult = mapFileSource.open();
mapFileSource.close();
return mOpenResult.isSuccess();
}
@Override
public OpenResult getFileOpenResult() {
return mOpenResult;
}
@Override
public OpenResult getFileOpenResult() {
return mOpenResult;
}
}

View File

@@ -14,6 +14,12 @@
*/
package org.oscim.android.filepicker;
import org.oscim.theme.XmlThemeBuilder;
import org.oscim.tiling.TileSource.OpenResult;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
@@ -22,50 +28,44 @@ import java.io.InputStream;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.parsers.SAXParserFactory;
import org.oscim.theme.XmlThemeBuilder;
import org.oscim.tiling.TileSource.OpenResult;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import org.xml.sax.XMLReader;
/**
* Accepts all valid render theme XML files.
*/
public final class ValidRenderTheme implements ValidFileFilter {
private OpenResult mOpenResult;
private OpenResult mOpenResult;
@Override
public boolean accept(File file) {
InputStream inputStream = null;
@Override
public boolean accept(File file) {
InputStream inputStream = null;
try {
inputStream = new FileInputStream(file);
XmlThemeBuilder renderThemeHandler = new XmlThemeBuilder();
XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
xmlReader.setContentHandler(renderThemeHandler);
xmlReader.parse(new InputSource(inputStream));
mOpenResult = OpenResult.SUCCESS;
} catch (ParserConfigurationException e) {
mOpenResult = new OpenResult(e.getMessage());
} catch (SAXException e) {
mOpenResult = new OpenResult(e.getMessage());
} catch (IOException e) {
mOpenResult = new OpenResult(e.getMessage());
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException e) {
mOpenResult = new OpenResult(e.getMessage());
}
}
try {
inputStream = new FileInputStream(file);
XmlThemeBuilder renderThemeHandler = new XmlThemeBuilder();
XMLReader xmlReader = SAXParserFactory.newInstance().newSAXParser().getXMLReader();
xmlReader.setContentHandler(renderThemeHandler);
xmlReader.parse(new InputSource(inputStream));
mOpenResult = OpenResult.SUCCESS;
} catch (ParserConfigurationException e) {
mOpenResult = new OpenResult(e.getMessage());
} catch (SAXException e) {
mOpenResult = new OpenResult(e.getMessage());
} catch (IOException e) {
mOpenResult = new OpenResult(e.getMessage());
} finally {
try {
if (inputStream != null) {
inputStream.close();
}
} catch (IOException e) {
mOpenResult = new OpenResult(e.getMessage());
}
}
return mOpenResult.isSuccess();
}
return mOpenResult.isSuccess();
}
@Override
public OpenResult getFileOpenResult() {
return mOpenResult;
}
@Override
public OpenResult getFileOpenResult() {
return mOpenResult;
}
}

View File

@@ -16,6 +16,10 @@
*/
package org.oscim.android.test;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import org.oscim.android.cache.TileCache;
import org.oscim.core.MapPosition;
import org.oscim.layers.TileGridLayer;
@@ -26,101 +30,97 @@ import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class BaseMapActivity extends MapActivity {
static final Logger log = LoggerFactory.getLogger(BaseMapActivity.class);
static final Logger log = LoggerFactory.getLogger(BaseMapActivity.class);
final static boolean USE_CACHE = true;
final static boolean USE_CACHE = true;
VectorTileLayer mBaseLayer;
TileSource mTileSource;
TileGridLayer mGridLayer;
VectorTileLayer mBaseLayer;
TileSource mTileSource;
TileGridLayer mGridLayer;
private TileCache mCache;
private TileCache mCache;
public BaseMapActivity(int contentView) {
super(contentView);
}
public BaseMapActivity(int contentView) {
super(contentView);
}
public BaseMapActivity() {
}
public BaseMapActivity() {
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mTileSource = new OSciMap4TileSource();
mTileSource = new OSciMap4TileSource();
if (USE_CACHE) {
mCache = new TileCache(this, null, "tile.db");
mCache.setCacheSize(512 * (1 << 10));
mTileSource.setCache(mCache);
}
mBaseLayer = mMap.setBaseMap(mTileSource);
if (USE_CACHE) {
mCache = new TileCache(this, null, "tile.db");
mCache.setCacheSize(512 * (1 << 10));
mTileSource.setCache(mCache);
}
mBaseLayer = mMap.setBaseMap(mTileSource);
/* set initial position on first run */
MapPosition pos = new MapPosition();
mMap.getMapPosition(pos);
if (pos.x == 0.5 && pos.y == 0.5)
mMap.setMapPosition(53.08, 8.83, Math.pow(2, 16));
}
MapPosition pos = new MapPosition();
mMap.getMapPosition(pos);
if (pos.x == 0.5 && pos.y == 0.5)
mMap.setMapPosition(53.08, 8.83, Math.pow(2, 16));
}
@Override
protected void onDestroy() {
super.onDestroy();
@Override
protected void onDestroy() {
super.onDestroy();
if (mCache != null)
mCache.dispose();
}
if (mCache != null)
mCache.dispose();
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.theme_default:
mMap.setTheme(VtmThemes.DEFAULT);
item.setChecked(true);
return true;
switch (item.getItemId()) {
case R.id.theme_default:
mMap.setTheme(VtmThemes.DEFAULT);
item.setChecked(true);
return true;
case R.id.theme_tubes:
mMap.setTheme(VtmThemes.TRONRENDER);
item.setChecked(true);
return true;
case R.id.theme_tubes:
mMap.setTheme(VtmThemes.TRONRENDER);
item.setChecked(true);
return true;
case R.id.theme_osmarender:
mMap.setTheme(VtmThemes.OSMARENDER);
item.setChecked(true);
return true;
case R.id.theme_osmarender:
mMap.setTheme(VtmThemes.OSMARENDER);
item.setChecked(true);
return true;
case R.id.theme_newtron:
mMap.setTheme(VtmThemes.NEWTRON);
item.setChecked(true);
return true;
case R.id.theme_newtron:
mMap.setTheme(VtmThemes.NEWTRON);
item.setChecked(true);
return true;
case R.id.gridlayer:
if (item.isChecked()) {
item.setChecked(false);
mMap.layers().remove(mGridLayer);
} else {
item.setChecked(true);
if (mGridLayer == null)
mGridLayer = new TileGridLayer(mMap);
case R.id.gridlayer:
if (item.isChecked()) {
item.setChecked(false);
mMap.layers().remove(mGridLayer);
} else {
item.setChecked(true);
if (mGridLayer == null)
mGridLayer = new TileGridLayer(mMap);
mMap.layers().add(mGridLayer);
}
mMap.updateMap(true);
return true;
}
mMap.layers().add(mGridLayer);
}
mMap.updateMap(true);
return true;
}
return false;
}
return false;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.theme_menu, menu);
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.theme_menu, menu);
return true;
}
}

View File

@@ -14,6 +14,8 @@
*/
package org.oscim.android.test;
import android.os.Bundle;
import org.oscim.android.cache.TileCache;
import org.oscim.backend.canvas.Color;
import org.oscim.core.MapPosition;
@@ -26,92 +28,90 @@ import org.oscim.tiling.source.bitmap.DefaultSources;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import android.os.Bundle;
public class BitmapTileMapActivity extends MapActivity {
static final Logger log = LoggerFactory.getLogger(BitmapTileMapActivity.class);
static final Logger log = LoggerFactory.getLogger(BitmapTileMapActivity.class);
private final static boolean USE_CACHE = true;
private final static boolean USE_CACHE = true;
private final BitmapTileSource mTileSource;
protected BitmapTileLayer mBitmapLayer;
private final BitmapTileSource mTileSource;
protected BitmapTileLayer mBitmapLayer;
public BitmapTileMapActivity() {
this(DefaultSources.OPENSTREETMAP.build());
}
public BitmapTileMapActivity() {
this(DefaultSources.OPENSTREETMAP.build());
}
public BitmapTileMapActivity(BitmapTileSource tileSource) {
super(R.layout.activity_map);
mTileSource = tileSource;
}
public BitmapTileMapActivity(BitmapTileSource tileSource) {
super(R.layout.activity_map);
mTileSource = tileSource;
}
private TileCache mCache;
private TileCache mCache;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
MapRenderer.setBackgroundColor(0xff777777);
mMap.layers().add(new TileGridLayer(mMap, Color.GRAY, 1.8f, 8));
MapRenderer.setBackgroundColor(0xff777777);
mMap.layers().add(new TileGridLayer(mMap, Color.GRAY, 1.8f, 8));
if (mTileSource == null)
return;
if (mTileSource == null)
return;
if (USE_CACHE) {
String cacheFile = mTileSource.getUrl()
.toString()
.replaceFirst("https?://", "")
.replaceAll("/", "-");
if (USE_CACHE) {
String cacheFile = mTileSource.getUrl()
.toString()
.replaceFirst("https?://", "")
.replaceAll("/", "-");
log.debug("use bitmap cache {}", cacheFile);
mCache = new TileCache(this, null, cacheFile);
mCache.setCacheSize(512 * (1 << 10));
mTileSource.setCache(mCache);
}
log.debug("use bitmap cache {}", cacheFile);
mCache = new TileCache(this, null, cacheFile);
mCache.setCacheSize(512 * (1 << 10));
mTileSource.setCache(mCache);
}
mBitmapLayer = new BitmapTileLayer(mMap, mTileSource);
mMap.layers().add(mBitmapLayer);
mBitmapLayer = new BitmapTileLayer(mMap, mTileSource);
mMap.layers().add(mBitmapLayer);
//loooop(1);
}
//loooop(1);
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mCache != null)
mCache.dispose();
}
@Override
protected void onDestroy() {
super.onDestroy();
if (mCache != null)
mCache.dispose();
}
// Stress testing
void loooop(final int i) {
final long time = (long) (500 + Math.random() * 1000);
mMapView.postDelayed(new Runnable() {
@Override
public void run() {
// Stress testing
void loooop(final int i) {
final long time = (long) (500 + Math.random() * 1000);
mMapView.postDelayed(new Runnable() {
@Override
public void run() {
MapPosition p = new MapPosition();
if (i == 1) {
mMapView.map().getMapPosition(p);
p.setScale(4);
mMapView.map().animator().animateTo(time, p);
} else {
//mMapView.map().setMapPosition(p);
p.setScale(2 + (1 << (int) (Math.random() * 13)));
// p.setX((p.getX() + (Math.random() * 4 - 2) / p.getScale()));
// p.setY((p.getY() + (Math.random() * 4 - 2) / p.getScale()));
p.setX(MercatorProjection.longitudeToX(Math.random() * 180));
p.setY(MercatorProjection.latitudeToY(Math.random() * 60));
MapPosition p = new MapPosition();
if (i == 1) {
mMapView.map().getMapPosition(p);
p.setScale(4);
mMapView.map().animator().animateTo(time, p);
} else {
//mMapView.map().setMapPosition(p);
p.setScale(2 + (1 << (int) (Math.random() * 13)));
// p.setX((p.getX() + (Math.random() * 4 - 2) / p.getScale()));
// p.setY((p.getY() + (Math.random() * 4 - 2) / p.getScale()));
p.setX(MercatorProjection.longitudeToX(Math.random() * 180));
p.setY(MercatorProjection.latitudeToY(Math.random() * 60));
p.setTilt((float) (Math.random() * 60));
p.setBearing((float) (Math.random() * 360));
//mMapView.map().setMapPosition(p);
p.setTilt((float) (Math.random() * 60));
p.setBearing((float) (Math.random() * 360));
//mMapView.map().setMapPosition(p);
mMapView.map().animator().animateTo(time, p);
}
loooop((i + 1) % 2);
mMapView.map().animator().animateTo(time, p);
}
loooop((i + 1) % 2);
}
}, time);
}
}
}, time);
}
}

View File

@@ -16,14 +16,14 @@
*/
package org.oscim.android.test;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import android.widget.ToggleButton;
import org.jeo.vector.VectorDataset;
import org.jeo.map.Style;
import org.jeo.vector.VectorDataset;
import org.oscim.layers.OSMIndoorLayer;
import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.vector.labeling.LabelLayer;
@@ -33,146 +33,146 @@ import org.oscim.utils.IOUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import android.content.Context;
import android.os.Bundle;
import android.view.View;
import android.widget.Toast;
import android.widget.ToggleButton;
import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection;
import java.util.Arrays;
public class JeoIndoorMapActivity extends BaseMapActivity {
public static final Logger log = LoggerFactory.getLogger(JeoIndoorMapActivity.class);
public static final Logger log = LoggerFactory.getLogger(JeoIndoorMapActivity.class);
// from http://overpass-turbo.eu/s/2vp
String PATH = "https://gist.github.com/anonymous/8960337/raw/overpass.geojson";
//String PATH = "https://gist.github.com/hjanetzek/9280925/raw/overpass.geojson";
// from http://overpass-turbo.eu/s/2vp
String PATH = "https://gist.github.com/anonymous/8960337/raw/overpass.geojson";
//String PATH = "https://gist.github.com/hjanetzek/9280925/raw/overpass.geojson";
private OSMIndoorLayer mIndoorLayer;
private OSMIndoorLayer mIndoorLayer;
public JeoIndoorMapActivity() {
super(R.layout.jeo_indoor_map);
}
public JeoIndoorMapActivity() {
super(R.layout.jeo_indoor_map);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMap.addTask(new Runnable() {
@Override
public void run() {
showToast("load data");
InputStream is = null;
try {
// File file = new File(Environment.getExternalStorageDirectory()
// .getAbsolutePath(), "osmindoor.json");
// is = new FileInputStream(file);
mMap.addTask(new Runnable() {
@Override
public void run() {
showToast("load data");
InputStream is = null;
try {
// File file = new File(Environment.getExternalStorageDirectory()
// .getAbsolutePath(), "osmindoor.json");
// is = new FileInputStream(file);
URL url = new URL(PATH);
URLConnection conn = url.openConnection();
is = conn.getInputStream();
loadJson(is);
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(is);
}
}
});
URL url = new URL(PATH);
URLConnection conn = url.openConnection();
is = conn.getInputStream();
loadJson(is);
} catch (IOException e) {
e.printStackTrace();
} finally {
IOUtils.closeQuietly(is);
}
}
});
mMap.setTheme(VtmThemes.DEFAULT);
mMap.setTheme(VtmThemes.DEFAULT);
mMap.layers().add(new BuildingLayer(mMap, mBaseLayer));
mMap.layers().add(new LabelLayer(mMap, mBaseLayer));
mMap.layers().add(new BuildingLayer(mMap, mBaseLayer));
mMap.layers().add(new LabelLayer(mMap, mBaseLayer));
// mMap.layers().add(new TileGridLayer(mMap));
// String file = Environment.getExternalStorageDirectory().getAbsolutePath();
// VectorDataset data = (VectorDataset) JeoTest.getJsonData(file + "/states.json", true);
// Style style = JeoTest.getStyle();
// mMap.layers().add(new JeoVectorLayer(mMap, data, style));
}
// mMap.layers().add(new TileGridLayer(mMap));
// String file = Environment.getExternalStorageDirectory().getAbsolutePath();
// VectorDataset data = (VectorDataset) JeoTest.getJsonData(file + "/states.json", true);
// Style style = JeoTest.getStyle();
// mMap.layers().add(new JeoVectorLayer(mMap, data, style));
}
void loadJson(InputStream is) {
showToast("got data");
void loadJson(InputStream is) {
showToast("got data");
VectorDataset data = JeoTest.readGeoJson(is);
Style style = JeoTest.getStyle();
mIndoorLayer = new OSMIndoorLayer(mMap, data, style);
mMap.layers().add(mIndoorLayer);
VectorDataset data = JeoTest.readGeoJson(is);
Style style = JeoTest.getStyle();
mIndoorLayer = new OSMIndoorLayer(mMap, data, style);
mMap.layers().add(mIndoorLayer);
showToast("data ready");
mMap.updateMap(true);
showToast("data ready");
mMap.updateMap(true);
mIndoorLayer.activeLevels[0] = true;
shift();
}
mIndoorLayer.activeLevels[0] = true;
shift();
}
public void showToast(final String text) {
final Context ctx = this;
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast toast = Toast.makeText(ctx, text, Toast.LENGTH_SHORT);
toast.show();
}
});
}
public void showToast(final String text) {
final Context ctx = this;
runOnUiThread(new Runnable() {
@Override
public void run() {
Toast toast = Toast.makeText(ctx, text, Toast.LENGTH_SHORT);
toast.show();
}
});
}
boolean mShift = true;
boolean mShift = true;
public void shift() {
if (!mShift)
return;
public void shift() {
if (!mShift)
return;
mMap.postDelayed(new Runnable() {
mMap.postDelayed(new Runnable() {
@Override
public void run() {
for (int i = 0; i < 10; i++) {
if (mIndoorLayer.activeLevels[i]) {
mIndoorLayer.activeLevels[i] = false;
mIndoorLayer.activeLevels[(i + 1) % 9] = true;
mIndoorLayer.update();
break;
}
}
shift();
}
}, 200);
@Override
public void run() {
for (int i = 0; i < 10; i++) {
if (mIndoorLayer.activeLevels[i]) {
mIndoorLayer.activeLevels[i] = false;
mIndoorLayer.activeLevels[(i + 1) % 9] = true;
mIndoorLayer.update();
break;
}
}
shift();
}
}, 200);
}
}
public void onClick(View v) {
mShift = false;
public void onClick(View v) {
mShift = false;
if (mIndoorLayer == null)
return;
if (mIndoorLayer == null)
return;
int i = 0;
int i = 0;
if (v instanceof ToggleButton) {
ToggleButton b = (ToggleButton) v;
i = (b.getTextOn().charAt(0) - '0') + 1;
}
if (v instanceof ToggleButton) {
ToggleButton b = (ToggleButton) v;
i = (b.getTextOn().charAt(0) - '0') + 1;
}
if (i < 0 || i > 9)
i = 0;
if (i < 0 || i > 9)
i = 0;
mIndoorLayer.activeLevels[i] ^= true;
((ToggleButton) v).setChecked(mIndoorLayer.activeLevels[i]);
log.debug(Arrays.toString(mIndoorLayer.activeLevels));
mIndoorLayer.update();
}
mIndoorLayer.activeLevels[i] ^= true;
((ToggleButton) v).setChecked(mIndoorLayer.activeLevels[i]);
log.debug(Arrays.toString(mIndoorLayer.activeLevels));
mIndoorLayer.update();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onResume() {
super.onResume();
@Override
protected void onResume() {
super.onResume();
/* ignore saved position */
//mMap.setMapPosition(49.417, 8.673, 1 << 17);
mMap.setMapPosition(53.5620092, 9.9866457, 1 << 16);
}
//mMap.setMapPosition(49.417, 8.673, 1 << 17);
mMap.setMapPosition(53.5620092, 9.9866457, 1 << 16);
}
}

View File

@@ -16,53 +16,53 @@
*/
package org.oscim.android.test;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import org.oscim.android.MapPreferences;
import org.oscim.android.MapView;
import org.oscim.map.Map;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
public abstract class MapActivity extends AppCompatActivity {
MapView mMapView;
Map mMap;
MapPreferences mPrefs;
MapView mMapView;
Map mMap;
MapPreferences mPrefs;
protected final int mContentView;
protected final int mContentView;
public MapActivity(int contentView) {
mContentView = contentView;
}
public MapActivity(int contentView) {
mContentView = contentView;
}
public MapActivity() {
this(R.layout.activity_map);
}
public MapActivity() {
this(R.layout.activity_map);
}
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(mContentView);
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(mContentView);
setTitle(getClass().getSimpleName());
setTitle(getClass().getSimpleName());
mMapView = (MapView) findViewById(R.id.mapView);
mMap = mMapView.map();
mPrefs = new MapPreferences(MapActivity.class.getName(), this);
}
mMapView = (MapView) findViewById(R.id.mapView);
mMap = mMapView.map();
mPrefs = new MapPreferences(MapActivity.class.getName(), this);
}
@Override
protected void onResume() {
super.onResume();
@Override
protected void onResume() {
super.onResume();
mPrefs.load(mMapView.map());
mMapView.onResume();
}
mPrefs.load(mMapView.map());
mMapView.onResume();
}
@Override
protected void onPause() {
super.onPause();
@Override
protected void onPause() {
super.onPause();
mMapView.onPause();
mPrefs.save(mMapView.map());
}
mMapView.onPause();
mPrefs.save(mMapView.map());
}
}

View File

@@ -17,6 +17,11 @@
*/
package org.oscim.android.test;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
import org.oscim.android.filepicker.FilePicker;
import org.oscim.android.filepicker.FilterByFileExtension;
import org.oscim.android.filepicker.ValidMapFile;
@@ -30,106 +35,101 @@ import org.oscim.theme.VtmThemes;
import org.oscim.tiling.source.mapfile.MapFileTileSource;
import org.oscim.tiling.source.mapfile.MapInfo;
import android.content.Intent;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuItem;
public class MapsforgeMapActivity extends MapActivity {
private static final int SELECT_MAP_FILE = 0;
private static final int SELECT_MAP_FILE = 0;
private TileGridLayer mGridLayer;
private TileGridLayer mGridLayer;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
startActivityForResult(new Intent(this, MapFilePicker.class),
SELECT_MAP_FILE);
}
startActivityForResult(new Intent(this, MapFilePicker.class),
SELECT_MAP_FILE);
}
public static class MapFilePicker extends FilePicker {
public MapFilePicker() {
setFileDisplayFilter(new FilterByFileExtension(".map"));
setFileSelectFilter(new ValidMapFile());
}
}
public static class MapFilePicker extends FilePicker {
public MapFilePicker() {
setFileDisplayFilter(new FilterByFileExtension(".map"));
setFileSelectFilter(new ValidMapFile());
}
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.theme_menu, menu);
return true;
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.theme_menu, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.theme_default:
mMap.setTheme(VtmThemes.DEFAULT);
item.setChecked(true);
return true;
switch (item.getItemId()) {
case R.id.theme_default:
mMap.setTheme(VtmThemes.DEFAULT);
item.setChecked(true);
return true;
case R.id.theme_tubes:
mMap.setTheme(VtmThemes.TRONRENDER);
item.setChecked(true);
return true;
case R.id.theme_tubes:
mMap.setTheme(VtmThemes.TRONRENDER);
item.setChecked(true);
return true;
case R.id.theme_osmarender:
mMap.setTheme(VtmThemes.OSMARENDER);
item.setChecked(true);
return true;
case R.id.theme_osmarender:
mMap.setTheme(VtmThemes.OSMARENDER);
item.setChecked(true);
return true;
case R.id.theme_newtron:
mMap.setTheme(VtmThemes.NEWTRON);
item.setChecked(true);
return true;
case R.id.theme_newtron:
mMap.setTheme(VtmThemes.NEWTRON);
item.setChecked(true);
return true;
case R.id.gridlayer:
if (item.isChecked()) {
item.setChecked(false);
mMap.layers().remove(mGridLayer);
} else {
item.setChecked(true);
if (mGridLayer == null)
mGridLayer = new TileGridLayer(mMap);
case R.id.gridlayer:
if (item.isChecked()) {
item.setChecked(false);
mMap.layers().remove(mGridLayer);
} else {
item.setChecked(true);
if (mGridLayer == null)
mGridLayer = new TileGridLayer(mMap);
mMap.layers().add(mGridLayer);
}
mMap.updateMap(true);
return true;
}
mMap.layers().add(mGridLayer);
}
mMap.updateMap(true);
return true;
}
return false;
}
return false;
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent intent) {
if (requestCode == SELECT_MAP_FILE) {
if (resultCode != RESULT_OK || intent == null || intent.getStringExtra(FilePicker.SELECTED_FILE) == null) {
finish();
return;
}
if (requestCode == SELECT_MAP_FILE) {
if (resultCode != RESULT_OK || intent == null || intent.getStringExtra(FilePicker.SELECTED_FILE) == null) {
finish();
return;
}
MapFileTileSource tileSource = new MapFileTileSource();
tileSource.setPreferredLanguage("en");
String file = intent.getStringExtra(FilePicker.SELECTED_FILE);
if (tileSource.setMapFile(file)) {
MapFileTileSource tileSource = new MapFileTileSource();
tileSource.setPreferredLanguage("en");
String file = intent.getStringExtra(FilePicker.SELECTED_FILE);
if (tileSource.setMapFile(file)) {
VectorTileLayer l = mMap.setBaseMap(tileSource);
mMap.setTheme(VtmThemes.DEFAULT);
VectorTileLayer l = mMap.setBaseMap(tileSource);
mMap.setTheme(VtmThemes.DEFAULT);
mMap.layers().add(new BuildingLayer(mMap, l));
mMap.layers().add(new LabelLayer(mMap, l));
mMap.layers().add(new BuildingLayer(mMap, l));
mMap.layers().add(new LabelLayer(mMap, l));
MapInfo info = tileSource.getMapInfo();
MapPosition pos = new MapPosition();
pos.setByBoundingBox(info.boundingBox, Tile.SIZE * 4, Tile.SIZE * 4);
mMap.setMapPosition(pos);
MapInfo info = tileSource.getMapInfo();
MapPosition pos = new MapPosition();
pos.setByBoundingBox(info.boundingBox, Tile.SIZE * 4, Tile.SIZE * 4);
mMap.setMapPosition(pos);
mPrefs.clear();
}
}
}
mPrefs.clear();
}
}
}
}

View File

@@ -17,11 +17,9 @@
*/
package org.oscim.android.test;
import static org.oscim.android.canvas.AndroidGraphics.drawableToBitmap;
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
import java.util.ArrayList;
import java.util.List;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.Toast;
import org.oscim.backend.canvas.Bitmap;
import org.oscim.core.GeoPoint;
@@ -32,83 +30,85 @@ import org.oscim.layers.marker.MarkerItem;
import org.oscim.layers.marker.MarkerItem.HotspotPlace;
import org.oscim.layers.marker.MarkerSymbol;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.widget.Toast;
import java.util.ArrayList;
import java.util.List;
import static org.oscim.android.canvas.AndroidGraphics.drawableToBitmap;
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
public class MarkerOverlayActivity extends BitmapTileMapActivity
implements OnItemGestureListener<MarkerItem> {
private static final boolean BILLBOARDS = true;
private MarkerSymbol mFocusMarker;
private static final boolean BILLBOARDS = true;
private MarkerSymbol mFocusMarker;
public MarkerOverlayActivity() {
super(STAMEN_TONER.build());
}
public MarkerOverlayActivity() {
super(STAMEN_TONER.build());
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
/* directly load bitmap from resources */
Bitmap bitmap = drawableToBitmap(getResources(), R.drawable.marker_poi);
Bitmap bitmap = drawableToBitmap(getResources(), R.drawable.marker_poi);
MarkerSymbol symbol;
if (BILLBOARDS)
symbol = new MarkerSymbol(bitmap, HotspotPlace.CENTER);
else
symbol = new MarkerSymbol(bitmap, 0.5f, 0.5f, false);
MarkerSymbol symbol;
if (BILLBOARDS)
symbol = new MarkerSymbol(bitmap, HotspotPlace.CENTER);
else
symbol = new MarkerSymbol(bitmap, 0.5f, 0.5f, false);
/* another option: use some bitmap drawable */
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
if (BILLBOARDS)
mFocusMarker = new MarkerSymbol(drawableToBitmap(d),
HotspotPlace.BOTTOM_CENTER);
else
mFocusMarker = new MarkerSymbol(drawableToBitmap(d),
0.5f, 0.5f, false);
Drawable d = getResources().getDrawable(R.drawable.ic_launcher);
if (BILLBOARDS)
mFocusMarker = new MarkerSymbol(drawableToBitmap(d),
HotspotPlace.BOTTOM_CENTER);
else
mFocusMarker = new MarkerSymbol(drawableToBitmap(d),
0.5f, 0.5f, false);
ItemizedLayer<MarkerItem> markerLayer =
new ItemizedLayer<MarkerItem>(mMap, new ArrayList<MarkerItem>(),
symbol, this);
ItemizedLayer<MarkerItem> markerLayer =
new ItemizedLayer<MarkerItem>(mMap, new ArrayList<MarkerItem>(),
symbol, this);
mMap.layers().add(markerLayer);
mMap.layers().add(markerLayer);
List<MarkerItem> pts = new ArrayList<MarkerItem>();
List<MarkerItem> pts = new ArrayList<MarkerItem>();
for (double lat = -90; lat <= 90; lat += 5) {
for (double lon = -180; lon <= 180; lon += 5)
pts.add(new MarkerItem(lat + "/" + lon, "",
new GeoPoint(lat, lon)));
}
for (double lat = -90; lat <= 90; lat += 5) {
for (double lon = -180; lon <= 180; lon += 5)
pts.add(new MarkerItem(lat + "/" + lon, "",
new GeoPoint(lat, lon)));
}
markerLayer.addItems(pts);
markerLayer.addItems(pts);
mMap.layers().add(new TileGridLayer(mMap));
}
mMap.layers().add(new TileGridLayer(mMap));
}
@Override
protected void onResume() {
super.onResume();
@Override
protected void onResume() {
super.onResume();
/* ignore saved position */
mMap.setMapPosition(0, 0, 1 << 2);
}
mMap.setMapPosition(0, 0, 1 << 2);
}
@Override
public boolean onItemSingleTapUp(int index, MarkerItem item) {
if (item.getMarker() == null)
item.setMarker(mFocusMarker);
else
item.setMarker(null);
@Override
public boolean onItemSingleTapUp(int index, MarkerItem item) {
if (item.getMarker() == null)
item.setMarker(mFocusMarker);
else
item.setMarker(null);
Toast toast = Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT);
toast.show();
return true;
}
Toast toast = Toast.makeText(this, item.getTitle(), Toast.LENGTH_SHORT);
toast.show();
return true;
}
@Override
public boolean onItemLongPress(int index, MarkerItem item) {
return false;
}
@Override
public boolean onItemLongPress(int index, MarkerItem item) {
return false;
}
}

View File

@@ -17,6 +17,8 @@
*/
package org.oscim.android.test;
import android.os.Bundle;
import org.oscim.layers.TileGridLayer;
import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.vector.VectorTileLayer;
@@ -24,49 +26,47 @@ import org.oscim.layers.tile.vector.labeling.LabelLayer;
import org.oscim.theme.IRenderTheme;
import org.oscim.theme.ThemeLoader;
import org.oscim.theme.VtmThemes;
import org.oscim.tiling.source.geojson.OsmRoadLineJsonTileSource;
import org.oscim.tiling.source.geojson.OsmBuildingJsonTileSource;
import org.oscim.tiling.source.geojson.OsmLanduseJsonTileSource;
import org.oscim.tiling.source.geojson.OsmWaterJsonTileSource;
import org.oscim.tiling.source.geojson.OsmRoadLabelJsonTileSource;
import android.os.Bundle;
import org.oscim.tiling.source.geojson.OsmRoadLineJsonTileSource;
import org.oscim.tiling.source.geojson.OsmWaterJsonTileSource;
public class OsmJsonMapActivity extends MapActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
IRenderTheme theme = ThemeLoader.load(VtmThemes.DEFAULT);
IRenderTheme theme = ThemeLoader.load(VtmThemes.DEFAULT);
mMap.setBaseMap(new VectorTileLayer(mMap, new OsmLanduseJsonTileSource()));
mMap.setTheme(theme);
mMap.setBaseMap(new VectorTileLayer(mMap, new OsmLanduseJsonTileSource()));
mMap.setTheme(theme);
VectorTileLayer l = new VectorTileLayer(mMap, new OsmWaterJsonTileSource());
l.setRenderTheme(theme);
l.tileRenderer().setOverdrawColor(0);
mMap.layers().add(l);
VectorTileLayer l = new VectorTileLayer(mMap, new OsmWaterJsonTileSource());
l.setRenderTheme(theme);
l.tileRenderer().setOverdrawColor(0);
mMap.layers().add(l);
l = new VectorTileLayer(mMap, new OsmRoadLineJsonTileSource());
l.setRenderTheme(theme);
l.tileRenderer().setOverdrawColor(0);
mMap.layers().add(l);
l = new VectorTileLayer(mMap, new OsmRoadLineJsonTileSource());
l.setRenderTheme(theme);
l.tileRenderer().setOverdrawColor(0);
mMap.layers().add(l);
l = new VectorTileLayer(mMap, new OsmBuildingJsonTileSource());
l.setRenderTheme(theme);
l.tileRenderer().setOverdrawColor(0);
mMap.layers().add(l);
mMap.layers().add(new BuildingLayer(mMap, l));
l = new VectorTileLayer(mMap, new OsmBuildingJsonTileSource());
l.setRenderTheme(theme);
l.tileRenderer().setOverdrawColor(0);
mMap.layers().add(l);
mMap.layers().add(new BuildingLayer(mMap, l));
l = new VectorTileLayer(mMap, new OsmRoadLabelJsonTileSource());
l.setRenderTheme(theme);
l.tileRenderer().setOverdrawColor(0);
mMap.layers().add(l);
mMap.layers().add(new LabelLayer(mMap, l));
l = new VectorTileLayer(mMap, new OsmRoadLabelJsonTileSource());
l.setRenderTheme(theme);
l.tileRenderer().setOverdrawColor(0);
mMap.layers().add(l);
mMap.layers().add(new LabelLayer(mMap, l));
mMap.layers().add(new TileGridLayer(mMap));
mMap.layers().add(new TileGridLayer(mMap));
mMap.setMapPosition(53.08, 8.83, Math.pow(2, 16));
}
mMap.setMapPosition(53.08, 8.83, Math.pow(2, 16));
}
}

View File

@@ -17,9 +17,7 @@
*/
package org.oscim.android.test;
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
import java.util.ArrayList;
import android.os.Bundle;
import org.oscim.backend.canvas.Color;
import org.oscim.core.MapPosition;
@@ -27,7 +25,9 @@ import org.oscim.event.Event;
import org.oscim.layers.JtsPathLayer;
import org.oscim.map.Map.UpdateListener;
import android.os.Bundle;
import java.util.ArrayList;
import static org.oscim.tiling.source.bitmap.DefaultSources.STAMEN_TONER;
/**
* This is a very INEFFICIENT and somewhat less usefull example for how to use
@@ -35,75 +35,75 @@ import android.os.Bundle;
*/
public class PathOverlayActivity extends BitmapTileMapActivity {
public PathOverlayActivity() {
super(STAMEN_TONER.build());
}
public PathOverlayActivity() {
super(STAMEN_TONER.build());
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//mBitmapLayer.tileRenderer().setBitmapAlpha(0.5f);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//mBitmapLayer.tileRenderer().setBitmapAlpha(0.5f);
mMap.setMapPosition(0, 0, 1 << 2);
for (double lat = -90; lat <= 90; lat += 5) {
int c = Color.fade(Color.rainbow((float) (lat + 90) / 180), 0.5f);
JtsPathLayer pathLayer = new JtsPathLayer(mMap, c, 6);
mMap.layers().add(pathLayer);
mPathLayers.add(pathLayer);
}
mMap.setMapPosition(0, 0, 1 << 2);
for (double lat = -90; lat <= 90; lat += 5) {
int c = Color.fade(Color.rainbow((float) (lat + 90) / 180), 0.5f);
JtsPathLayer pathLayer = new JtsPathLayer(mMap, c, 6);
mMap.layers().add(pathLayer);
mPathLayers.add(pathLayer);
}
mMap.events.bind(new UpdateListener() {
@Override
public void onMapEvent(Event e, MapPosition mapPosition) {
//if (e == Map.UPDATE_EVENT) {
long t = System.currentTimeMillis();
float pos = t % 20000 / 10000f - 1f;
createLayers(pos);
mMap.events.bind(new UpdateListener() {
@Override
public void onMapEvent(Event e, MapPosition mapPosition) {
//if (e == Map.UPDATE_EVENT) {
long t = System.currentTimeMillis();
float pos = t % 20000 / 10000f - 1f;
createLayers(pos);
mMap.updateMap(true);
//}
}
});
}
mMap.updateMap(true);
//}
}
});
}
@Override
protected void onResume() {
super.onResume();
@Override
protected void onResume() {
super.onResume();
/* ignore saved position */
mMap.setMapPosition(0, 0, 1 << 2);
}
mMap.setMapPosition(0, 0, 1 << 2);
}
ArrayList<JtsPathLayer> mPathLayers = new ArrayList<JtsPathLayer>();
ArrayList<JtsPathLayer> mPathLayers = new ArrayList<JtsPathLayer>();
void createLayers(float pos) {
void createLayers(float pos) {
int i = 0;
for (double lat = -90; lat <= 90; lat += 5) {
double[] packedCoordinates = new double[360 + 2];
//List<GeoPoint> pts = new ArrayList<GeoPoint>();
int c = 0;
for (double lon = -180; lon <= 180; lon += 2) {
//pts.add(new GeoPoint(lat, lon));
double longitude = lon;
int i = 0;
for (double lat = -90; lat <= 90; lat += 5) {
double[] packedCoordinates = new double[360 + 2];
//List<GeoPoint> pts = new ArrayList<GeoPoint>();
int c = 0;
for (double lon = -180; lon <= 180; lon += 2) {
//pts.add(new GeoPoint(lat, lon));
double longitude = lon;
double latitude = lat + (pos * 90);
if (latitude < -90)
latitude += 180;
if (latitude > 90)
latitude -= 180;
double latitude = lat + (pos * 90);
if (latitude < -90)
latitude += 180;
if (latitude > 90)
latitude -= 180;
latitude += Math.sin((Math.abs(pos) * (lon / Math.PI)));
latitude += Math.sin((Math.abs(pos) * (lon / Math.PI)));
packedCoordinates[c++] = longitude;
packedCoordinates[c++] = latitude;
}
packedCoordinates[c++] = longitude;
packedCoordinates[c++] = latitude;
}
//LineString line = new LineString(factory.create(packedCoordinates, 2), geomFactory);
//mPathLayers.get(i++).setLineString(line);
//LineString line = new LineString(factory.create(packedCoordinates, 2), geomFactory);
//mPathLayers.get(i++).setLineString(line);
mPathLayers.get(i++).setLineString(packedCoordinates);
mPathLayers.get(i++).setLineString(packedCoordinates);
}
}
}
}
}

View File

@@ -16,6 +16,8 @@
*/
package org.oscim.android.test;
import android.os.Bundle;
import org.oscim.android.cache.TileCache;
import org.oscim.layers.tile.TileLayer;
import org.oscim.layers.tile.buildings.S3DBLayer;
@@ -24,47 +26,45 @@ import org.oscim.theme.VtmThemes;
import org.oscim.tiling.TileSource;
import org.oscim.tiling.source.oscimap4.OSciMap4TileSource;
import android.os.Bundle;
public class S3DBMapActivity extends BaseMapActivity {
TileCache mS3dbCache;
TileCache mS3dbCache;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMap.setTheme(VtmThemes.DEFAULT);
mMap.setTheme(VtmThemes.DEFAULT);
TileSource ts = OSciMap4TileSource.builder()
.url("http://opensciencemap.org/tiles/s3db")
.zoomMin(16)
.zoomMax(16)
.build();
TileSource ts = OSciMap4TileSource.builder()
.url("http://opensciencemap.org/tiles/s3db")
.zoomMin(16)
.zoomMax(16)
.build();
if (USE_CACHE) {
mS3dbCache = new TileCache(this, null, "s3db.db");
mS3dbCache.setCacheSize(512 * (1 << 10));
ts.setCache(mS3dbCache);
}
TileLayer tl = new S3DBLayer(mMap, ts, true, false);
mMap.layers().add(tl);
mMap.layers().add(new LabelLayer(mMap, mBaseLayer));
}
if (USE_CACHE) {
mS3dbCache = new TileCache(this, null, "s3db.db");
mS3dbCache.setCacheSize(512 * (1 << 10));
ts.setCache(mS3dbCache);
}
TileLayer tl = new S3DBLayer(mMap, ts, true, false);
mMap.layers().add(tl);
mMap.layers().add(new LabelLayer(mMap, mBaseLayer));
}
@Override
protected void onDestroy() {
super.onDestroy();
@Override
protected void onDestroy() {
super.onDestroy();
if (mS3dbCache != null)
mS3dbCache.dispose();
}
if (mS3dbCache != null)
mS3dbCache.dispose();
}
@Override
protected void onResume() {
super.onResume();
@Override
protected void onResume() {
super.onResume();
/* ignore saved position */
mMap.setMapPosition(53.5620092, 9.9866457, 1 << 16);
}
mMap.setMapPosition(53.5620092, 9.9866457, 1 << 16);
}
}

View File

@@ -17,9 +17,6 @@
*/
package org.oscim.android.test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
@@ -28,47 +25,50 @@ import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.LinearLayout;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/**
* A simple start screen for the sample activities.
*/
public class Samples extends Activity {
public static Logger log = LoggerFactory.getLogger(Samples.class);
public static Logger log = LoggerFactory.getLogger(Samples.class);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_samples);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.samples);
linearLayout.addView(createButton(SimpleMapActivity.class));
linearLayout.addView(createButton(BitmapTileMapActivity.class));
linearLayout.addView(createButton(MapsforgeMapActivity.class));
linearLayout.addView(createButton(PathOverlayActivity.class));
linearLayout.addView(createButton(MarkerOverlayActivity.class));
linearLayout.addView(createButton(ThemeStylerActivity.class));
linearLayout.addView(createButton(S3DBMapActivity.class));
linearLayout.addView(createButton(JeoIndoorMapActivity.class));
linearLayout.addView(createButton(OsmJsonMapActivity.class));
linearLayout.addView(createButton(VectorLayerMapActivity.class));
}
setContentView(R.layout.activity_samples);
LinearLayout linearLayout = (LinearLayout) findViewById(R.id.samples);
linearLayout.addView(createButton(SimpleMapActivity.class));
linearLayout.addView(createButton(BitmapTileMapActivity.class));
linearLayout.addView(createButton(MapsforgeMapActivity.class));
linearLayout.addView(createButton(PathOverlayActivity.class));
linearLayout.addView(createButton(MarkerOverlayActivity.class));
linearLayout.addView(createButton(ThemeStylerActivity.class));
linearLayout.addView(createButton(S3DBMapActivity.class));
linearLayout.addView(createButton(JeoIndoorMapActivity.class));
linearLayout.addView(createButton(OsmJsonMapActivity.class));
linearLayout.addView(createButton(VectorLayerMapActivity.class));
}
private Button createButton(final Class<?> clazz) {
return this.createButton(clazz, null);
}
private Button createButton(final Class<?> clazz) {
return this.createButton(clazz, null);
}
private Button createButton(final Class<?> clazz, String text) {
Button button = new Button(this);
if (text == null) {
button.setText(clazz.getSimpleName());
} else {
button.setText(text);
}
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(Samples.this, clazz));
}
});
return button;
}
private Button createButton(final Class<?> clazz, String text) {
Button button = new Button(this);
if (text == null) {
button.setText(clazz.getSimpleName());
} else {
button.setText(text);
}
button.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
startActivity(new Intent(Samples.this, clazz));
}
});
return button;
}
}

View File

@@ -13,7 +13,10 @@
*
* You should have received a copy of the GNU Lesser General Public License along with
* this program. If not, see <http://www.gnu.org/licenses/>.
*/package org.oscim.android.test;
*/
package org.oscim.android.test;
import android.os.Bundle;
import org.oscim.android.MapScaleBar;
import org.oscim.core.MapPosition;
@@ -25,63 +28,61 @@ import org.oscim.theme.IRenderTheme;
import org.oscim.theme.ThemeLoader;
import org.oscim.theme.VtmThemes;
import android.os.Bundle;
public class SimpleMapActivity extends BaseMapActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Layers layers = mMap.layers();
layers.add(new BuildingLayer(mMap, mBaseLayer));
layers.add(new LabelLayer(mMap, mBaseLayer));
layers.add(new MapScaleBar(mMapView));
Layers layers = mMap.layers();
layers.add(new BuildingLayer(mMap, mBaseLayer));
layers.add(new LabelLayer(mMap, mBaseLayer));
layers.add(new MapScaleBar(mMapView));
mMap.setTheme(VtmThemes.DEFAULT);
}
mMap.setTheme(VtmThemes.DEFAULT);
}
void runTheMonkey() {
themes[0] = ThemeLoader.load(VtmThemes.DEFAULT);
themes[1] = ThemeLoader.load(VtmThemes.OSMARENDER);
themes[2] = ThemeLoader.load(VtmThemes.TRONRENDER);
loooop(1);
}
void runTheMonkey() {
themes[0] = ThemeLoader.load(VtmThemes.DEFAULT);
themes[1] = ThemeLoader.load(VtmThemes.OSMARENDER);
themes[2] = ThemeLoader.load(VtmThemes.TRONRENDER);
loooop(1);
}
IRenderTheme[] themes = new IRenderTheme[3];
IRenderTheme[] themes = new IRenderTheme[3];
// Stress testing
void loooop(final int i) {
final long time = (long) (500 + Math.random() * 1000);
mMapView.postDelayed(new Runnable() {
@Override
public void run() {
// Stress testing
void loooop(final int i) {
final long time = (long) (500 + Math.random() * 1000);
mMapView.postDelayed(new Runnable() {
@Override
public void run() {
mMapView.map().setTheme(themes[i]);
mMapView.map().setTheme(themes[i]);
MapPosition p = new MapPosition();
if (i == 1) {
mMapView.map().getMapPosition(p);
p.setScale(4);
mMapView.map().animator().animateTo(time, p);
} else {
//mMapView.map().setMapPosition(p);
MapPosition p = new MapPosition();
if (i == 1) {
mMapView.map().getMapPosition(p);
p.setScale(4);
mMapView.map().animator().animateTo(time, p);
} else {
//mMapView.map().setMapPosition(p);
p.setScale(2 + (1 << (int) (Math.random() * 13)));
// p.setX((p.getX() + (Math.random() * 4 - 2) / p.getScale()));
// p.setY((p.getY() + (Math.random() * 4 - 2) / p.getScale()));
p.setX(MercatorProjection.longitudeToX(Math.random() * 180));
p.setY(MercatorProjection.latitudeToY(Math.random() * 60));
p.setScale(2 + (1 << (int) (Math.random() * 13)));
// p.setX((p.getX() + (Math.random() * 4 - 2) / p.getScale()));
// p.setY((p.getY() + (Math.random() * 4 - 2) / p.getScale()));
p.setX(MercatorProjection.longitudeToX(Math.random() * 180));
p.setY(MercatorProjection.latitudeToY(Math.random() * 60));
p.setTilt((float) (Math.random() * 60));
p.setBearing((float) (Math.random() * 360));
//mMapView.map().setMapPosition(p);
p.setTilt((float) (Math.random() * 60));
p.setBearing((float) (Math.random() * 360));
//mMapView.map().setMapPosition(p);
mMapView.map().animator().animateTo(time, p);
}
loooop((i + 1) % 2);
mMapView.map().animator().animateTo(time, p);
}
loooop((i + 1) % 2);
}
}, time);
}
}
}, time);
}
}

View File

@@ -1,7 +1,11 @@
package org.oscim.android.test;
import static org.oscim.utils.ColorUtil.modHsv;
import static org.oscim.utils.ColorUtil.shiftHue;
import android.os.Bundle;
import android.view.View;
import android.widget.RadioButton;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.ToggleButton;
import org.oscim.layers.tile.buildings.BuildingLayer;
import org.oscim.layers.tile.vector.VectorTileLayer;
@@ -20,169 +24,165 @@ import org.oscim.theme.styles.RenderStyle;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import android.os.Bundle;
import android.view.View;
import android.widget.RadioButton;
import android.widget.SeekBar;
import android.widget.SeekBar.OnSeekBarChangeListener;
import android.widget.ToggleButton;
import static org.oscim.utils.ColorUtil.modHsv;
import static org.oscim.utils.ColorUtil.shiftHue;
public class ThemeStylerActivity extends BaseMapActivity implements OnSeekBarChangeListener {
final Logger log = LoggerFactory.getLogger(ThemeStylerActivity.class);
final Logger log = LoggerFactory.getLogger(ThemeStylerActivity.class);
public ThemeStylerActivity() {
super(R.layout.activity_map_styler);
}
public ThemeStylerActivity() {
super(R.layout.activity_map_styler);
}
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((SeekBar) findViewById(R.id.seekBarH)).setOnSeekBarChangeListener(this);
((SeekBar) findViewById(R.id.seekBarS)).setOnSeekBarChangeListener(this);
((SeekBar) findViewById(R.id.seekBarV)).setOnSeekBarChangeListener(this);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
((SeekBar) findViewById(R.id.seekBarH)).setOnSeekBarChangeListener(this);
((SeekBar) findViewById(R.id.seekBarS)).setOnSeekBarChangeListener(this);
((SeekBar) findViewById(R.id.seekBarV)).setOnSeekBarChangeListener(this);
Layers layers = mMap.layers();
layers.add(new BuildingLayer(mMap, mBaseLayer));
layers.add(new LabelLayer(mMap, mBaseLayer));
Layers layers = mMap.layers();
layers.add(new BuildingLayer(mMap, mBaseLayer));
layers.add(new LabelLayer(mMap, mBaseLayer));
mMap.setTheme(VtmThemes.DEFAULT);
}
mMap.setTheme(VtmThemes.DEFAULT);
}
class ModStyleVisitor extends RuleVisitor {
private final LineBuilder<?> lineBuilder = LineStyle.builder();
private final AreaBuilder<?> areaBuilder = AreaStyle.builder();
class ModStyleVisitor extends RuleVisitor {
private final LineBuilder<?> lineBuilder = LineStyle.builder();
private final AreaBuilder<?> areaBuilder = AreaStyle.builder();
@Override
public void apply(Rule r) {
for (RenderStyle style : r.styles) {
@Override
public void apply(Rule r) {
for (RenderStyle style : r.styles) {
if (style instanceof LineStyle) {
LineStyle s = (LineStyle) style;
HSV c = lineColor;
if (lineColor.changed && s.outline)
continue;
if (style instanceof LineStyle) {
LineStyle s = (LineStyle) style;
HSV c = lineColor;
if (lineColor.changed && s.outline)
continue;
if (outlineColor.changed) {
if (!s.outline)
continue;
c = outlineColor;
}
if (outlineColor.changed) {
if (!s.outline)
continue;
c = outlineColor;
}
s.set(lineBuilder.set(s)
.color(modColor(s.color, c))
.stippleColor(modColor(s.stippleColor, c))
.build());
continue;
}
s.set(lineBuilder.set(s)
.color(modColor(s.color, c))
.stippleColor(modColor(s.stippleColor, c))
.build());
continue;
}
if (areaColor.changed && style instanceof AreaStyle) {
AreaStyle s = (AreaStyle) style;
if (areaColor.changed && style instanceof AreaStyle) {
AreaStyle s = (AreaStyle) style;
s.set(areaBuilder.set(s)
.color(modColor(s.color, areaColor))
.blendColor(modColor(s.blendColor, areaColor))
.strokeColor(modColor(s.strokeColor, areaColor))
.build());
}
}
super.apply(r);
}
}
s.set(areaBuilder.set(s)
.color(modColor(s.color, areaColor))
.blendColor(modColor(s.blendColor, areaColor))
.strokeColor(modColor(s.strokeColor, areaColor))
.build());
}
}
super.apply(r);
}
}
int modColor(int color, HSV hsv) {
return modHsv(shiftHue(color, hsv.hue), 1, hsv.sat, hsv.val, true);
}
int modColor(int color, HSV hsv) {
return modHsv(shiftHue(color, hsv.hue), 1, hsv.sat, hsv.val, true);
}
public static class HSV {
public double hue = 0;
public double sat = 1;
public double val = 1;
public boolean changed;
}
public static class HSV {
public double hue = 0;
public double sat = 1;
public double val = 1;
public boolean changed;
}
HSV lineColor = new HSV();
HSV outlineColor = new HSV();
HSV areaColor = new HSV();
HSV lineColor = new HSV();
HSV outlineColor = new HSV();
HSV areaColor = new HSV();
ModStyleVisitor mStyleVisitor = new ModStyleVisitor();
ModStyleVisitor mStyleVisitor = new ModStyleVisitor();
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (!fromUser)
return;
int id = seekBar.getId();
@Override
public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
if (!fromUser)
return;
int id = seekBar.getId();
boolean modLine = ((RadioButton) findViewById(R.id.checkBoxLine)).isChecked();
boolean modArea = ((RadioButton) findViewById(R.id.checkBoxArea)).isChecked();
boolean modLine = ((RadioButton) findViewById(R.id.checkBoxLine)).isChecked();
boolean modArea = ((RadioButton) findViewById(R.id.checkBoxArea)).isChecked();
HSV c;
if (modArea)
c = areaColor;
else if (modLine)
c = lineColor;
else
c = outlineColor;
HSV c;
if (modArea)
c = areaColor;
else if (modLine)
c = lineColor;
else
c = outlineColor;
if (id == R.id.seekBarS)
c.sat = progress / 50f;
else if (id == R.id.seekBarV)
c.val = progress / 50f;
else if (id == R.id.seekBarH)
c.hue = progress / 100f;
if (id == R.id.seekBarS)
c.sat = progress / 50f;
else if (id == R.id.seekBarV)
c.val = progress / 50f;
else if (id == R.id.seekBarH)
c.hue = progress / 100f;
log.debug((modArea ? "area" : "line")
+ " h:" + c.hue
+ " s:" + c.sat
+ " v:" + c.val);
log.debug((modArea ? "area" : "line")
+ " h:" + c.hue
+ " s:" + c.sat
+ " v:" + c.val);
VectorTileLayer l = (VectorTileLayer) mMap.layers().get(1);
RenderTheme t = (RenderTheme) l.getTheme();
VectorTileLayer l = (VectorTileLayer) mMap.layers().get(1);
RenderTheme t = (RenderTheme) l.getTheme();
c.changed = true;
t.traverseRules(mStyleVisitor);
t.updateStyles();
c.changed = false;
c.changed = true;
t.traverseRules(mStyleVisitor);
t.updateStyles();
c.changed = false;
if (modArea)
MapRenderer.setBackgroundColor(modColor(t.getMapBackground(), c));
if (modArea)
MapRenderer.setBackgroundColor(modColor(t.getMapBackground(), c));
mMap.render();
}
mMap.render();
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStartTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
@Override
public void onStopTrackingTouch(SeekBar seekBar) {
}
public void onToggleControls(View view) {
findViewById(R.id.controls).setVisibility(((ToggleButton) view).isChecked() ?
View.VISIBLE : View.GONE);
}
public void onToggleControls(View view) {
findViewById(R.id.controls).setVisibility(((ToggleButton) view).isChecked() ?
View.VISIBLE : View.GONE);
}
public void onRadioButtonClicked(View view) {
boolean checked = ((RadioButton) view).isChecked();
if (!checked)
return;
public void onRadioButtonClicked(View view) {
boolean checked = ((RadioButton) view).isChecked();
if (!checked)
return;
HSV c = null;
switch (view.getId()) {
case R.id.checkBoxArea:
c = areaColor;
break;
case R.id.checkBoxLine:
c = lineColor;
break;
case R.id.checkBoxOutline:
c = outlineColor;
break;
}
if (c == null)
return;
((SeekBar) findViewById(R.id.seekBarS)).setProgress((int) (c.sat * 50));
((SeekBar) findViewById(R.id.seekBarV)).setProgress((int) (c.val * 50));
((SeekBar) findViewById(R.id.seekBarH)).setProgress((int) (c.hue * 100));
}
HSV c = null;
switch (view.getId()) {
case R.id.checkBoxArea:
c = areaColor;
break;
case R.id.checkBoxLine:
c = lineColor;
break;
case R.id.checkBoxOutline:
c = outlineColor;
break;
}
if (c == null)
return;
((SeekBar) findViewById(R.id.seekBarS)).setProgress((int) (c.sat * 50));
((SeekBar) findViewById(R.id.seekBarV)).setProgress((int) (c.val * 50));
((SeekBar) findViewById(R.id.seekBarH)).setProgress((int) (c.hue * 100));
}
}

View File

@@ -17,6 +17,8 @@
*/
package org.oscim.android.test;
import android.os.Bundle;
import org.oscim.backend.canvas.Color;
import org.oscim.layers.TileGridLayer;
import org.oscim.layers.vector.VectorLayer;
@@ -25,73 +27,71 @@ import org.oscim.layers.vector.geometries.Style;
import org.oscim.theme.VtmThemes;
import org.oscim.utils.ColorUtil;
import android.os.Bundle;
public class VectorLayerMapActivity extends BaseMapActivity {
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mMap.setTheme(VtmThemes.DEFAULT);
mMap.setTheme(VtmThemes.DEFAULT);
VectorLayer vectorLayer = new VectorLayer(mMap);
VectorLayer vectorLayer = new VectorLayer(mMap);
// Geometry g = new GeomBuilder()
// .point(8.8, 53.1)
// .point()
// .buffer(1)
// .get();
//
// vectorLayer.add(new PolygonDrawable(g, defaultStyle()));
//
// vectorLayer.add(new PointDrawable(53.1, 8.8, Style.builder()
// .setBuffer(0.5)
// .setFillColor(Color.RED)
// .setFillAlpha(0.2)
// .build()));
//
// Style.Builder sb = Style.builder()
// .setBuffer(0.5)
// .setFillColor(Color.RED)
// .setFillAlpha(0.2);
//
// Style style = sb.setFillAlpha(0.2).build();
//
// int tileSize = 5;
// for (int x = -180; x < 180; x += tileSize) {
// for (int y = -90; y < 90; y += tileSize) {
// // Style style = sb.setFillAlpha(FastMath.clamp(FastMath.length(x, y) / 180, 0.2, 1))
// // .build();
//
// vectorLayer.add(new RectangleDrawable(FastMath.clamp(y, -85, 85), x,
// FastMath.clamp(y + tileSize - 0.1, -85, 85),
// x + tileSize - 0.1, style));
//
// }
// }
// Geometry g = new GeomBuilder()
// .point(8.8, 53.1)
// .point()
// .buffer(1)
// .get();
//
// vectorLayer.add(new PolygonDrawable(g, defaultStyle()));
//
// vectorLayer.add(new PointDrawable(53.1, 8.8, Style.builder()
// .setBuffer(0.5)
// .setFillColor(Color.RED)
// .setFillAlpha(0.2)
// .build()));
//
// Style.Builder sb = Style.builder()
// .setBuffer(0.5)
// .setFillColor(Color.RED)
// .setFillAlpha(0.2);
//
// Style style = sb.setFillAlpha(0.2).build();
//
// int tileSize = 5;
// for (int x = -180; x < 180; x += tileSize) {
// for (int y = -90; y < 90; y += tileSize) {
// // Style style = sb.setFillAlpha(FastMath.clamp(FastMath.length(x, y) / 180, 0.2, 1))
// // .build();
//
// vectorLayer.add(new RectangleDrawable(FastMath.clamp(y, -85, 85), x,
// FastMath.clamp(y + tileSize - 0.1, -85, 85),
// x + tileSize - 0.1, style));
//
// }
// }
Style.Builder sb = Style.builder()
.buffer(0.5)
.fillColor(Color.RED)
.fillAlpha(0.2);
Style.Builder sb = Style.builder()
.buffer(0.5)
.fillColor(Color.RED)
.fillAlpha(0.2);
for (int i = 0; i < 2000; i++) {
Style style = sb.buffer(Math.random() + 0.2)
.fillColor(ColorUtil.setHue(Color.RED,
(int) (Math.random() * 50) / 50.0))
.fillAlpha(0.5)
.build();
for (int i = 0; i < 2000; i++) {
Style style = sb.buffer(Math.random() + 0.2)
.fillColor(ColorUtil.setHue(Color.RED,
(int) (Math.random() * 50) / 50.0))
.fillAlpha(0.5)
.build();
vectorLayer.add(new PointDrawable(Math.random() * 180 - 90,
Math.random() * 360 - 180,
style));
vectorLayer.add(new PointDrawable(Math.random() * 180 - 90,
Math.random() * 360 - 180,
style));
}
}
mMap.layers().add(vectorLayer);
mMap.layers().add(new TileGridLayer(mMap, 0xff222222, 1.2f, 1));
mMap.layers().add(vectorLayer);
mMap.layers().add(new TileGridLayer(mMap, 0xff222222, 1.2f, 1));
mMap.setMapPosition(0, 0, 1 << 2);
}
mMap.setMapPosition(0, 0, 1 << 2);
}
}