push notifications: add global preference
Change-Id: Iafa4e3f41ba729251eebbd5772c7781c56e5c410
diff --git a/ring-android/app/src/main/java/cx/ring/application/RingApplication.java b/ring-android/app/src/main/java/cx/ring/application/RingApplication.java
index 9853e72..a2e06d0 100644
--- a/ring-android/app/src/main/java/cx/ring/application/RingApplication.java
+++ b/ring-android/app/src/main/java/cx/ring/application/RingApplication.java
@@ -159,9 +159,13 @@
// load accounts from Daemon
mAccountService.loadAccountsFromDaemon(mPreferencesService.hasNetworkConnected());
- String token = FirebaseInstanceId.getInstance().getToken();
- Log.w(TAG, "Setting Firebase push token: " + token);
- Ringservice.setPushNotificationToken(token);
+ if (mPreferencesService.getUserSettings().isAllowPushNotifications()) {
+ String token = FirebaseInstanceId.getInstance().getToken();
+ Log.w(TAG, "Setting Firebase push token: " + token);
+ Ringservice.setPushNotificationToken(token);
+ } else {
+ Ringservice.setPushNotificationToken("");
+ }
Intent intent = new Intent(DRING_CONNECTION_CHANGED);
intent.putExtra("connected", mDaemonService.isStarted());
diff --git a/ring-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.java b/ring-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.java
index c3a7d49..89373d9 100644
--- a/ring-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.java
+++ b/ring-android/app/src/main/java/cx/ring/services/SharedPreferencesServiceImpl.java
@@ -39,6 +39,7 @@
private static final String RING_SETTINGS = "ring_settings";
private static final String RING_REQUESTS = "ring_requests";
private static final String RING_MOBILE_DATA = "mobile_data";
+ private static final String RING_PUSH_NOTIFICATIONS = "push_notifs";
private static final String RING_SYSTEM_CONTACTS = "system_contacts";
private static final String RING_PLACE_CALLS = "place_calls";
private static final String RING_ON_STARTUP = "on_startup";
@@ -59,6 +60,7 @@
edit.putBoolean(RING_SYSTEM_CONTACTS, settings.isAllowSystemContacts());
edit.putBoolean(RING_PLACE_CALLS, settings.isAllowPlaceSystemCalls());
edit.putBoolean(RING_ON_STARTUP, settings.isAllowRingOnStartup());
+ edit.putBoolean(RING_PUSH_NOTIFICATIONS, settings.isAllowPushNotifications());
edit.apply();
mUserSettings = settings;
@@ -82,6 +84,7 @@
mUserSettings.setAllowSystemContacts(appPrefs.getBoolean(RING_SYSTEM_CONTACTS, false));
mUserSettings.setAllowPlaceSystemCalls(appPrefs.getBoolean(RING_PLACE_CALLS, false));
mUserSettings.setAllowRingOnStartup(appPrefs.getBoolean(RING_ON_STARTUP, true));
+ mUserSettings.setAllowPushNotifications(appPrefs.getBoolean(RING_PUSH_NOTIFICATIONS, false));
return mUserSettings;
}
diff --git a/ring-android/app/src/main/java/cx/ring/settings/SettingsFragment.java b/ring-android/app/src/main/java/cx/ring/settings/SettingsFragment.java
index 1831c53..69f4bf2 100644
--- a/ring-android/app/src/main/java/cx/ring/settings/SettingsFragment.java
+++ b/ring-android/app/src/main/java/cx/ring/settings/SettingsFragment.java
@@ -50,10 +50,12 @@
/**
* TODO: improvements : handle multiples permissions for feature.
*/
-public class SettingsFragment extends BaseFragment<SettingsPresenter> implements GenericView<SettingsViewModel> {
+public class SettingsFragment extends BaseFragment<SettingsPresenter> implements GenericView<Settings> {
@BindView(R.id.settings_mobile_data)
Switch mViewMobileData;
+ @BindView(R.id.settings_push_notifications)
+ Switch mViewPushNotifications;
@BindView(R.id.settings_contacts)
Switch mViewContacts;
@BindView(R.id.settings_place_call)
@@ -97,7 +99,7 @@
menu.clear();
}
- @OnCheckedChanged({R.id.settings_mobile_data, R.id.settings_contacts, R.id.settings_place_call, R.id.settings_startup})
+ @OnCheckedChanged({R.id.settings_mobile_data, R.id.settings_push_notifications, R.id.settings_contacts, R.id.settings_place_call, R.id.settings_startup})
public void onSettingsCheckedChanged(CompoundButton button, boolean isChecked) {
String neededPermission = null;
@@ -145,6 +147,7 @@
newSettings.setAllowSystemContacts(mViewContacts.isChecked());
newSettings.setAllowPlaceSystemCalls(mViewPlaceCall.isChecked());
newSettings.setAllowRingOnStartup(mViewStartup.isChecked());
+ newSettings.setAllowPushNotifications(mViewPushNotifications.isChecked());
// save settings according to UI inputs
presenter.saveSettings(newSettings);
@@ -221,9 +224,10 @@
//region View Methods Implementation
@Override
- public void showViewModel(SettingsViewModel viewModel) {
+ public void showViewModel(Settings viewModel) {
mIsRefreshingViewFromPresenter = true;
mViewMobileData.setChecked(viewModel.isAllowMobileData());
+ mViewPushNotifications.setChecked(viewModel.isAllowPushNotifications());
mViewContacts.setChecked(viewModel.isAllowSystemContacts());
mViewPlaceCall.setChecked(viewModel.isAllowPlaceSystemCalls());
mViewStartup.setChecked(viewModel.isAllowRingOnStartup());
diff --git a/ring-android/app/src/main/res/drawable/ic_priority_high_black_24dp.xml b/ring-android/app/src/main/res/drawable/ic_priority_high_black_24dp.xml
new file mode 100644
index 0000000..9fb7265
--- /dev/null
+++ b/ring-android/app/src/main/res/drawable/ic_priority_high_black_24dp.xml
@@ -0,0 +1,8 @@
+<!-- drawable/priority_high.xml -->
+<vector xmlns:android="http://schemas.android.com/apk/res/android"
+ android:height="24dp"
+ android:width="24dp"
+ android:viewportWidth="24"
+ android:viewportHeight="24">
+ <path android:fillColor="#000" android:pathData="M14,19H22V17H14V19M14,13.5H22V11.5H14V13.5M14,8H22V6H14V8M2,12.5C2,8.92 4.92,6 8.5,6H9V4L12,7L9,10V8H8.5C6,8 4,10 4,12.5C4,15 6,17 8.5,17H12V19H8.5C4.92,19 2,16.08 2,12.5Z" />
+</vector>
\ No newline at end of file
diff --git a/ring-android/app/src/main/res/layout/frag_settings.xml b/ring-android/app/src/main/res/layout/frag_settings.xml
index 62b4fca..8f07455 100644
--- a/ring-android/app/src/main/res/layout/frag_settings.xml
+++ b/ring-android/app/src/main/res/layout/frag_settings.xml
@@ -31,7 +31,7 @@
android:layout_centerInParent="true"
app:bounded_width="600dp">
- <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
@@ -53,21 +53,17 @@
android:orientation="horizontal"
android:padding="8dp">
- <LinearLayout
+
+ <ImageView
android:id="@+id/network_image"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentStart="true"
- android:layout_centerVertical="true">
+ android:layout_centerVertical="true"
+ android:layout_gravity="start"
+ android:contentDescription="@string/pref_mobileData_summary"
+ app:srcCompat="@drawable/ic_perm_data_setting_black_24dp" />
- <ImageView
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:layout_gravity="start"
- android:contentDescription="@string/pref_mobileData_summary"
- app:srcCompat="@drawable/ic_perm_data_setting_black_24dp" />
-
- </LinearLayout>
<LinearLayout
android:layout_width="wrap_content"
@@ -102,6 +98,57 @@
</RelativeLayout>
+
+ <RelativeLayout
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:orientation="horizontal"
+ android:padding="8dp">
+
+ <ImageView
+ android:id="@+id/push_image"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentStart="true"
+ android:layout_centerVertical="true"
+ android:layout_gravity="start"
+ android:contentDescription="@string/pref_pushNotifications_summary"
+ app:srcCompat="@drawable/ic_priority_high_black_24dp" />
+
+ <LinearLayout
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_centerVertical="true"
+ android:layout_toEndOf="@+id/push_image"
+ android:layout_toStartOf="@+id/settings_push_notifications"
+ android:orientation="vertical"
+ android:paddingLeft="16dp"
+ android:paddingRight="16dp">
+
+ <TextView
+ style="@style/ListPrimary"
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:lines="1"
+ android:text="@string/pref_pushNotifications_title" />
+
+ <TextView
+ android:layout_width="match_parent"
+ android:layout_height="wrap_content"
+ android:text="@string/pref_pushNotifications_summary" />
+
+ </LinearLayout>
+
+ <Switch
+ android:id="@+id/settings_push_notifications"
+ android:layout_width="wrap_content"
+ android:layout_height="wrap_content"
+ android:layout_alignParentEnd="true"
+ android:checked="false" />
+
+ </RelativeLayout>
+
+
<!-- Contacts settings -->
<TextView
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 1b79c5f..40d6064 100644
--- a/ring-android/app/src/main/res/values/strings_preferences.xml
+++ b/ring-android/app/src/main/res/values/strings_preferences.xml
@@ -8,6 +8,9 @@
<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_pushNotifications_title">Push notifications</string>
+ <string name="pref_pushNotifications_summary">Use Google servers to allow receiving calls/messages in the background</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>