[2/3] OmniGears: omniswitch as default recents
OmniSwitch provides broadcast events for showing
and hiding the overlay
We need to make sure that OmniSwitch service is really
running else we will get no recents at all. Also on startup
it will take some time until the OmnISwitch service
has been started.
OmniSwitch will send a service start and stop broadcast
that will guard the usage of OmnSwitch
PS3
added first time alert to make sure users get noticed
to enable OmniSwitch when they enable usage for recents
added category and rework strings
PS4
I hate whitespaces
Change-Id: I96a103d09ece80f782387fd2e24104545461b6a5
diff --git a/res/values/custom_strings.xml b/res/values/custom_strings.xml
index f08a86a..d0352ae 100644
--- a/res/values/custom_strings.xml
+++ b/res/values/custom_strings.xml
@@ -425,4 +425,15 @@
<string name="select_sound_pack_summary">Select the active sound pack</string>
<string name="default_sound_pack">Default (System)</string>
<string name="error_pack_install">Error while installing the sound pack</string>
+
+ <string name="omniswitch_category">OmniSwitch</string>
+ <string name="recents_use_omniswitch_title">Use for recents</string>
+ <string name="recents_use_omniswitch_summary">Use OmniSwitch instead of default recents view</string>
+ <string name="omniswitch_start_settings_title">Settings</string>
+ <string name="omniswitch_start_settings_summary">Open OmniSwitch settings</string>
+ <string name="omniswitch_not_installed_title">Warning</string>
+ <string name="omniswitch_not_installed_summary">OmniSwitch is not installed</string>
+ <string name="omniswitch_not_installed_message">OmniSwitch is not installed</string>
+ <string name="omniswitch_first_time_title">Information</string>
+ <string name="omniswitch_first_time_message">Make sure you have enabled OmniSwitch. You can do this by using \"Settings\" below</string>
</resources>
diff --git a/res/xml/more_interface_settings.xml b/res/xml/more_interface_settings.xml
index d17361b..5f82d68 100644
--- a/res/xml/more_interface_settings.xml
+++ b/res/xml/more_interface_settings.xml
@@ -57,4 +57,20 @@
android:dependency="show_recents_memory_indicator"
android:persistent="false" />
+ <PreferenceCategory
+ android:key="category_omniswitch"
+ android:title="@string/omniswitch_category"/>
+
+ <CheckBoxPreference
+ android:key="recents_use_omniswitch"
+ android:title="@string/recents_use_omniswitch_title"
+ android:summary="@string/recents_use_omniswitch_summary"
+ android:persistent="false" />
+
+ <Preference
+ android:key="omniswitch_start_settings"
+ android:title="@string/omniswitch_start_settings_title"
+ android:summary="@string/omniswitch_start_settings_summary"
+ android:persistent="false" />
+
</PreferenceScreen>
diff --git a/src/org/omnirom/omnigears/interfacesettings/MoreInterfaceSettings.java b/src/org/omnirom/omnigears/interfacesettings/MoreInterfaceSettings.java
index 6ce63ac..af277a5 100644
--- a/src/org/omnirom/omnigears/interfacesettings/MoreInterfaceSettings.java
+++ b/src/org/omnirom/omnigears/interfacesettings/MoreInterfaceSettings.java
@@ -21,8 +21,13 @@
import com.android.settings.SettingsPreferenceFragment;
import com.android.settings.R;
+import android.app.AlertDialog;
import android.content.ContentResolver;
import android.content.Context;
+import android.content.Intent;
+import android.content.DialogInterface;
+import android.content.pm.PackageManager;
+import android.content.pm.PackageManager.NameNotFoundException;
import android.os.Bundle;
import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
@@ -42,11 +47,22 @@
private static final String SHOW_RECENTS_MEMORY_INDICATOR = "show_recents_memory_indicator";
private static final String RECENTS_MEMORY_INDICATOR_LOCATION =
"recents_memory_indicator_location";
+ private static final String RECENTS_USE_OMNISWITCH = "recents_use_omniswitch";
+ private static final String OMNISWITCH_START_SETTINGS = "omniswitch_start_settings";
+
+ // Package name of the omnniswitch app
+ public static final String OMNISWITCH_PACKAGE_NAME = "org.omnirom.omniswitch";
+ // Intent for launching the omniswitch settings actvity
+ public static Intent INTENT_OMNISWITCH_SETTINGS = new Intent(Intent.ACTION_MAIN)
+ .setClassName(OMNISWITCH_PACKAGE_NAME, OMNISWITCH_PACKAGE_NAME + ".SettingsActivity");
private CheckBoxPreference mRecentClearAll;
private ListPreference mRecentClearAllPosition;
private CheckBoxPreference mShowRecentsMemoryIndicator;
private ListPreference mRecentsMemoryIndicatorPosition;
+ private CheckBoxPreference mRecentsUseOmniSwitch;
+ private Preference mOmniSwitchSettings;
+ private boolean mOmniSwitchInitCalled;
@Override
public void onCreate(Bundle savedInstanceState) {
@@ -80,11 +96,31 @@
mRecentsMemoryIndicatorPosition.setValue(recentsMemoryIndicatorPosition);
}
mRecentsMemoryIndicatorPosition.setOnPreferenceChangeListener(this);
+
+ mRecentsUseOmniSwitch = (CheckBoxPreference)
+ prefSet.findPreference(RECENTS_USE_OMNISWITCH);
+
+ try {
+ mRecentsUseOmniSwitch.setChecked(Settings.System.getInt(resolver,
+ Settings.System.RECENTS_USE_OMNISWITCH) == 1);
+ mOmniSwitchInitCalled = true;
+ } catch(SettingNotFoundException e){
+ // if the settings value is unset
+ }
+ mRecentsUseOmniSwitch.setOnPreferenceChangeListener(this);
+
+ mOmniSwitchSettings = (Preference)
+ prefSet.findPreference(OMNISWITCH_START_SETTINGS);
+ mOmniSwitchSettings.setEnabled(mRecentsUseOmniSwitch.isChecked());
}
@Override
public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, Preference preference) {
- return true;
+ if (preference == mOmniSwitchSettings){
+ startActivity(INTENT_OMNISWITCH_SETTINGS);
+ return true;
+ }
+ return super.onPreferenceTreeClick(preferenceScreen, preference);
}
public boolean onPreferenceChange(Preference preference, Object objValue) {
@@ -103,10 +139,59 @@
String value = (String) objValue;
Settings.System.putString(
resolver, Settings.System.RECENTS_MEMORY_INDICATOR_LOCATION, value);
+ } else if (preference == mRecentsUseOmniSwitch) {
+ boolean value = (Boolean) objValue;
+ if (value && !isOmniSwitchInstalled()){
+ openOmniSwitchNotInstalledWarning();
+ return false;
+ }
+
+ // if value has never been set before
+ if (value && !mOmniSwitchInitCalled){
+ openOmniSwitchFirstTimeWarning();
+ mOmniSwitchInitCalled = true;
+ }
+
+ Settings.System.putInt(
+ resolver, Settings.System.RECENTS_USE_OMNISWITCH, value ? 1 : 0);
+ mOmniSwitchSettings.setEnabled(value && isOmniSwitchInstalled());
+ mOmniSwitchSettings.setSummary(isOmniSwitchInstalled() ?
+ getResources().getString(R.string.omniswitch_start_settings_summary) :
+ getResources().getString(R.string.omniswitch_not_installed_summary));
} else {
return false;
}
return true;
}
+
+ private void openOmniSwitchNotInstalledWarning() {
+ new AlertDialog.Builder(getActivity())
+ .setTitle(getResources().getString(R.string.omniswitch_not_installed_title))
+ .setMessage(getResources().getString(R.string.omniswitch_not_installed_message))
+ .setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ }
+ }).show();
+ }
+
+ private void openOmniSwitchFirstTimeWarning() {
+ new AlertDialog.Builder(getActivity())
+ .setTitle(getResources().getString(R.string.omniswitch_first_time_title))
+ .setMessage(getResources().getString(R.string.omniswitch_first_time_message))
+ .setNegativeButton(android.R.string.ok, new DialogInterface.OnClickListener() {
+ public void onClick(DialogInterface dialog, int whichButton) {
+ }
+ }).show();
+ }
+
+ private boolean isOmniSwitchInstalled() {
+ final PackageManager pm = getPackageManager();
+ try {
+ pm.getPackageInfo(OMNISWITCH_PACKAGE_NAME, PackageManager.GET_ACTIVITIES);
+ return true;
+ } catch (NameNotFoundException e) {
+ return false;
+ }
+ }
}