summaryrefslogtreecommitdiffstats
path: root/src/com/android/settings/voicewakeup
diff options
context:
space:
mode:
authorRoman Birg <roman@cyngn.com>2014-03-26 16:14:58 -0700
committerSteve Kondik <steve@cyngn.com>2015-11-13 09:01:09 +0100
commit016219099e0be8f531ca437555f7ce903e9e8a9f (patch)
treed78d43719bf88f94eb39fe342de73f96dd35bded /src/com/android/settings/voicewakeup
parentf77689bb6e6569d38b8454512c558cd12722e636 (diff)
downloadpackages_apps_Settings-016219099e0be8f531ca437555f7ce903e9e8a9f.zip
packages_apps_Settings-016219099e0be8f531ca437555f7ce903e9e8a9f.tar.gz
packages_apps_Settings-016219099e0be8f531ca437555f7ce903e9e8a9f.tar.bz2
add Voice Wakeup switch
* Requires CYNGN package to do the actual work. Change-Id: I1c129adf1104dd95d3afb76224af4c9ba2b5db96 Settings: Fix build error after 70f60fa685b1eae960fe3bb25cc85bef9361e288 Change-Id: I6e83391e02fd0e6dc0d050d5a9a7dd6816a1910b Settings: Update voice wakeup icon Change-Id: Ie75e8a41f69097384f3d2eec2503ae4cfe6a2a0b Settings: Hide voice wakeup category when package isn't present Change-Id: I33a34a56b3a1d1ad04b07bde4aec6c3c230fc297 Add metrics category for VoiceWakeup Change-Id: I101729d964f9aca032a9899917b59a035c299ecf
Diffstat (limited to 'src/com/android/settings/voicewakeup')
-rw-r--r--src/com/android/settings/voicewakeup/VoiceWakeupSettings.java216
1 files changed, 216 insertions, 0 deletions
diff --git a/src/com/android/settings/voicewakeup/VoiceWakeupSettings.java b/src/com/android/settings/voicewakeup/VoiceWakeupSettings.java
new file mode 100644
index 0000000..e3698ef
--- /dev/null
+++ b/src/com/android/settings/voicewakeup/VoiceWakeupSettings.java
@@ -0,0 +1,216 @@
+/*
+ * Copyright (C) 2014 The CyanogenMod Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.voicewakeup;
+
+import android.app.ActionBar;
+import android.app.Activity;
+import android.content.ComponentName;
+import android.content.Intent;
+import android.content.Intent.ShortcutIconResource;
+import android.database.ContentObserver;
+import android.net.Uri;
+import android.os.Bundle;
+import android.os.Handler;
+import android.preference.Preference;
+import android.preference.Preference.OnPreferenceChangeListener;
+import android.preference.PreferenceActivity;
+import android.preference.PreferenceScreen;
+import android.provider.Settings;
+import android.text.TextUtils;
+import android.util.Log;
+import android.view.Gravity;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+
+import com.android.internal.logging.MetricsLogger;
+
+import com.android.settings.R;
+import com.android.settings.SettingsActivity;
+import com.android.settings.SettingsPreferenceFragment;
+import com.android.settings.Utils;
+import com.android.settings.cyanogenmod.BaseSystemSettingSwitchBar;
+import com.android.settings.cyanogenmod.ShortcutPickHelper;
+
+public class VoiceWakeupSettings extends SettingsPreferenceFragment implements
+ OnPreferenceChangeListener, ShortcutPickHelper.OnPickListener,
+ BaseSystemSettingSwitchBar.SwitchBarChangeCallback {
+ private static final String TAG = "VoiceWakeupSettings";
+
+ private static final String KEY_RETRAIN = "retrain";
+ private static final String KEY_SHORTCUT_PICKER = "voice_wakeup_launch_intent";
+ private static final ComponentName VOICE_TRAINING_COMPONENT = new ComponentName(
+ "com.cyanogenmod.voicewakeup", "com.cyanogenmod.voicewakeup.VoiceTrainingActivity");
+ private static final ComponentName VOICE_TRAINING_SERVICE = new ComponentName(
+ "com.cyanogenmod.voicewakeup", "com.cyanogenmod.voicewakeup.VoiceWakeupEngine");
+
+ private BaseSystemSettingSwitchBar mVoiceWakeupEnabler;
+
+ private ShortcutPickHelper mPicker;
+ private String mDefaultActivityString;
+ private String mLaunchIntentString;
+
+ ViewGroup mContainer;
+
+ private Preference mRetrainPreference;
+ private Preference mPickShortcutPreference;
+
+ private void log(String s) {
+ Log.d(TAG, s);
+ }
+
+ private void retrain() {
+ Intent retrain = new Intent(Intent.ACTION_MAIN);
+ retrain.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP
+ | Intent.FLAG_ACTIVITY_CLEAR_TASK);
+ retrain.setComponent(VOICE_TRAINING_COMPONENT);
+ startActivity(retrain);
+ }
+
+ private void restartService() {
+ Intent intent = new Intent(Intent.ACTION_MAIN);
+ intent.setComponent(VOICE_TRAINING_SERVICE);
+ getActivity().startService(intent);
+ }
+
+ @Override
+ public void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+
+ addPreferencesFromResource(R.xml.voice_wakeup_settings);
+
+ mRetrainPreference = findPreference(KEY_RETRAIN);
+ mPickShortcutPreference = findPreference(KEY_SHORTCUT_PICKER);
+ mPicker = new ShortcutPickHelper(getActivity(), this);
+ mDefaultActivityString = getResources().getString(R.string.voice_wakeup_default_activity);
+ }
+
+ @Override
+ public void onStart() {
+ super.onStart();
+ final SettingsActivity activity = (SettingsActivity) getActivity();
+ mVoiceWakeupEnabler = new BaseSystemSettingSwitchBar(activity, activity.getSwitchBar(),
+ Settings.System.VOICE_WAKEUP, false, this);
+ }
+
+ @Override
+ public void onDestroyView() {
+ if (mVoiceWakeupEnabler != null) {
+ mVoiceWakeupEnabler.teardownSwitchBar();
+ }
+ super.onDestroyView();
+ }
+
+ @Override
+ public View onCreateView(LayoutInflater inflater, ViewGroup container,
+ Bundle savedInstanceState) {
+ mContainer = container;
+ return super.onCreateView(inflater, container, savedInstanceState);
+ }
+
+ @Override
+ public void onPause() {
+ super.onPause();
+ if (mVoiceWakeupEnabler != null) {
+ mVoiceWakeupEnabler.pause();
+ }
+ }
+
+ @Override
+ public void onResume() {
+ super.onResume();
+ if (mVoiceWakeupEnabler != null) {
+ mVoiceWakeupEnabler.resume(getActivity());
+ }
+
+ // If running on a phone, remove padding around tabs
+ if (!Utils.isTablet(getActivity())) {
+ mContainer.setPadding(0, 0, 0, 0);
+ }
+ }
+
+ @Override
+ public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen,
+ Preference preference) {
+ if (preference == mRetrainPreference) {
+ retrain();
+ return true;
+ } else if (preference == mPickShortcutPreference) {
+ final Activity activity = getActivity();
+ String[] names = new String[] {
+ mDefaultActivityString
+ };
+ ShortcutIconResource[] icons = new ShortcutIconResource[] {
+ ShortcutIconResource.fromContext(activity, R.drawable.ic_settings_voice_wakeup)
+ };
+ mPicker.pickShortcut(names, icons, getId());
+ return true;
+ }
+ return super.onPreferenceTreeClick(preferenceScreen, preference);
+ };
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, Intent data) {
+ String shortcutName = null;
+ if (data != null) {
+ shortcutName = data.getStringExtra(Intent.EXTRA_SHORTCUT_NAME);
+ }
+
+ if (TextUtils.equals(shortcutName, mDefaultActivityString)) {
+ shortcutPicked("", mDefaultActivityString, true);
+ } else if (requestCode != Activity.RESULT_CANCELED
+ && resultCode != Activity.RESULT_CANCELED) {
+ mPicker.onActivityResult(requestCode, resultCode, data);
+ }
+ }
+
+ @Override
+ public void shortcutPicked(String uri, String friendlyName, boolean isApplication) {
+ Settings.System.putString(getContentResolver(), Settings.System.VOICE_LAUNCH_INTENT, uri);
+ }
+
+ @Override
+ public boolean onPreferenceChange(Preference preference, Object newValue) {
+ return false;
+ }
+
+ @Override
+ public void onEnablerChanged(boolean isEnabled) {
+ Activity activity = getActivity();
+ mLaunchIntentString = Settings.System.getString(activity.getContentResolver(),
+ Settings.System.VOICE_LAUNCH_INTENT);
+
+ activity.invalidateOptionsMenu();
+
+ mRetrainPreference.setEnabled(isEnabled);
+ mPickShortcutPreference.setEnabled(isEnabled);
+
+ if (mLaunchIntentString == null || mLaunchIntentString.isEmpty()) {
+ mPickShortcutPreference.setSummary(mDefaultActivityString);
+ } else {
+ mPickShortcutPreference.setSummary(mPicker.getFriendlyNameForUri(mLaunchIntentString));
+ }
+ if (isEnabled) {
+ restartService();
+ }
+ }
+
+ @Override
+ public int getMetricsCategory() {
+ return MetricsLogger.VOICE_INPUT;
+ }
+}