preferences: add start on boot setting
Tuleap: #423
Tuleap: #102
Change-Id: Idfc2bbc19d6b40cd817b907b0bceb4691023694e
diff --git a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
index ebf8381..d7f3574 100644
--- a/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
+++ b/ring-android/app/src/main/java/cx/ring/client/HomeActivity.java
@@ -252,7 +252,7 @@
break;
case Manifest.permission.READ_CONTACTS:
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
- sharedPref.edit().putBoolean(SettingsFragment.KEY_PREF_CONTACTS, grantResults[i] == PackageManager.PERMISSION_GRANTED).apply();
+ sharedPref.edit().putBoolean(getString(R.string.pref_systemContacts_key), grantResults[i] == PackageManager.PERMISSION_GRANTED).apply();
break;
}
}
diff --git a/ring-android/app/src/main/java/cx/ring/fragments/SettingsFragment.java b/ring-android/app/src/main/java/cx/ring/fragments/SettingsFragment.java
index de5e94d..ebe89a2 100644
--- a/ring-android/app/src/main/java/cx/ring/fragments/SettingsFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/fragments/SettingsFragment.java
@@ -1,3 +1,21 @@
+/*
+ * Copyright (C) 2004-2016 Savoir-faire Linux Inc.
+ *
+ * Author: Adrien Béraud <adrien.beraud@savoirfairelinux.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
package cx.ring.fragments;
import android.Manifest;
@@ -15,13 +33,16 @@
public class SettingsFragment extends PreferenceFragment implements SharedPreferences.OnSharedPreferenceChangeListener
{
- public static final String KEY_PREF_MOBILE = "pref_mobileData";
- public static final String KEY_PREF_CONTACTS = "pref_systemContacts";
- public static final String KEY_PREF_DIALER = "pref_systemDialer";
+ private static final String TAG = SettingsFragment.class.getSimpleName();
+
+ private String KEY_PREF_CONTACTS = null;
+ private String KEY_PREF_DIALER = null;
@Override
public void onCreatePreferences(Bundle bundle, String s) {
addPreferencesFromResource(R.xml.preferences);
+ KEY_PREF_CONTACTS = getString(R.string.pref_systemContacts_key);
+ KEY_PREF_DIALER = getString(R.string.pref_systemDialer_key);
}
public void onResume() {
@@ -45,6 +66,11 @@
if (val && !LocalService.checkPermission(getActivity(), Manifest.permission.READ_CONTACTS)) {
ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.READ_CONTACTS}, LocalService.PERMISSIONS_REQUEST);
}
+ } else if (key.equals(KEY_PREF_DIALER)) {
+ boolean val = sharedPreferences.getBoolean(KEY_PREF_DIALER, false);
+ if (val && !LocalService.checkPermission(getActivity(), Manifest.permission.WRITE_CALL_LOG)) {
+ ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.WRITE_CALL_LOG}, LocalService.PERMISSIONS_REQUEST);
+ }
}
}
diff --git a/ring-android/app/src/main/java/cx/ring/loaders/ContactsLoader.java b/ring-android/app/src/main/java/cx/ring/loaders/ContactsLoader.java
index ce90701..434e102 100644
--- a/ring-android/app/src/main/java/cx/ring/loaders/ContactsLoader.java
+++ b/ring-android/app/src/main/java/cx/ring/loaders/ContactsLoader.java
@@ -23,6 +23,7 @@
import java.util.ArrayList;
+import cx.ring.R;
import cx.ring.fragments.SettingsFragment;
import cx.ring.model.CallContact;
import cx.ring.model.SipUri;
@@ -117,7 +118,7 @@
{
final Result res = new Result();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(getContext());
- boolean canUseContacts = sharedPreferences.getBoolean(SettingsFragment.KEY_PREF_CONTACTS, true);
+ boolean canUseContacts = sharedPreferences.getBoolean(getContext().getString(R.string.pref_systemContacts_key), true);
if (!canUseContacts || !LocalService.checkPermission(getContext(), Manifest.permission.READ_CONTACTS))
return res;
diff --git a/ring-android/app/src/main/java/cx/ring/service/BootReceiver.java b/ring-android/app/src/main/java/cx/ring/service/BootReceiver.java
new file mode 100644
index 0000000..83396a3
--- /dev/null
+++ b/ring-android/app/src/main/java/cx/ring/service/BootReceiver.java
@@ -0,0 +1,31 @@
+package cx.ring.service;
+
+import android.content.BroadcastReceiver;
+import android.content.Context;
+import android.content.Intent;
+import android.content.SharedPreferences;
+import android.preference.PreferenceManager;
+import android.util.Log;
+
+import cx.ring.R;
+import cx.ring.fragments.SettingsFragment;
+
+public class BootReceiver extends BroadcastReceiver {
+ private static final String TAG = BootReceiver.class.getSimpleName();
+
+ public BootReceiver() {
+ }
+
+ @Override
+ public void onReceive(Context c, Intent intent) {
+ if (Intent.ACTION_BOOT_COMPLETED.equals(intent.getAction())) {
+ SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(c);
+ boolean startOnBoot = sharedPreferences.getBoolean(c.getString(R.string.pref_startOnBoot_key), false);
+ if (startOnBoot) {
+ Log.w(TAG, "Starting Ring on boot");
+ Intent serviceIntent = new Intent(c, LocalService.class);
+ c.startService(serviceIntent);
+ }
+ }
+ }
+}
diff --git a/ring-android/app/src/main/java/cx/ring/service/LocalService.java b/ring-android/app/src/main/java/cx/ring/service/LocalService.java
index 0f38e50..e4e3735 100644
--- a/ring-android/app/src/main/java/cx/ring/service/LocalService.java
+++ b/ring-android/app/src/main/java/cx/ring/service/LocalService.java
@@ -14,8 +14,7 @@
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package cx.ring.service;
@@ -326,8 +325,8 @@
isMobileConn = ni != null && ni.isConnected();
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
- canUseContacts = sharedPreferences.getBoolean(SettingsFragment.KEY_PREF_CONTACTS, true);
- canUseMobile = sharedPreferences.getBoolean(SettingsFragment.KEY_PREF_MOBILE, true);
+ canUseContacts = sharedPreferences.getBoolean(getString(R.string.pref_systemContacts_key), true);
+ canUseMobile = sharedPreferences.getBoolean(getString(R.string.pref_mobileData_key), false);
sharedPreferences.registerOnSharedPreferenceChangeListener(this);
}
@@ -395,16 +394,13 @@
@Override
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) {
- switch (key) {
- case SettingsFragment.KEY_PREF_CONTACTS:
- canUseContacts = sharedPreferences.getBoolean(key, true);
- mSystemContactLoader.onContentChanged();
- mSystemContactLoader.startLoading();
- break;
- case SettingsFragment.KEY_PREF_MOBILE:
- canUseMobile = sharedPreferences.getBoolean(key, true);
- updateConnectivityState();
- break;
+ if (key.equals(getString(R.string.pref_systemContacts_key))) {
+ canUseContacts = sharedPreferences.getBoolean(key, true);
+ mSystemContactLoader.onContentChanged();
+ mSystemContactLoader.startLoading();
+ } else if (key.equals(getString(R.string.pref_mobileData_key))) {
+ canUseMobile = sharedPreferences.getBoolean(key, true);
+ updateConnectivityState();
}
}
@@ -494,9 +490,12 @@
perms.add(p);
}
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(c);
- boolean contact_perm = sharedPref.getBoolean(SettingsFragment.KEY_PREF_CONTACTS, true);
+ boolean contact_perm = sharedPref.getBoolean(c.getString(R.string.pref_systemContacts_key), true);
if (contact_perm && !checkPermission(c, Manifest.permission.READ_CONTACTS))
perms.add(Manifest.permission.READ_CONTACTS);
+ boolean sys_dialer = sharedPref.getBoolean(c.getString(R.string.pref_systemDialer_key), false);
+ if (sys_dialer && !checkPermission(c, Manifest.permission.WRITE_CALL_LOG))
+ perms.add(Manifest.permission.WRITE_CALL_LOG);
return perms.toArray(new String[perms.size()]);
}
diff --git a/ring-android/app/src/main/java/cx/ring/service/OutgoingCallHandler.java b/ring-android/app/src/main/java/cx/ring/service/OutgoingCallHandler.java
index a9736ca..2692f5c 100644
--- a/ring-android/app/src/main/java/cx/ring/service/OutgoingCallHandler.java
+++ b/ring-android/app/src/main/java/cx/ring/service/OutgoingCallHandler.java
@@ -28,6 +28,7 @@
import android.preference.PreferenceManager;
import android.util.Log;
+import cx.ring.R;
import cx.ring.client.CallActivity;
import cx.ring.fragments.SettingsFragment;
import cx.ring.model.SipUri;
@@ -46,7 +47,7 @@
phoneNumber = intent.getStringExtra(Intent.EXTRA_PHONE_NUMBER);
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(context);
- boolean systemDialer = sharedPreferences.getBoolean(SettingsFragment.KEY_PREF_DIALER, false);
+ boolean systemDialer = sharedPreferences.getBoolean(context.getString(R.string.pref_systemDialer_key), false);
if (systemDialer) {
boolean systemDialerSip = sharedPreferences.getBoolean(KEY_CACHE_HAVE_SIPACCOUNT, false);
boolean systemDialerRing = sharedPreferences.getBoolean(KEY_CACHE_HAVE_RINGACCOUNT, false);
diff --git a/ring-android/app/src/main/res/drawable-hdpi/ic_android_black_24dp.png b/ring-android/app/src/main/res/drawable-hdpi/ic_android_black_24dp.png
new file mode 100644
index 0000000..ed3ee45
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-hdpi/ic_android_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/drawable-mdpi/ic_android_black_24dp.png b/ring-android/app/src/main/res/drawable-mdpi/ic_android_black_24dp.png
new file mode 100644
index 0000000..a4add51
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-mdpi/ic_android_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/drawable-xhdpi/ic_android_black_24dp.png b/ring-android/app/src/main/res/drawable-xhdpi/ic_android_black_24dp.png
new file mode 100644
index 0000000..41558f2
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-xhdpi/ic_android_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/drawable-xxhdpi/ic_android_black_24dp.png b/ring-android/app/src/main/res/drawable-xxhdpi/ic_android_black_24dp.png
new file mode 100644
index 0000000..6006b12
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-xxhdpi/ic_android_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/drawable-xxxhdpi/ic_android_black_24dp.png b/ring-android/app/src/main/res/drawable-xxxhdpi/ic_android_black_24dp.png
new file mode 100644
index 0000000..4f935bf
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable-xxxhdpi/ic_android_black_24dp.png
Binary files differ
diff --git a/ring-android/app/src/main/res/values/strings_preferences.xml b/ring-android/app/src/main/res/values/strings_preferences.xml
index 1ee5600..c54567f 100644
--- a/ring-android/app/src/main/res/values/strings_preferences.xml
+++ b/ring-android/app/src/main/res/values/strings_preferences.xml
@@ -1,13 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="pref_category_network">Network</string>
+ <string name="pref_category_contacts">Contacts</string>
+ <string name="pref_category_system">System</string>
+
+ <string name="pref_mobileData_key" translatable="false">pref_mobileData</string>
<string name="pref_mobileData_title">Mobile data</string>
<string name="pref_mobileData_summary">Allow Ring on 3G/LTE networks additionally to Wi-Fi</string>
- <string name="pref_category_contacts">Contacts</string>
+ <string name="pref_systemContacts_key" translatable="false">pref_systemContacts</string>
<string name="pref_systemContacts_title">Use system contacts</string>
<string name="pref_systemContacts_summary">Use system contacts to show caller details.</string>
+ <string name="pref_systemDialer_key" translatable="false">pref_systemDialer</string>
<string name="pref_systemDialer_title">Place system calls using Ring</string>
<string name="pref_systemDialer_summary">Use Ring to place system calls when possible.</string>
+
+ <string name="pref_startOnBoot_key" translatable="false">pref_startOnBoot</string>
+ <string name="pref_startOnBoot_title">Start Ring on startup</string>
+ <string name="pref_startOnBoot_summary">Run Ring in the background when the system starts.</string>
</resources>
diff --git a/ring-android/app/src/main/res/xml/preferences.xml b/ring-android/app/src/main/res/xml/preferences.xml
index ef8ea5c..77f9b47 100644
--- a/ring-android/app/src/main/res/xml/preferences.xml
+++ b/ring-android/app/src/main/res/xml/preferences.xml
@@ -1,11 +1,28 @@
-<?xml version="1.0" encoding="utf-8"?>
+<?xml version="1.0" encoding="utf-8"?><!--
+Copyright (c) 2016 Savoir-faire Linux Inc.
+
+Author: Adrien Beraud <adrien.beraud@savoirfairelinux.com>
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 3 of the License, or
+(at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program. If not, see <http://www.gnu.org/licenses/>.
+-->
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android">
<PreferenceCategory android:title="@string/pref_category_network">
<android.support.v14.preference.SwitchPreference
android:defaultValue="false"
android:icon="@drawable/ic_perm_data_setting_black_24dp"
- android:key="pref_mobileData"
+ android:key="@string/pref_mobileData_key"
android:summary="@string/pref_mobileData_summary"
android:title="@string/pref_mobileData_title" />
</PreferenceCategory>
@@ -14,17 +31,28 @@
<android.support.v14.preference.SwitchPreference
android:defaultValue="true"
android:icon="@drawable/ic_group_black_24dp"
- android:key="pref_systemContacts"
+ android:key="@string/pref_systemContacts_key"
android:summary="@string/pref_systemContacts_summary"
android:title="@string/pref_systemContacts_title" />
+ </PreferenceCategory>
+ <PreferenceCategory android:title="@string/pref_category_system">
+
<android.support.v14.preference.SwitchPreference
android:defaultValue="false"
android:icon="@drawable/ic_dialpad_black_24dp"
- android:key="pref_systemDialer"
+ android:key="@string/pref_systemDialer_key"
android:summary="@string/pref_systemDialer_summary"
android:title="@string/pref_systemDialer_title" />
+
+ <android.support.v14.preference.SwitchPreference
+ android:defaultValue="false"
+ android:icon="@drawable/ic_android_black_24dp"
+ android:key="@string/pref_startOnBoot_key"
+ android:summary="@string/pref_startOnBoot_summary"
+ android:title="@string/pref_startOnBoot_title" />
+
</PreferenceCategory>
</PreferenceScreen>
\ No newline at end of file