From 5e36e79854a164a70da815393889600608502554 Mon Sep 17 00:00:00 2001 From: prabhakar369 Date: Sat, 27 Apr 2019 18:54:37 +0530 Subject: [PATCH] Directory Picker Directory Picker Fixed typos fixed Null pointer exception reformated code in xml added /ODK to filePath Changed method names Added /odk Deleted some unused changes Made code Checkstyle removed unused strings --- .../share/preferences/SettingsPreference.java | 53 ++++++++++++------- .../src/main/res/values/strings.xml | 3 +- .../src/main/res/xml/preferences_menu.xml | 28 +++++----- 3 files changed, 51 insertions(+), 33 deletions(-) diff --git a/skunkworks_crow/src/main/java/org/odk/share/preferences/SettingsPreference.java b/skunkworks_crow/src/main/java/org/odk/share/preferences/SettingsPreference.java index d72eef9c..7d60d4d3 100644 --- a/skunkworks_crow/src/main/java/org/odk/share/preferences/SettingsPreference.java +++ b/skunkworks_crow/src/main/java/org/odk/share/preferences/SettingsPreference.java @@ -1,13 +1,14 @@ package org.odk.share.preferences; +import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; -import android.preference.CheckBoxPreference; import android.preference.EditTextPreference; import android.preference.Preference; import android.preference.PreferenceActivity; import android.preference.PreferenceManager; +import android.preference.SwitchPreference; import android.view.LayoutInflater; import android.view.MenuItem; import android.view.View; @@ -20,6 +21,7 @@ import androidx.appcompat.app.AlertDialog; import androidx.appcompat.widget.Toolbar; +import timber.log.Timber; /** @@ -28,10 +30,11 @@ public class SettingsPreference extends PreferenceActivity { + private static final int DIRECTORY_REQUEST_CODE = 9999; EditTextPreference hotspotNamePreference; Preference hotspotPasswordPreference; - CheckBoxPreference passwordRequirePreference; - EditTextPreference odkDestinationDirPreference; + SwitchPreference passwordRequirePreference; + Preference odkDestinationDirPreference; private SharedPreferences prefs; @Override @@ -57,26 +60,25 @@ public boolean onOptionsItemSelected(MenuItem item) { private void addPreferences() { hotspotNamePreference = (EditTextPreference) findPreference(PreferenceKeys.KEY_HOTSPOT_NAME); hotspotPasswordPreference = findPreference(PreferenceKeys.KEY_HOTSPOT_PASSWORD); - passwordRequirePreference = (CheckBoxPreference) findPreference(PreferenceKeys.KEY_HOTSPOT_PWD_REQUIRE); - odkDestinationDirPreference = (EditTextPreference) findPreference(PreferenceKeys.KEY_ODK_DESTINATION_DIR); + passwordRequirePreference = (SwitchPreference) findPreference(PreferenceKeys.KEY_HOTSPOT_PWD_REQUIRE); + odkDestinationDirPreference = findPreference(PreferenceKeys.KEY_ODK_DESTINATION_DIR); - prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); + prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext()); hotspotNamePreference.setSummary(prefs.getString(PreferenceKeys.KEY_HOTSPOT_NAME, getString(R.string.default_hotspot_ssid))); boolean isPasswordSet = prefs.getBoolean(PreferenceKeys.KEY_HOTSPOT_PWD_REQUIRE, false); - odkDestinationDirPreference.setSummary(prefs.getString(PreferenceKeys.KEY_ODK_DESTINATION_DIR, - getString(R.string.default_odk_destination_dir))); + odkDestinationDirPreference.setSummary(prefs.getString(PreferenceKeys.KEY_ODK_DESTINATION_DIR, getString(R.string.default_odk_destination_dir))); hotspotPasswordPreference.setEnabled(isPasswordSet); passwordRequirePreference.setChecked(isPasswordSet); hotspotNamePreference.setOnPreferenceChangeListener(preferenceChangeListener()); hotspotPasswordPreference.setOnPreferenceChangeListener(preferenceChangeListener()); passwordRequirePreference.setOnPreferenceChangeListener(preferenceChangeListener()); - odkDestinationDirPreference.setOnPreferenceChangeListener(preferenceChangeListener()); hotspotPasswordPreference.setOnPreferenceClickListener(preferenceClickListener()); + odkDestinationDirPreference.setOnPreferenceClickListener(preferenceClickListener()); } private Preference.OnPreferenceClickListener preferenceClickListener() { @@ -85,6 +87,9 @@ private Preference.OnPreferenceClickListener preferenceClickListener() { case PreferenceKeys.KEY_HOTSPOT_PASSWORD: showPasswordDialog(); break; + case PreferenceKeys.KEY_ODK_DESTINATION_DIR: + chooseDirectory(); + break; } return false; }; @@ -117,15 +122,6 @@ private Preference.OnPreferenceChangeListener preferenceChangeListener() { hotspotPasswordPreference.setEnabled(false); } break; - case PreferenceKeys.KEY_ODK_DESTINATION_DIR: - String dir = newValue.toString(); - if (dir.length() == 0) { - Toast.makeText(getApplicationContext(), getString(R.string.odk_destination_dir_error), Toast.LENGTH_LONG).show(); - return false; - } else { - odkDestinationDirPreference.setSummary(dir); - } - break; } return true; }; @@ -159,4 +155,25 @@ private void showPasswordDialog() { AlertDialog alertDialog = builder.create(); alertDialog.show(); } + + public void chooseDirectory() { + Intent i = new Intent(Intent.ACTION_OPEN_DOCUMENT_TREE); + i.addCategory(Intent.CATEGORY_DEFAULT); + startActivityForResult(Intent.createChooser(i, getString(R.string.choose_directory)), DIRECTORY_REQUEST_CODE); + } + + public void onActivityResult(int requestCode, int resultCode, Intent data) { + switch (requestCode) { + case DIRECTORY_REQUEST_CODE: + try { + String filePath = (data.getData()).getPath(); + filePath = filePath + getString(R.string.directory_odk); + prefs.edit().putString(PreferenceKeys.KEY_ODK_DESTINATION_DIR, filePath).apply(); + odkDestinationDirPreference.setSummary(prefs.getString(PreferenceKeys.KEY_ODK_DESTINATION_DIR, getString(R.string.default_odk_destination_dir))); + } catch (Exception e) { + Timber.e("Can not choose the Directory"); + } + break; + } + } } diff --git a/skunkworks_crow/src/main/res/values/strings.xml b/skunkworks_crow/src/main/res/values/strings.xml index aaff20bb..0065b7d2 100644 --- a/skunkworks_crow/src/main/res/values/strings.xml +++ b/skunkworks_crow/src/main/res/values/strings.xml @@ -126,8 +126,9 @@ No Forms Found \/sdcard\/odk + /odk + Choose Directory ODK Destination Directory - The destination should not be empty Location Permission Needed Enable location from the settings. diff --git a/skunkworks_crow/src/main/res/xml/preferences_menu.xml b/skunkworks_crow/src/main/res/xml/preferences_menu.xml index 9d0d1dcb..418c2b91 100644 --- a/skunkworks_crow/src/main/res/xml/preferences_menu.xml +++ b/skunkworks_crow/src/main/res/xml/preferences_menu.xml @@ -5,32 +5,32 @@ + android:summary="@string/default_hotspot_ssid" + android:title="@string/title_hotspot_ssid" /> + android:icon="@drawable/ic_vpn_key_black_24dp" + android:key="hotspot_password" + android:summary="********" + android:title="@string/title_hotspot_password" /> - + android:title="@string/set_password" /> - + android:summary="@string/default_odk_destination_dir" + android:title="@string/title_odk_destination_dir" />