mirror of
https://github.com/introlab/rtabmap.git
synced 2026-09-01 17:10:26 +08:00
Tango: added presets (#190)
This commit is contained in:
@@ -286,8 +286,7 @@
|
||||
|
||||
</PreferenceCategory>
|
||||
</PreferenceScreen>
|
||||
|
||||
<ListPreference
|
||||
<ListPreference
|
||||
android:key="@string/pref_key_gain_max_radius"
|
||||
android:title="@string/pref_title_gain_max_radius"
|
||||
android:summary="@string/pref_summary_gain_max_radius"
|
||||
@@ -301,7 +300,15 @@
|
||||
android:entries="@array/pref_cluster_ratio_keys"
|
||||
android:entryValues="@array/pref_cluster_ratio_values"
|
||||
android:defaultValue="@string/pref_default_cluster_ratio"/>
|
||||
|
||||
</PreferenceCategory>
|
||||
<PreferenceCategory
|
||||
android:title="@string/pref_title_presets">
|
||||
<Preference android:title="@string/pref_title_open_button"
|
||||
android:key="@string/pref_key_open_button"/>
|
||||
<Preference android:title="@string/pref_title_save_button"
|
||||
android:key="@string/pref_key_save_button"/>
|
||||
<Preference android:title="@string/pref_title_remove_button"
|
||||
android:key="@string/pref_key_remove_button"/>
|
||||
<Preference android:title="@string/pref_title_reset_button"
|
||||
android:key="@string/pref_key_reset_button"/>
|
||||
</PreferenceCategory>
|
||||
|
||||
@@ -41,6 +41,9 @@
|
||||
<string name="pref_default_tags">rtabmap 3dscan tango</string>
|
||||
<string name="pref_key_rendering">pref_key_rendering</string>
|
||||
<string name="pref_default_rendering">2</string>
|
||||
<string name="pref_key_open_button">pref_key_open_button</string>
|
||||
<string name="pref_key_save_button">pref_key_save_button</string>
|
||||
<string name="pref_key_remove_button">pref_key_remove_button</string>
|
||||
<string name="pref_key_reset_button">pref_key_reset_button</string>
|
||||
<string name="pref_key_density">pref_key_density</string>
|
||||
<string name="pref_default_density">1</string>
|
||||
@@ -763,6 +766,10 @@
|
||||
<item>"0.01"</item>
|
||||
</string-array>
|
||||
|
||||
<string name="pref_title_presets">Presets</string>
|
||||
<string name="pref_title_open_button">Open</string>
|
||||
<string name="pref_title_save_button">Save</string>
|
||||
<string name="pref_title_remove_button">Remove</string>
|
||||
<string name="pref_title_reset_button">Restore All Default Settings</string>
|
||||
<string name="title_activity_sketchfab">SketchfabActivity</string>
|
||||
<string name="hello_world">Hello world!</string>
|
||||
|
||||
@@ -1,23 +1,36 @@
|
||||
package com.introlab.rtabmap;
|
||||
|
||||
import android.app.Activity;
|
||||
import java.io.File;
|
||||
import java.text.SimpleDateFormat;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.Iterator;
|
||||
import java.util.Map.Entry;
|
||||
|
||||
import android.app.AlertDialog;
|
||||
import android.content.DialogInterface;
|
||||
import android.content.SharedPreferences;
|
||||
import android.content.SharedPreferences.OnSharedPreferenceChangeListener;
|
||||
import android.os.Bundle;
|
||||
import android.preference.ListPreference;
|
||||
import android.preference.Preference;
|
||||
import android.preference.PreferenceActivity;
|
||||
import android.preference.PreferenceManager;
|
||||
import android.text.InputType;
|
||||
import android.view.WindowManager;
|
||||
import android.view.inputmethod.EditorInfo;
|
||||
import android.widget.EditText;
|
||||
|
||||
public class SettingsActivity extends PreferenceActivity implements OnSharedPreferenceChangeListener {
|
||||
|
||||
private SettingsActivity getActivity() {return this;}
|
||||
|
||||
@Override
|
||||
public void onCreate(Bundle savedInstanceState) {
|
||||
super.onCreate(savedInstanceState);
|
||||
addPreferencesFromResource(R.layout.activity_settings);
|
||||
|
||||
Preference button = findPreference(getString(R.string.pref_key_reset_button));
|
||||
button.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
Preference buttonReset = findPreference(getString(R.string.pref_key_reset_button));
|
||||
buttonReset.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
getPreferenceScreen().getSharedPreferences().edit().clear().commit();
|
||||
@@ -28,6 +41,148 @@ public class SettingsActivity extends PreferenceActivity implements OnSharedPref
|
||||
}
|
||||
});
|
||||
|
||||
Preference buttonOpen = findPreference(getString(R.string.pref_key_open_button));
|
||||
buttonOpen.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
File prefsdir = new File(getApplicationInfo().dataDir,"shared_prefs");
|
||||
if(prefsdir.exists() && prefsdir.isDirectory()){
|
||||
ArrayList<String> filesArray = new ArrayList<String>(Arrays.asList(prefsdir.list()));
|
||||
ArrayList<String> newList = new ArrayList<String>();
|
||||
filesArray.remove("com.introlab.rtabmap_preferences.xml");
|
||||
for (String s : filesArray) {
|
||||
newList.add(s.substring(0, s.length()-4)); // rip off the ".xml"
|
||||
}
|
||||
final String[] files = newList.toArray(new String[filesArray.size()]);
|
||||
if(files.length > 0)
|
||||
{
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setTitle("Choose Presets:");
|
||||
builder.setItems(files, new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, final int which) {
|
||||
//sp1 is the shared pref to copy to
|
||||
SharedPreferences.Editor ed = getPreferenceScreen().getSharedPreferences().edit();
|
||||
SharedPreferences sp = getActivity().getSharedPreferences(files[which], MODE_PRIVATE); //The shared preferences to copy from
|
||||
//Cycle through all the entries in the sp
|
||||
for(Entry<String,?> entry : sp.getAll().entrySet()){
|
||||
Object v = entry.getValue();
|
||||
String key = entry.getKey();
|
||||
//Now we just figure out what type it is, so we can copy it.
|
||||
// Note that i am using Boolean and Integer instead of boolean and int.
|
||||
// That's because the Entry class can only hold objects and int and boolean are primatives.
|
||||
if(v instanceof Boolean)
|
||||
// Also note that i have to cast the object to a Boolean
|
||||
// and then use .booleanValue to get the boolean
|
||||
ed.putBoolean(key, ((Boolean)v).booleanValue());
|
||||
else if(v instanceof Float)
|
||||
ed.putFloat(key, ((Float)v).floatValue());
|
||||
else if(v instanceof Integer)
|
||||
ed.putInt(key, ((Integer)v).intValue());
|
||||
else if(v instanceof Long)
|
||||
ed.putLong(key, ((Long)v).longValue());
|
||||
else if(v instanceof String)
|
||||
ed.putString(key, ((String)v));
|
||||
}
|
||||
ed.commit(); //save it.
|
||||
recreate();
|
||||
return;
|
||||
}
|
||||
});
|
||||
builder.show();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
Preference buttonSave = findPreference(getString(R.string.pref_key_save_button));
|
||||
buttonSave.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setTitle("Save Presets:");
|
||||
final EditText input = new EditText(getActivity());
|
||||
input.setInputType(InputType.TYPE_CLASS_TEXT);
|
||||
input.setImeOptions(EditorInfo.IME_FLAG_NO_EXTRACT_UI);
|
||||
builder.setView(input);
|
||||
builder.setPositiveButton("OK", new DialogInterface.OnClickListener() {
|
||||
@Override
|
||||
public void onClick(DialogInterface dialog, int which)
|
||||
{
|
||||
final String fileName = input.getText().toString();
|
||||
dialog.dismiss();
|
||||
if(!fileName.isEmpty())
|
||||
{
|
||||
File newFile = new File(getApplicationInfo().dataDir + "/shared_prefs/" + fileName + ".xml");
|
||||
if(newFile.exists())
|
||||
{
|
||||
new AlertDialog.Builder(getActivity())
|
||||
.setTitle("Presets Already Exist")
|
||||
.setMessage("Do you want to overwrite the existing file?")
|
||||
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
saveConfig(fileName);
|
||||
}
|
||||
})
|
||||
.setNegativeButton("No", new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, int which) {
|
||||
dialog.dismiss();
|
||||
}
|
||||
})
|
||||
.show();
|
||||
}
|
||||
else
|
||||
{
|
||||
saveConfig(fileName);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
AlertDialog alertToShow = builder.create();
|
||||
alertToShow.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
|
||||
alertToShow.show();
|
||||
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
Preference buttonRemove = findPreference(getString(R.string.pref_key_remove_button));
|
||||
buttonRemove.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
|
||||
@Override
|
||||
public boolean onPreferenceClick(Preference preference) {
|
||||
File prefsdir = new File(getApplicationInfo().dataDir,"shared_prefs");
|
||||
if(prefsdir.exists() && prefsdir.isDirectory()){
|
||||
ArrayList<String> filesArray = new ArrayList<String>(Arrays.asList(prefsdir.list()));
|
||||
ArrayList<String> newList = new ArrayList<String>();
|
||||
filesArray.remove("com.introlab.rtabmap_preferences.xml");
|
||||
for (String s : filesArray) {
|
||||
newList.add(s.substring(0, s.length()-4)); // rip off the ".xml"
|
||||
}
|
||||
final String[] files = newList.toArray(new String[filesArray.size()]);
|
||||
if(files.length > 0)
|
||||
{
|
||||
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||
builder.setTitle("Remove Presets:");
|
||||
builder.setItems(files, new DialogInterface.OnClickListener() {
|
||||
public void onClick(DialogInterface dialog, final int which) {
|
||||
File file = new File(getApplicationInfo().dataDir + "/shared_prefs/" + files[which] + ".xml");
|
||||
if(file.exists())
|
||||
{
|
||||
file.delete();
|
||||
}
|
||||
return;
|
||||
}
|
||||
});
|
||||
builder.show();
|
||||
}
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
((Preference)findPreference(getString(R.string.pref_key_density))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_density))).getEntry() + ") "+getString(R.string.pref_summary_density));
|
||||
((Preference)findPreference(getString(R.string.pref_key_depth))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_depth))).getEntry() + ") "+getString(R.string.pref_summary_depth));
|
||||
((Preference)findPreference(getString(R.string.pref_key_min_depth))).setSummary("("+((ListPreference)findPreference(getString(R.string.pref_key_min_depth))).getEntry() + ") "+getString(R.string.pref_summary_min_depth));
|
||||
@@ -135,4 +290,33 @@ public class SettingsActivity extends PreferenceActivity implements OnSharedPref
|
||||
getPreferenceScreen().getSharedPreferences()
|
||||
.unregisterOnSharedPreferenceChangeListener(this);
|
||||
}
|
||||
|
||||
private void saveConfig(String fileName)
|
||||
{
|
||||
//sp1 is the shared pref to copy to
|
||||
SharedPreferences.Editor ed = getActivity().getSharedPreferences(fileName, MODE_PRIVATE).edit();
|
||||
SharedPreferences sp = getPreferenceScreen().getSharedPreferences(); //The shared preferences to copy from
|
||||
ed.clear(); // This clears the one we are copying to, but you don't necessarily need to do that.
|
||||
//Cycle through all the entries in the sp
|
||||
for(Entry<String,?> entry : sp.getAll().entrySet()){
|
||||
Object v = entry.getValue();
|
||||
String key = entry.getKey();
|
||||
//Now we just figure out what type it is, so we can copy it.
|
||||
// Note that i am using Boolean and Integer instead of boolean and int.
|
||||
// That's because the Entry class can only hold objects and int and boolean are primatives.
|
||||
if(v instanceof Boolean)
|
||||
// Also note that i have to cast the object to a Boolean
|
||||
// and then use .booleanValue to get the boolean
|
||||
ed.putBoolean(key, ((Boolean)v).booleanValue());
|
||||
else if(v instanceof Float)
|
||||
ed.putFloat(key, ((Float)v).floatValue());
|
||||
else if(v instanceof Integer)
|
||||
ed.putInt(key, ((Integer)v).intValue());
|
||||
else if(v instanceof Long)
|
||||
ed.putLong(key, ((Long)v).longValue());
|
||||
else if(v instanceof String)
|
||||
ed.putString(key, ((String)v));
|
||||
}
|
||||
ed.commit(); //save it.
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user