#435 part 2, settings preferences for the various configuration options

This commit is contained in:
Alex 2016-10-21 18:45:55 -04:00
parent 3217574500
commit 474019f9b5
7 changed files with 416 additions and 6 deletions

View file

@ -184,6 +184,15 @@
<category android:name="android.intent.category.DEFAULT" /> <category android:name="android.intent.category.DEFAULT" />
</intent-filter> </intent-filter>
</activity> </activity>
<activity android:name=".PreferenceActivity"
android:label="OpenStreetMap Preferences">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
</application> </application>
</manifest> </manifest>

View file

@ -4,6 +4,7 @@ package org.osmdroid;
import android.Manifest; import android.Manifest;
import android.app.Activity; import android.app.Activity;
import android.content.Intent; import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager; import android.content.pm.PackageManager;
import android.graphics.Color; import android.graphics.Color;
import android.graphics.Typeface; import android.graphics.Typeface;
@ -11,6 +12,7 @@ import android.net.Uri;
import android.os.Build; import android.os.Build;
import android.os.Bundle; import android.os.Bundle;
import android.os.Environment; import android.os.Environment;
import android.preference.PreferenceManager;
import android.support.v4.content.ContextCompat; import android.support.v4.content.ContextCompat;
import android.view.View; import android.view.View;
import android.widget.AdapterView; import android.widget.AdapterView;
@ -24,7 +26,10 @@ import org.osmdroid.samples.SampleWithMinimapItemizedoverlay;
import org.osmdroid.samples.SampleWithMinimapZoomcontrols; import org.osmdroid.samples.SampleWithMinimapZoomcontrols;
import org.osmdroid.samples.SampleWithTilesOverlay; import org.osmdroid.samples.SampleWithTilesOverlay;
import org.osmdroid.samples.SampleWithTilesOverlayAndCustomTileSource; import org.osmdroid.samples.SampleWithTilesOverlayAndCustomTileSource;
import org.osmdroid.tileprovider.constants.OpenStreetMapTileProviderConstants;
import org.osmdroid.views.MapView;
import java.io.File;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List; import java.util.List;
@ -45,6 +50,17 @@ public class MainActivity extends Activity implements AdapterView.OnItemClickLis
checkPermissions(); checkPermissions();
} }
File discoveredBestPath = OpenStreetMapTileProviderConstants.TILE_PATH_BASE;
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
OpenStreetMapTileProviderConstants.TILE_PATH_BASE = new File(prefs.getString("textViewCacheDirectory", discoveredBestPath.getAbsolutePath()));
OpenStreetMapTileProviderConstants.DEBUGMODE=prefs.getBoolean("checkBoxDebugMode",false);
OpenStreetMapTileProviderConstants.DEBUG_TILE_PROVIDERS=prefs.getBoolean("checkBoxDebugTileProvider",false);
MapView.hardwareAccelerated=prefs.getBoolean("checkBoxHardwareAcceleration",false);
// Generate a ListView with Sample Maps // Generate a ListView with Sample Maps
final ArrayList<String> list = new ArrayList<>(); final ArrayList<String> list = new ArrayList<>();
list.add("OSMDroid Sample map (Start Here)"); list.add("OSMDroid Sample map (Start Here)");
@ -56,6 +72,7 @@ public class MainActivity extends Activity implements AdapterView.OnItemClickLis
list.add("More Samples"); list.add("More Samples");
list.add("Bug Drivers"); list.add("Bug Drivers");
list.add("Report a bug"); list.add("Report a bug");
list.add("Settings");
//this.setListAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list)); //this.setListAdapter(new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list));
ListView lv = (ListView) findViewById(R.id.activitylist); ListView lv = (ListView) findViewById(R.id.activitylist);
ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list); ArrayAdapter adapter = new ArrayAdapter<>(this, android.R.layout.simple_list_item_1, list);
@ -108,6 +125,10 @@ public class MainActivity extends Activity implements AdapterView.OnItemClickLis
Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/osmdroid/osmdroid/issues")); Intent browserIntent = new Intent(Intent.ACTION_VIEW, Uri.parse("https://github.com/osmdroid/osmdroid/issues"));
startActivity(browserIntent); startActivity(browserIntent);
break; break;
case 9:
Intent i = new Intent(this,PreferenceActivity.class);
startActivity(i);
break;
} }
} }

View file

@ -0,0 +1,155 @@
package org.osmdroid;
import android.app.Activity;
import android.app.AlertDialog;
import android.content.DialogInterface;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.Editable;
import android.text.InputType;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.CheckBox;
import android.widget.EditText;
import android.widget.TextView;
import org.osmdroid.tileprovider.constants.OpenStreetMapTileProviderConstants;
import org.osmdroid.tileprovider.util.StorageUtils;
import org.osmdroid.views.MapView;
import java.io.File;
/**
* Created by alex on 10/21/16.
*/
public class PreferenceActivity extends Activity implements View.OnClickListener {
CheckBox checkBoxDebugTileProvider,
checkBoxDebugMode,
checkBoxHardwareAcceleration;
Button buttonSetCache,
buttonManualCacheEntry;
TextView textViewCacheDirectory;
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_prefs);
checkBoxDebugTileProvider = (CheckBox) findViewById(R.id.checkBoxDebugTileProvider);
checkBoxDebugMode = (CheckBox) findViewById(R.id.checkBoxDebugMode);
checkBoxHardwareAcceleration = (CheckBox) findViewById(R.id.checkBoxHardwareAcceleration);
buttonSetCache = (Button) findViewById(R.id.buttonSetCache);
buttonManualCacheEntry = (Button) findViewById(R.id.buttonManualCacheEntry);
textViewCacheDirectory = (TextView) findViewById(R.id.textViewCacheDirectory);
checkBoxDebugTileProvider.setOnClickListener(this);
checkBoxDebugMode.setOnClickListener(this);
checkBoxHardwareAcceleration.setOnClickListener(this);
buttonSetCache.setOnClickListener(this);
buttonManualCacheEntry.setOnClickListener(this);
}
@Override
public void onResume() {
super.onResume();
//TODO load from preferneces
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(this);
checkBoxDebugMode.setChecked(prefs.getBoolean("checkBoxDebugMode", OpenStreetMapTileProviderConstants.DEBUGMODE));
checkBoxDebugTileProvider.setChecked(prefs.getBoolean("checkBoxDebugTileProvider", OpenStreetMapTileProviderConstants.DEBUG_TILE_PROVIDERS));
checkBoxHardwareAcceleration.setChecked(prefs.getBoolean("checkBoxHardwareAcceleration", MapView.hardwareAccelerated));
textViewCacheDirectory.setText(prefs.getString("textViewCacheDirectory", OpenStreetMapTileProviderConstants.getBasePath().getAbsolutePath()));
}
@Override
public void onPause() {
super.onPause();
OpenStreetMapTileProviderConstants.DEBUGMODE = checkBoxDebugMode.isChecked();
OpenStreetMapTileProviderConstants.DEBUG_TILE_PROVIDERS = checkBoxDebugTileProvider.isChecked();
MapView.hardwareAccelerated = checkBoxHardwareAcceleration.isChecked();
OpenStreetMapTileProviderConstants.TILE_PATH_BASE=new File(textViewCacheDirectory.getText().toString());
SharedPreferences.Editor edit = PreferenceManager.getDefaultSharedPreferences(this).edit();
edit.putBoolean("checkBoxDebugMode", checkBoxDebugMode.isChecked());
edit.putBoolean("checkBoxDebugTileProvider", checkBoxDebugTileProvider.isChecked());
edit.putBoolean("checkBoxHardwareAcceleration", checkBoxHardwareAcceleration.isChecked());
edit.putString("textViewCacheDirectory", textViewCacheDirectory.getText().toString());
edit.commit();
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.buttonManualCacheEntry: {
showManualEntry();
}
case R.id.buttonSetCache: {
}
}
}
String m_Text = "";
private void showManualEntry() {
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Title");
// Set up the input
final EditText input = new EditText(this);
// Specify the type of input expected; this, for example, sets the input as a password, and will mask the text
input.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_NO_SUGGESTIONS);
input.setLines(1);
input.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
File file = new File(input.getText().toString());
if (!file.exists()) {
input.setError("Does not exist");
} else if (file.exists() && !file.isDirectory()) {
input.setError("Not a directory");
} else if (!StorageUtils.isWritable(file)){
input.setError("Not writable");
} else {
input.setError(null);
}
}
});
builder.setView(input);
// Set up the buttons
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
if (input.getError()==null) {
m_Text = input.getText().toString();
textViewCacheDirectory.setText(m_Text);
}
}
});
builder.setNegativeButton("Cancel", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.cancel();
}
});
builder.show();
}
}

View file

@ -13,12 +13,6 @@ public interface OpenStreetMapConstants {
// Final Fields // Final Fields
// =========================================================== // ===========================================================
public static final String DEBUGTAG = "OPENSTREETMAP";
public static final boolean DEBUGMODE = false;
public static final int NOT_SET = Integer.MIN_VALUE;
public static final String PREFS_NAME = "org.andnav.osm.prefs"; public static final String PREFS_NAME = "org.andnav.osm.prefs";
public static final String PREFS_TILE_SOURCE = "tilesource"; public static final String PREFS_TILE_SOURCE = "tilesource";
public static final String PREFS_SCROLL_X = "scrollX"; public static final String PREFS_SCROLL_X = "scrollX";

View file

@ -0,0 +1,47 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="match_parent"
android:layout_height="match_parent">
<CheckBox
android:text="@string/tile_provided_debugging"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/checkBoxDebugTileProvider" />
<CheckBox
android:text="@string/debug_logging"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/checkBoxDebugMode" />
<CheckBox
android:text="@string/enable_mapview_hardware_acceleration"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/checkBoxHardwareAcceleration" />
<TextView
android:text="@string/cache_directory"
android:layout_width="match_parent"
android:layout_height="wrap_content"
/>
<TextView
android:text="/storage/sdcard"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/textViewCacheDirectory" />
<Button
android:text="Pick Cache Location"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/buttonSetCache" />
<Button
android:text="Enter Cache Location"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/buttonManualCacheEntry" />
</LinearLayout>

View file

@ -35,5 +35,9 @@
<string name="bt_center_map_description">Center on my location</string> <string name="bt_center_map_description">Center on my location</string>
<string name="bt_follow_me_description">Follow me</string> <string name="bt_follow_me_description">Follow me</string>
<string name="debug_logging">Debug Logging</string>
<string name="tile_provided_debugging">Tile Provided Debugging</string>
<string name="cache_directory">Cache Directory</string>
<string name="enable_mapview_hardware_acceleration">Enable MapView Hardware Acceleration</string>
</resources> </resources>

View file

@ -0,0 +1,180 @@
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="html" indent="yes"/>
<xsl:decimal-format decimal-separator="." grouping-separator="," />
<xsl:key name="files" match="file" use="@name" />
<!-- Checkstyle XML Style Sheet by Stephane Bailliez <sbailliez@apache.org> -->
<!-- Part of the Checkstyle distribution found at http://checkstyle.sourceforge.net -->
<!-- Usage (generates checkstyle_report.html): -->
<!-- <checkstyle failonviolation="false" config="${check.config}"> -->
<!-- <fileset dir="${src.dir}" includes="**/*.java"/> -->
<!-- <formatter type="xml" toFile="${doc.dir}/checkstyle_report.xml"/> -->
<!-- </checkstyle> -->
<!-- <style basedir="${doc.dir}" destdir="${doc.dir}" -->
<!-- includes="checkstyle_report.xml" -->
<!-- style="${doc.dir}/checkstyle-noframes-sorted.xsl"/> -->
<xsl:template match="checkstyle">
<html>
<head>
<style type="text/css">
.bannercell {
border: 0px;
padding: 0px;
}
body {
margin-left: 10;
margin-right: 10;
font:normal 80% arial,helvetica,sanserif;
background-color:#FFFFFF;
color:#000000;
}
.a td {
background: #efefef;
}
.b td {
background: #fff;
}
th, td {
text-align: left;
vertical-align: top;
}
th {
font-weight:bold;
background: #ccc;
color: black;
}
table, th, td {
font-size:100%;
border: none
}
table.log tr td, tr th {
}
h2 {
font-weight:bold;
font-size:140%;
margin-bottom: 5;
}
h3 {
font-size:100%;
font-weight:bold;
background: #525D76;
color: white;
text-decoration: none;
padding: 5px;
margin-right: 2px;
margin-left: 2px;
margin-bottom: 0;
}
</style>
</head>
<body>
<a name="top"></a>
<!-- jakarta logo -->
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr>
<td class="bannercell" rowspan="2">
<!--a href="http://jakarta.apache.org/">
<img src="http://jakarta.apache.org/images/jakarta-logo.gif" alt="http://jakarta.apache.org" align="left" border="0"/>
</a-->
</td>
<td class="text-align:right"><h2>CheckStyle Audit</h2></td>
</tr>
<tr>
<td class="text-align:right">Designed for use with <a href='http://checkstyle.sourceforge.net/'>CheckStyle</a> and <a href='http://jakarta.apache.org'>Ant</a>.</td>
</tr>
</table>
<hr size="1"/>
<!-- Summary part -->
<xsl:apply-templates select="." mode="summary"/>
<hr size="1" width="100%" align="left"/>
<!-- Package List part -->
<xsl:apply-templates select="." mode="filelist"/>
<hr size="1" width="100%" align="left"/>
<!-- For each package create its part -->
<xsl:apply-templates select="file[@name and generate-id(.) = generate-id(key('files', @name))]" />
<hr size="1" width="100%" align="left"/>
</body>
</html>
</xsl:template>
<xsl:template match="checkstyle" mode="filelist">
<h3>Files</h3>
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
<tr>
<th>Name</th>
<th>Errors</th>
</tr>
<xsl:for-each select="file[@name and generate-id(.) = generate-id(key('files', @name))]">
<xsl:sort data-type="number" order="descending" select="count(key('files', @name)/error)"/>
<xsl:variable name="currentName" select="@name" />
<xsl:variable name="errorCount" select="count(key('files', @name)/error)"/>
<tr>
<xsl:call-template name="alternated-row"/>
<td><a href="#f-{@name}"><xsl:value-of select="@name"/></a></td>
<td><xsl:value-of select="$errorCount"/></td>
</tr>
</xsl:for-each>
</table>
</xsl:template>
<xsl:template match="file">
<a name="f-{@name}"></a>
<h3>File <xsl:value-of select="@name"/></h3>
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
<tr>
<th>Error Description</th>
<th>Line</th>
</tr>
<xsl:for-each select="key('files', @name)/error">
<xsl:sort data-type="number" order="ascending" select="@line"/>
<tr>
<xsl:call-template name="alternated-row"/>
<td><xsl:value-of select="@message"/></td>
<td><xsl:value-of select="@line"/></td>
</tr>
</xsl:for-each>
</table>
<a href="#top">Back to top</a>
</xsl:template>
<xsl:template match="checkstyle" mode="summary">
<h3>Summary</h3>
<xsl:variable name="fileCount" select="count(file[@name and generate-id(.) = generate-id(key('files', @name))])"/>
<xsl:variable name="errorCount" select="count(file/error)"/>
<table class="log" border="0" cellpadding="5" cellspacing="2" width="100%">
<tr>
<th>Files</th>
<th>Errors</th>
</tr>
<tr>
<xsl:call-template name="alternated-row"/>
<td><xsl:value-of select="$fileCount"/></td>
<td><xsl:value-of select="$errorCount"/></td>
</tr>
</table>
</xsl:template>
<xsl:template name="alternated-row">
<xsl:attribute name="class">
<xsl:if test="position() mod 2 = 1">a</xsl:if>
<xsl:if test="position() mod 2 = 0">b</xsl:if>
</xsl:attribute>
</xsl:template>
</xsl:stylesheet>