diff --git a/mobile/android/search/java/org/mozilla/search/PreSearchFragment.java b/mobile/android/search/java/org/mozilla/search/PreSearchFragment.java index 4362147fec69..7bfe8807e033 100644 --- a/mobile/android/search/java/org/mozilla/search/PreSearchFragment.java +++ b/mobile/android/search/java/org/mozilla/search/PreSearchFragment.java @@ -5,6 +5,7 @@ package org.mozilla.search; import android.app.Activity; +import android.content.Intent; import android.database.Cursor; import android.os.Bundle; import android.support.v4.app.Fragment; @@ -76,7 +77,10 @@ public class PreSearchFragment extends Fragment { @Override public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedState) { - listView = (ListView) inflater.inflate(R.layout.search_fragment_pre_search, container, false); + final View mainView = inflater.inflate(R.layout.search_fragment_pre_search, container, false); + + // Initialize listview. + listView = (ListView) mainView.findViewById(R.id.list_view); listView.setAdapter(cursorAdapter); listView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override @@ -91,7 +95,15 @@ public class PreSearchFragment extends Fragment { } } }); - return listView; + + // Apply click handler to settings button. + mainView.findViewById(R.id.settings_button).setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + startActivity(new Intent(getActivity(), SearchPreferenceActivity.class)); + } + }); + return mainView; } @Override diff --git a/mobile/android/search/java/org/mozilla/search/SearchPreferenceActivity.java b/mobile/android/search/java/org/mozilla/search/SearchPreferenceActivity.java new file mode 100644 index 000000000000..e6c903933346 --- /dev/null +++ b/mobile/android/search/java/org/mozilla/search/SearchPreferenceActivity.java @@ -0,0 +1,96 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +package org.mozilla.search; + +import android.app.AlertDialog; +import android.content.DialogInterface; +import android.os.AsyncTask; +import android.os.Build; +import android.os.Bundle; +import android.preference.Preference; +import android.preference.PreferenceActivity; +import android.util.Log; +import android.widget.Toast; + +import org.mozilla.gecko.db.BrowserContract; + +/** + * This activity allows users to modify the settings for the search activity. + * + * A note on implementation: At the moment, we don't have tablet-specific designs. + * Therefore, this implementation uses the old-style PreferenceActivity. When + * we start optimizing for tablets, we can migrate to Fennec's PreferenceFragment + * implementation. + * + * TODO: Change this to PreferenceFragment when we stop supporting devices older than SDK 11. + */ +public class SearchPreferenceActivity extends PreferenceActivity { + + private static final String LOGTAG = "SearchPreferenceActivity"; + + private static final String CLEAR_SEARCH_HISTORY_BUTTON_KEY = "clear_search_history_button"; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) { + if (getActionBar() != null) { + getActionBar().setDisplayHomeAsUpEnabled(true); + } + } + } + + @Override + protected void onPostCreate(Bundle savedInstanceState) { + super.onPostCreate(savedInstanceState); + setupPrefsScreen(); + } + + @SuppressWarnings("deprecation") + private void setupPrefsScreen() { + addPreferencesFromResource(R.xml.search_preferences); + + final Preference clearHistoryButton = findPreference(CLEAR_SEARCH_HISTORY_BUTTON_KEY); + clearHistoryButton.setOnPreferenceClickListener(new Preference.OnPreferenceClickListener() { + @Override + public boolean onPreferenceClick(Preference preference) { + final AlertDialog.Builder dialogBuilder = new AlertDialog.Builder(SearchPreferenceActivity.this); + dialogBuilder.setNegativeButton(android.R.string.cancel, null); + dialogBuilder.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int which) { + clearHistory(); + } + }); + dialogBuilder.setMessage(R.string.search_pref_clear_history_dialog_message); + dialogBuilder.show(); + return false; + } + }); + } + + private void clearHistory() { + final AsyncTask clearHistoryTask = new AsyncTask() { + @Override + protected Boolean doInBackground(Void... params) { + final int numDeleted = getContentResolver().delete( + BrowserContract.SearchHistory.CONTENT_URI, null, null); + return numDeleted >= 0; + } + + @Override + protected void onPostExecute(Boolean success) { + if (success) { + getContentResolver().notifyChange(BrowserContract.SearchHistory.CONTENT_URI, null); + Toast.makeText(SearchPreferenceActivity.this, SearchPreferenceActivity.this.getResources() + .getString(R.string.search_pref_clear_history_confirmation), Toast.LENGTH_SHORT).show(); + } else { + Log.e(LOGTAG, "Error clearing search history."); + } + } + }; + clearHistoryTask.execute(); + } +} diff --git a/mobile/android/search/manifests/SearchAndroidManifest_activities.xml.in b/mobile/android/search/manifests/SearchAndroidManifest_activities.xml.in index ed25a053391e..12589f762244 100644 --- a/mobile/android/search/manifests/SearchAndroidManifest_activities.xml.in +++ b/mobile/android/search/manifests/SearchAndroidManifest_activities.xml.in @@ -3,10 +3,6 @@ android:label="@string/search_app_name" android:theme="@style/AppTheme" android:screenOrientation="portrait"> - - - - @@ -18,3 +14,13 @@ + + + + diff --git a/mobile/android/search/res/drawable-hdpi/ic_action_overflow.png b/mobile/android/search/res/drawable-hdpi/ic_action_overflow.png new file mode 100644 index 000000000000..002fc4bfbcc2 Binary files /dev/null and b/mobile/android/search/res/drawable-hdpi/ic_action_overflow.png differ diff --git a/mobile/android/search/res/drawable-mdpi/ic_action_overflow.png b/mobile/android/search/res/drawable-mdpi/ic_action_overflow.png new file mode 100644 index 000000000000..6f0fb23f4d9a Binary files /dev/null and b/mobile/android/search/res/drawable-mdpi/ic_action_overflow.png differ diff --git a/mobile/android/search/res/drawable-xhdpi/ic_action_overflow.png b/mobile/android/search/res/drawable-xhdpi/ic_action_overflow.png new file mode 100644 index 000000000000..7ba4e10ea218 Binary files /dev/null and b/mobile/android/search/res/drawable-xhdpi/ic_action_overflow.png differ diff --git a/mobile/android/search/res/layout/search_fragment_pre_search.xml b/mobile/android/search/res/layout/search_fragment_pre_search.xml index 5a1becf891fe..82e4570437c0 100644 --- a/mobile/android/search/res/layout/search_fragment_pre_search.xml +++ b/mobile/android/search/res/layout/search_fragment_pre_search.xml @@ -2,9 +2,26 @@ - License, v. 2.0. If a copy of the MPL was not distributed with this - file, You can obtain one at http://mozilla.org/MPL/2.0/. --> - + android:layout_height="match_parent"> + + + + + + diff --git a/mobile/android/search/res/values-v13/search_styles.xml b/mobile/android/search/res/values-v13/search_styles.xml index 22eff559a19e..ef2d4ca465f0 100644 --- a/mobile/android/search/res/values-v13/search_styles.xml +++ b/mobile/android/search/res/values-v13/search_styles.xml @@ -10,4 +10,6 @@ @color/global_background_color + +