Merge branch 'settingsActivity' of s416084/find-my-tutor-android into develop

This commit is contained in:
Marcin Jedyński 2018-10-12 00:26:28 +00:00 committed by Gogs
commit 1de4b0a2ab
12 changed files with 664 additions and 13 deletions

View File

@ -13,6 +13,7 @@ android {
versionCode 1
versionName "1.0"
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
vectorDrawables.useSupportLibrary = true
}
buildTypes {
release {
@ -22,7 +23,7 @@ android {
}
}
repositories{
repositories {
maven {
url 'http://dl.bintray.com/amulyakhare/maven'
}
@ -32,6 +33,9 @@ dependencies {
implementation fileTree(dir: 'libs', include: ['*.jar'])
implementation 'com.android.support:appcompat-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:support-v4:27.1.1'
implementation 'com.android.support:support-vector-drawable:27.1.1'
implementation 'com.android.support.constraint:constraint-layout:1.1.3'
testImplementation 'junit:junit:4.12'
androidTestImplementation 'com.android.support.test:runner:1.0.2'

View File

@ -16,39 +16,45 @@
android:name="android.hardware.location.gps"
android:required="true" />
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".activity.StartupActivity"
android:label="@string/title_activity_startup"
android:launchMode="singleInstance"
android:theme="@style/AppTheme.NoActionBar">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity
android:name=".activity.MainActivity"
android:label="@string/title_activity_main"
android:launchMode="singleTop">
</activity>
android:launchMode="singleTop" />
<activity
android:name=".activity.LoginActivity"
android:excludeFromRecents="true"
android:launchMode="singleTask"
android:label="@string/title_activity_login"
android:noHistory="true">
</activity>
android:launchMode="singleTask"
android:noHistory="true" />
<activity
android:name=".activity.SettingsActivity"
android:label="@string/title_activity_settings" />
<activity
android:name=".activity.SharingActivity"
android:label="@string/title_activity_sharing" />
<service

View File

@ -0,0 +1,109 @@
package com.uam.wmi.findmytutor.activity;
import android.content.res.Configuration;
import android.os.Bundle;
import android.preference.PreferenceActivity;
import android.support.annotation.LayoutRes;
import android.support.annotation.Nullable;
import android.support.v7.app.ActionBar;
import android.support.v7.app.AppCompatDelegate;
import android.support.v7.widget.Toolbar;
import android.view.MenuInflater;
import android.view.View;
import android.view.ViewGroup;
/**
* A {@link android.preference.PreferenceActivity} which implements and proxies the necessary calls
* to be used with AppCompat.
*/
public abstract class AppCompatPreferenceActivity extends PreferenceActivity {
private AppCompatDelegate mDelegate;
@Override
protected void onCreate(Bundle savedInstanceState) {
getDelegate().installViewFactory();
getDelegate().onCreate(savedInstanceState);
super.onCreate(savedInstanceState);
}
@Override
protected void onPostCreate(Bundle savedInstanceState) {
super.onPostCreate(savedInstanceState);
getDelegate().onPostCreate(savedInstanceState);
}
public ActionBar getSupportActionBar() {
return getDelegate().getSupportActionBar();
}
public void setSupportActionBar(@Nullable Toolbar toolbar) {
getDelegate().setSupportActionBar(toolbar);
}
@Override
public MenuInflater getMenuInflater() {
return getDelegate().getMenuInflater();
}
@Override
public void setContentView(@LayoutRes int layoutResID) {
getDelegate().setContentView(layoutResID);
}
@Override
public void setContentView(View view) {
getDelegate().setContentView(view);
}
@Override
public void setContentView(View view, ViewGroup.LayoutParams params) {
getDelegate().setContentView(view, params);
}
@Override
public void addContentView(View view, ViewGroup.LayoutParams params) {
getDelegate().addContentView(view, params);
}
@Override
protected void onPostResume() {
super.onPostResume();
getDelegate().onPostResume();
}
@Override
protected void onTitleChanged(CharSequence title, int color) {
super.onTitleChanged(title, color);
getDelegate().setTitle(title);
}
@Override
public void onConfigurationChanged(Configuration newConfig) {
super.onConfigurationChanged(newConfig);
getDelegate().onConfigurationChanged(newConfig);
}
@Override
protected void onStop() {
super.onStop();
getDelegate().onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
getDelegate().onDestroy();
}
public void invalidateOptionsMenu() {
getDelegate().invalidateOptionsMenu();
}
private AppCompatDelegate getDelegate() {
if (mDelegate == null) {
mDelegate = AppCompatDelegate.create(this, null);
}
return mDelegate;
}
}

View File

@ -0,0 +1,121 @@
package com.uam.wmi.findmytutor.activity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.view.MenuItem;
import com.uam.wmi.findmytutor.R;
public class SettingsActivity extends AppCompatPreferenceActivity {
private static final String TAG = SettingsActivity.class.getSimpleName();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//getSupportActionBar().setDisplayHomeAsUpEnabled(true);
// load settings fragment
getFragmentManager().beginTransaction().replace(android.R.id.content, new MainPreferenceFragment()).commit();
}
public static class MainPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_main);
//TODO add on change listeners for preferences
// feedback preference click listener
Preference myPref = findPreference(getString(R.string.key_send_feedback));
myPref.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() {
public boolean onPreferenceClick(Preference preference) {
sendFeedback(getActivity());
return true;
}
});
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
}
return super.onOptionsItemSelected(item);
}
private static void bindPreferenceSummaryToValue(Preference preference) {
preference.setOnPreferenceChangeListener(sBindPreferenceSummaryToValueListener);
sBindPreferenceSummaryToValueListener.onPreferenceChange(preference,
PreferenceManager
.getDefaultSharedPreferences(preference.getContext())
.getString(preference.getKey(), ""));
}
/**
* A preference value change listener that updates the preference's summary
* to reflect its new value.
*/
private static Preference.OnPreferenceChangeListener sBindPreferenceSummaryToValueListener = new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
String stringValue = newValue.toString();
if (preference instanceof ListPreference) {
// For list preferences, look up the correct display value in
// the preference's 'entries' list.
ListPreference listPreference = (ListPreference) preference;
int index = listPreference.findIndexOfValue(stringValue);
// Set the summary to reflect the new value.
preference.setSummary(
index >= 0
? listPreference.getEntries()[index]
: null);
} else if (preference instanceof EditTextPreference) {
if (preference.getKey().equals("key_gallery_name")) {
// update the changed gallery name to summary filed
preference.setSummary(stringValue);
}
} else {
preference.setSummary(stringValue);
}
return true;
}
};
/**
* Email client intent to send support mail
* Appends the necessary device information to email body
* useful when providing support
*/
public static void sendFeedback(Context context) {
String body = null;
try {
body = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
body = "\n\n-----------------------------\nPlease don't remove this information\n Device OS: Android \n Device OS version: " +
Build.VERSION.RELEASE + "\n App Version: " + body + "\n Device Brand: " + Build.BRAND +
"\n Device Model: " + Build.MODEL + "\n Device Manufacturer: " + Build.MANUFACTURER;
} catch (PackageManager.NameNotFoundException e) {
}
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"team@findmytutor.com"});
intent.putExtra(Intent.EXTRA_SUBJECT, "Query from android app");
intent.putExtra(Intent.EXTRA_TEXT, body);
context.startActivity(Intent.createChooser(intent, context.getString(R.string.choose_email_client)));
}
}

View File

@ -0,0 +1,112 @@
package com.uam.wmi.findmytutor.activity;
import android.app.Activity;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.os.Build;
import android.os.Bundle;
import android.preference.EditTextPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
import android.view.MenuItem;
import com.uam.wmi.findmytutor.R;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;
public class SharingActivity extends AppCompatPreferenceActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
getFragmentManager().beginTransaction().replace(android.R.id.content, new MainPreferenceFragment()).commit();
}
public static class MainPreferenceFragment extends PreferenceFragment {
@Override
public void onCreate(final Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.pref_sharing);
Preference manualStatus = findPreference("key_manual_status");
manualStatus.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
ListPreference lp = (ListPreference) findPreference("key_status_value");
updateListPreference(lp ,newValue,"manual_statuses");
return true;
}
});
Preference manualLoction = findPreference("key_manual_location_custom");
manualLoction.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
ListPreference lp = (ListPreference) findPreference("manual_location_list_title");
updateListPreference(lp ,newValue,"manual_locations");
return true;
}
});
}
protected void updateListPreference(ListPreference lp,Object newValue,String storageKey){
CharSequence [] entries = lp.getEntries();
Set <String> defaultEntries = new HashSet(Arrays.asList(entries));
SharedPreferences sharedPref = getActivity().getPreferences(Context.MODE_PRIVATE);
Set <String> manualStatusSet = sharedPref.getStringSet(storageKey,defaultEntries);
manualStatusSet.add((String) newValue);
String [] manualStatusArr = manualStatusSet.toArray(new String[0]);
Arrays.sort(manualStatusArr);
setListPreferenceData(lp.getKey(),manualStatusArr);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putStringSet(storageKey,manualStatusSet);
editor.commit();
}
protected ListPreference setListPreferenceData(String lp_name, String [] entries) {
ListPreference lp = (ListPreference) findPreference(lp_name);
lp.setEntries(entries);
CharSequence[] entryValues = new CharSequence [entries.length];
for (int i = 0; i < entries.length; i++){
entryValues[i] = Integer.toString(i+1);
}
lp.setDefaultValue("1");
lp.setEntryValues(entryValues);
return lp;
}
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
if (item.getItemId() == android.R.id.home) {
onBackPressed();
}
return super.onOptionsItemSelected(item);
}
/**
* Email client intent to send support mail
* Appends the necessary device information to email body
* useful when providing support
*/
/* public static void sendFeedback(Context context) {
String body = null;
try {
body = context.getPackageManager().getPackageInfo(context.getPackageName(), 0).versionName;
body = "\n\n-----------------------------\nPlease don't remove this information\n Device OS: Android \n Device OS version: " +
Build.VERSION.RELEASE + "\n App Version: " + body + "\n Device Brand: " + Build.BRAND +
"\n Device Model: " + Build.MODEL + "\n Device Manufacturer: " + Build.MANUFACTURER;
} catch (PackageManager.NameNotFoundException e) {
}
Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("message/rfc822");
intent.putExtra(Intent.EXTRA_EMAIL, new String[]{"team@findmytutor.com"});
intent.putExtra(Intent.EXTRA_SUBJECT, "Query from android app");
intent.putExtra(Intent.EXTRA_TEXT, body);
context.startActivity(Intent.createChooser(intent, context.getString(R.string.choose_email_client)));
}*/
}

View File

@ -14,7 +14,9 @@ public class StartupActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
if (isLoggedIn()) {
if (isLoggedIn()){
Intent startupIntent = new Intent(this, MainActivity.class);
startupIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP);
startActivity(startupIntent);
@ -23,7 +25,6 @@ public class StartupActivity extends AppCompatActivity {
Intent loginIntent = new Intent(this, LoginActivity.class);
startActivityForResult(loginIntent, AUTHENTICATION_REQUEST_CODE);
}
super.onCreate(savedInstanceState);
}

View File

@ -67,7 +67,7 @@
<Switch
android:id="@+id/tutor_login_switch"
android:layout_width="match_parent"
android:layout_width="192dp"
android:layout_height="wrap_content"
android:text="Login as Tutor" />

View File

@ -7,4 +7,43 @@
<string name="error_invalid_password">Hasło jest zbyt krótkie</string>
<string name="error_invalid_email">Nieprawidłowy mail</string>
<string name="error_field_required">To pole jest wymagane</string>
<!--Ustawienia-->
<string name="title_sharing">Udostępnianie</string>
<string name="settings_category_location">Udostępnianie lokalizacji</string>
<string name="title_location_level">Poziom udostępniania</string>
<string name="location_level_presence">Obecność</string>
<string name="location_level_approximated">Przybliżona</string>
<string name="location_level_precise">Dokładna</string>
<string name="settings_location_level">Sczegółowość udostępniania</string>
<string name="key_location_level">key_location_level</string>
<string name="title_description">Status</string>
<string name="description_notdisturb">Nie przeszkadzać</string>
<string name="description_awaiting">Czekam na studentów</string>
<string name="description_onholidays">Na wakacjach</string>
<string name="settings_description">Opis</string>
<string name="key_description">key_description</string>
<string name="settings_category_general">Ogólne</string>
<string name="key_notifications_enabled">key_notifications_enabled</string>
<string name="title_notification">Włącz powiadomienia</string>
<string name="title_language">Język</string>
<string name="lang_eng">Angielski</string>
<string name="lang_pol">Polski</string>
<string name="settings_language">Wybierz język</string>
<string name="pref_header_about">O aplikacji</string>
<string name="summary_about">We are just like you :)\nA group of people trying to shape our everyday life into something useful. We hope to bring you the best product and quality of service.\nThank you for using our app !</string>
<string name="app_version">0.1.0</string>
<string name="summary_support">Masz jakieś pytania? Uwagi? Chętnie odpiszemy!</string>
<string name="title_send_feedback">Skontaktuj się z nami</string>
<string name="privacy_policy">Polityka Prywatności</string>
<string name="url_privacy">http://findmytutor.projektstudencki.pl/privacy-policy/</string>
<string name="title_terms">Warunki korzystania</string>
<string name="url_terms">http://findmytutor.projektstudencki.pl/terms-of-service/</string>
<string name="title_version">Wersja</string>
<string name="choose_email_client">Wybierz klienta poczty</string>
</resources>

View File

@ -40,4 +40,42 @@
<item name="grey_500" type="color">#9e9e9e</item>
<item name="blue_grey_500" type="color">#607d8b</item>
</array>
<string-array name="location_level_entries">
<item>@string/location_level_presence</item>
<item>@string/location_level_approximated</item>
<item>@string/location_level_precise</item>
</string-array>
<string-array name="location_levels_values">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
<string-array name="status_entries">
<item>@string/description_available</item>
<item>@string/description_busy</item>
<item>@string/description_consultation</item>
</string-array>
<string-array name="status_values">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
<string-array name="manual_location_entries">
<item>@string/assembly_c</item>
<item>@string/assembly_a</item>
<item>@string/passage_d</item>
</string-array>
<string-array name="manual_location_values">
<item>0</item>
<item>1</item>
<item>2</item>
</string-array>
<string-array name="language_entries">
<item>@string/lang_eng</item>
<item>@string/lang_pol</item>
</string-array>
<string-array name="language_values">
<item>0</item>
<item>1</item>
</string-array>
</resources>

View File

@ -41,6 +41,146 @@ functionality.</string>
<string name="action_black_list">Black List</string>
<string name="action_white_list">White List</string>
<string name="title_activity_settings">Settings</string>
<!-- Strings related to SharingActivity -->
<string name="title_activity_sharing">Sharing</string>
<!-- Strings related to settings -->
<string name="title_sharing">Sharing</string>
<string name="settings_category_location">Location sharing</string>
<string name="title_location_level">Sharing level</string>
<string name="location_level_presence">Only presence</string>
<string name="location_level_approximated">Approximated</string>
<string name="location_level_precise">Exact</string>
<string name="settings_location_level">Location level</string>
<string name="key_location_level">key_location_level</string>
<string name="status_list_title">Choose status</string>
<string name="status_switch_title">Status</string>
<string name="description_busy">Busy</string>
<string name="description_available">Available</string>
<string name="description_consultation">Consultation</string>
<string name="title_manual_status">Add custom status</string>
<string name="settings_description">Descrition</string>
<string name="key_description">key_description</string>
<string name="manual_location">Manual location</string>
<string name="title_list_manual_location">Choose manual location</string>
<string name="title_manual_location">Add custom location</string>
<string name="assembly_a">Assembly Hall A</string>
<string name="assembly_c">Assembly Hall C</string>
<string name="passage_d">Passage D</string>
<string name="settings_category_general">General</string>
<string name="key_notifications_enabled">key_notifications_enabled</string>
<string name="title_notification">Enable notifications</string>
<string name="title_language">Language</string>
<string name="lang_eng">English</string>
<string name="lang_pol">Polish</string>
<string name="settings_language">Choose language</string>
<string name="key_language">key_language</string>
<string name="pref_header_about">About</string>
<string name="summary_about">We are just like you :)\nA group of people trying to shape our everyday life into something useful. We hope to bring you the best product and quality of service.\nThank you for using our app !</string>
<string name="app_version">0.1.0</string>
<string name="summary_support">Got any queries? We are happy to help!</string>
<string name="title_send_feedback">Send Feedback</string>
<string name="key_send_feedback">key_send_feedback</string>
<string name="privacy_policy">Privacy Policy</string>
<string name="url_privacy">http://findmytutor.projektstudencki.pl/privacy-policy/</string>
<string name="title_terms">Terms &amp; Conditions</string>
<string name="url_terms">http://findmytutor.projektstudencki.pl/terms-of-service/</string>
<string name="title_version">Version</string>
<string name="choose_email_client">Choose email client</string>
<string name="title_activity_settings2">Settings</string>
<!-- Strings related to Settings -->
<!-- Example General settings -->
<string name="pref_header_general">General</string>
<string name="pref_title_social_recommendations">Enable social recommendations</string>
<string name="pref_description_social_recommendations">Recommendations for people to contact
based on your message history
</string>
<string name="pref_title_display_name">Display name</string>
<string name="pref_default_display_name">John Smith</string>
<string name="pref_title_add_friends_to_messages">Add friends to messages</string>
<string-array name="pref_example_list_titles">
<item>Always</item>
<item>When possible</item>
<item>Never</item>
</string-array>
<string-array name="pref_example_list_values">
<item>1</item>
<item>0</item>
<item>-1</item>
</string-array>
<!-- Example settings for Data & Sync -->
<string name="pref_header_data_sync">Data &amp; sync</string>
<string name="pref_title_sync_frequency">Sync frequency</string>
<string-array name="pref_sync_frequency_titles">
<item>15 minutes</item>
<item>30 minutes</item>
<item>1 hour</item>
<item>3 hours</item>
<item>6 hours</item>
<item>Never</item>
</string-array>
<string-array name="pref_sync_frequency_values">
<item>15</item>
<item>30</item>
<item>60</item>
<item>180</item>
<item>360</item>
<item>-1</item>
</string-array>
<string-array name="list_preference_entries">
<item>Entry 1</item>
<item>Entry 2</item>
<item>Entry 3</item>
</string-array>
<string-array name="list_preference_entry_values">
<item>1</item>
<item>2</item>
<item>3</item>
</string-array>
<string-array name="multi_select_list_preference_default_value" />
<string name="pref_title_system_sync_settings">System sync settings</string>
<!-- Example settings for Notifications -->
<string name="pref_header_notifications">Notifications</string>
<string name="pref_title_new_message_notifications">New message notifications</string>
<string name="pref_title_ringtone">Ringtone</string>
<string name="pref_ringtone_silent">Silent</string>
<string name="pref_title_vibrate">Vibrate</string>
<string name="settings">Settings</string>
<string name="ok">OK</string>
@ -55,5 +195,5 @@ functionality.</string>
<item quantity="one">One location reported</item>
<item quantity="other">%d locations reported</item>
</plurals>
<string name="default_channel">Default channel</string>
</resources>

View File

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/settings_category_general">
<SwitchPreference
android:defaultValue="true"
android:key="@string/key_notifications_enabled"
android:title="@string/title_notification" />
<ListPreference
android:defaultValue="0"
android:dialogTitle="@string/settings_language"
android:entries="@array/language_entries"
android:entryValues="@array/language_values"
android:key="@string/key_language"
android:summary="%s"
android:title="@string/title_language" />
</PreferenceCategory>
</PreferenceScreen>

View File

@ -0,0 +1,59 @@
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/settings_category_location">
<SwitchPreference
android:defaultValue="false"
android:disableDependentsState="false"
android:key="key_sharing_enabled"
android:persistent="true"
android:title="@string/title_sharing"/>
<ListPreference
android:defaultValue="1"
android:dialogTitle="@string/settings_location_level"
android:entries="@array/location_level_entries"
android:entryValues="@array/location_levels_values"
android:key="@string/key_location_level"
android:summary="%s"
android:title="@string/title_location_level" />
<SwitchPreference
android:defaultValue="false"
android:disableDependentsState="false"
android:key="key_status_enabled"
android:persistent="true"
android:title="@string/status_switch_title"/>
<ListPreference
android:defaultValue="1"
android:key="key_status_value"
android:entries="@array/status_entries"
android:entryValues="@array/status_values"
android:summary="%s"
android:title="@string/status_list_title" />
<EditTextPreference
android:key="key_manual_status"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="@string/title_manual_status"
/>
<SwitchPreference
android:defaultValue="false"
android:disableDependentsState="false"
android:key="key_manual_location_enabled"
android:persistent="true"
android:title="@string/manual_location"/>
<ListPreference
android:defaultValue="1"
android:key="manual_location_list_title"
android:entries="@array/manual_location_entries"
android:entryValues="@array/manual_location_values"
android:summary="%s"
android:title="@string/title_list_manual_location" />
<EditTextPreference
android:key="key_manual_location_custom"
android:selectAllOnFocus="true"
android:singleLine="true"
android:title="@string/title_manual_location"
/>
</PreferenceCategory>
</PreferenceScreen>