TODOs: Change Presence Icon to a switch
To better match the mocks, I've switched the presence icon to
a switch. I also added a toast to indicate changes when the
presence switch is toggled (as well as at the start of the app)
Thanks to David for getting the icons.
Change-Id: I315cc7452e2c12ef252e18db25ae764563fd77a5
diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml
index 2fe96f5..657054b 100644
--- a/app/src/main/res/values/colors.xml
+++ b/app/src/main/res/values/colors.xml
@@ -4,4 +4,6 @@
<color name="colorPrimaryDark">#303F9F</color>
<color name="colorPrimaryLight">#9FA8DA</color>
<color name="colorAccent">#FF4081</color>
+ <color name="colorWhite">#FFFFFF</color>
+ <color name="colorBlack">#000000</color>
</resources>
diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml
index 545b9c6..ecd7ca1 100644
--- a/app/src/main/res/values/styles.xml
+++ b/app/src/main/res/values/styles.xml
@@ -17,4 +17,10 @@
<style name="AppTheme.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
+ <style name="SwitchCompat" parent="Theme.AppCompat.Light">
+ <!-- Used to control the color of the SwitchCompat's track -->
+ <item name="colorControlActivated">@color/colorWhite</item>
+ <item name="android:colorForeground">@color/colorBlack</item>
+ </style>
+
</resources>
diff --git a/app/src/syncbase/java/io/v/todos/sharing/NeighborhoodFragment.java b/app/src/syncbase/java/io/v/todos/sharing/NeighborhoodFragment.java
index f850b8c..be75c39 100644
--- a/app/src/syncbase/java/io/v/todos/sharing/NeighborhoodFragment.java
+++ b/app/src/syncbase/java/io/v/todos/sharing/NeighborhoodFragment.java
@@ -2,14 +2,19 @@
import android.app.Fragment;
+import android.content.Context;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
+import android.support.v7.widget.SwitchCompat;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
+import android.widget.CompoundButton;
+import android.widget.Switch;
+import android.widget.Toast;
import com.google.common.util.concurrent.FutureCallback;
import com.google.common.util.concurrent.Futures;
@@ -113,7 +118,7 @@
return sPrefs.getBoolean(PREF_ADVERTISE_NEIGHBORHOOD, true);
}
- private MenuItem mAdvertiseNeighborhoodMenuItem;
+ private SwitchCompat mSwitch;
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
@@ -124,7 +129,15 @@
@Override
public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) {
inflater.inflate(R.menu.neighborhood, menu);
- mAdvertiseNeighborhoodMenuItem = menu.findItem(R.id.advertise_neighborhood);
+ MenuItem menuItem = menu.findItem(R.id.advertise_neighborhood);
+ mSwitch = (SwitchCompat) menuItem.getActionView().
+ findViewById(R.id.neighborhood_switch);
+ mSwitch.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {
+ @Override
+ public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
+ setAdvertiseNeighborhood(isChecked);
+ }
+ });
sPrefs = sPrefs != null ? sPrefs : PreferenceManager.getDefaultSharedPreferences
(getActivity());
sPrefs.registerOnSharedPreferenceChangeListener(this);
@@ -143,21 +156,20 @@
}
}
+ private static Boolean sLastToastCheck; // Used to track the last toasted value.
+
private void updateAdvertiseNeighborhoodChecked() {
boolean value = isAdvertising();
- mAdvertiseNeighborhoodMenuItem.setChecked(value);
- mAdvertiseNeighborhoodMenuItem.setIcon(value ?
- R.drawable.ic_advertise_neighborhood_on_white_24dp :
- R.drawable.ic_advertise_neighborhood_off_white_24dp);
- }
+ mSwitch.setChecked(value);
+ mSwitch.setThumbResource(value ?
+ R.drawable.sharing_activated_0_5x :
+ R.drawable.sharing_deactivated_0_5x);
- @Override
- public boolean onOptionsItemSelected(MenuItem item) {
- if (item.getItemId() == R.id.advertise_neighborhood) {
- setAdvertiseNeighborhood(!item.isChecked());
- return true;
- } else {
- return super.onOptionsItemSelected(item);
+ // If this was a change, then toast information to the user.
+ if (sLastToastCheck == null || sLastToastCheck != value) {
+ sLastToastCheck = value;
+ Toast.makeText(getActivity(), value ?
+ R.string.presence_on : R.string.presence_off, Toast.LENGTH_SHORT).show();
}
}
}
diff --git a/app/src/syncbase/res/drawable-hdpi/ic_advertise_neighborhood_off_white_24dp.png b/app/src/syncbase/res/drawable-hdpi/ic_advertise_neighborhood_off_white_24dp.png
deleted file mode 100644
index 6e61f95..0000000
--- a/app/src/syncbase/res/drawable-hdpi/ic_advertise_neighborhood_off_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/app/src/syncbase/res/drawable-hdpi/ic_advertise_neighborhood_on_white_24dp.png b/app/src/syncbase/res/drawable-hdpi/ic_advertise_neighborhood_on_white_24dp.png
deleted file mode 100644
index 6c0314a..0000000
--- a/app/src/syncbase/res/drawable-hdpi/ic_advertise_neighborhood_on_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/app/src/syncbase/res/drawable-mdpi/ic_advertise_neighborhood_off_white_24dp.png b/app/src/syncbase/res/drawable-mdpi/ic_advertise_neighborhood_off_white_24dp.png
deleted file mode 100644
index ab03ab5..0000000
--- a/app/src/syncbase/res/drawable-mdpi/ic_advertise_neighborhood_off_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/app/src/syncbase/res/drawable-mdpi/ic_advertise_neighborhood_on_white_24dp.png b/app/src/syncbase/res/drawable-mdpi/ic_advertise_neighborhood_on_white_24dp.png
deleted file mode 100644
index 8dec6e0..0000000
--- a/app/src/syncbase/res/drawable-mdpi/ic_advertise_neighborhood_on_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/app/src/syncbase/res/drawable-xhdpi/ic_advertise_neighborhood_off_white_24dp.png b/app/src/syncbase/res/drawable-xhdpi/ic_advertise_neighborhood_off_white_24dp.png
deleted file mode 100644
index e21ea70..0000000
--- a/app/src/syncbase/res/drawable-xhdpi/ic_advertise_neighborhood_off_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/app/src/syncbase/res/drawable-xhdpi/ic_advertise_neighborhood_on_white_24dp.png b/app/src/syncbase/res/drawable-xhdpi/ic_advertise_neighborhood_on_white_24dp.png
deleted file mode 100644
index cb07640..0000000
--- a/app/src/syncbase/res/drawable-xhdpi/ic_advertise_neighborhood_on_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/app/src/syncbase/res/drawable-xxhdpi/ic_advertise_neighborhood_off_white_24dp.png b/app/src/syncbase/res/drawable-xxhdpi/ic_advertise_neighborhood_off_white_24dp.png
deleted file mode 100644
index 8735faa..0000000
--- a/app/src/syncbase/res/drawable-xxhdpi/ic_advertise_neighborhood_off_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/app/src/syncbase/res/drawable-xxhdpi/ic_advertise_neighborhood_on_white_24dp.png b/app/src/syncbase/res/drawable-xxhdpi/ic_advertise_neighborhood_on_white_24dp.png
deleted file mode 100644
index 9e9560c..0000000
--- a/app/src/syncbase/res/drawable-xxhdpi/ic_advertise_neighborhood_on_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/app/src/syncbase/res/drawable-xxxhdpi/ic_advertise_neighborhood_off_white_24dp.png b/app/src/syncbase/res/drawable-xxxhdpi/ic_advertise_neighborhood_off_white_24dp.png
deleted file mode 100644
index e28418e..0000000
--- a/app/src/syncbase/res/drawable-xxxhdpi/ic_advertise_neighborhood_off_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/app/src/syncbase/res/drawable-xxxhdpi/ic_advertise_neighborhood_on_white_24dp.png b/app/src/syncbase/res/drawable-xxxhdpi/ic_advertise_neighborhood_on_white_24dp.png
deleted file mode 100644
index f992b16..0000000
--- a/app/src/syncbase/res/drawable-xxxhdpi/ic_advertise_neighborhood_on_white_24dp.png
+++ /dev/null
Binary files differ
diff --git a/app/src/syncbase/res/drawable/sharing_activated_0_5x.png b/app/src/syncbase/res/drawable/sharing_activated_0_5x.png
new file mode 100644
index 0000000..9d52b8d
--- /dev/null
+++ b/app/src/syncbase/res/drawable/sharing_activated_0_5x.png
Binary files differ
diff --git a/app/src/syncbase/res/drawable/sharing_deactivated_0_5x.png b/app/src/syncbase/res/drawable/sharing_deactivated_0_5x.png
new file mode 100644
index 0000000..7fad11c
--- /dev/null
+++ b/app/src/syncbase/res/drawable/sharing_deactivated_0_5x.png
Binary files differ
diff --git a/app/src/syncbase/res/layout/neighborhood.xml b/app/src/syncbase/res/layout/neighborhood.xml
new file mode 100644
index 0000000..b63875f
--- /dev/null
+++ b/app/src/syncbase/res/layout/neighborhood.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+ android:orientation="horizontal"
+ android:layout_width="fill_parent"
+ android:layout_height="match_parent">
+
+ <android.support.v7.widget.SwitchCompat
+ android:id="@+id/neighborhood_switch"
+ android:layout_gravity="center_vertical"
+ android:layout_width="wrap_content"
+ android:layout_height="fill_parent"
+ android:theme="@style/SwitchCompat" />
+
+</RelativeLayout>
\ No newline at end of file
diff --git a/app/src/syncbase/res/menu/neighborhood.xml b/app/src/syncbase/res/menu/neighborhood.xml
index b7d77d8..3ae819a 100644
--- a/app/src/syncbase/res/menu/neighborhood.xml
+++ b/app/src/syncbase/res/menu/neighborhood.xml
@@ -3,8 +3,7 @@
xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/advertise_neighborhood"
android:orderInCategory="103"
- android:checkable="true"
- android:icon="@drawable/ic_advertise_neighborhood_off_white_24dp"
+ android:actionLayout="@layout/neighborhood"
android:title="@string/share_location"
android:showAsAction="always"/>
</menu>
\ No newline at end of file
diff --git a/app/src/syncbase/res/values/strings.xml b/app/src/syncbase/res/values/strings.xml
index b0e644b..f9c200f 100644
--- a/app/src/syncbase/res/values/strings.xml
+++ b/app/src/syncbase/res/values/strings.xml
@@ -1,6 +1,9 @@
<resources>
<string name="app_name">Syncbase Todos</string>
<string name="share_location">Share Presence</string>
+ <!-- For Sharing Presence Toasts -->
+ <string name="presence_on">Sharing Presence: ON</string>
+ <string name="presence_off">Sharing Presence: OFF</string>
<!-- For Sharing Menu -->
<string name="sharing_already">Shared With</string>
<string name="sharing_possible">Available</string>