diff options
author | Roman Birg <roman@cyngn.com> | 2014-03-26 16:14:58 -0700 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2015-11-13 09:01:09 +0100 |
commit | 016219099e0be8f531ca437555f7ce903e9e8a9f (patch) | |
tree | d78d43719bf88f94eb39fe342de73f96dd35bded /src/com/android/settings/voicewakeup | |
parent | f77689bb6e6569d38b8454512c558cd12722e636 (diff) | |
download | packages_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.java | 216 |
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; + } +} |