rog2: Add Tile Sound Mode

Change-Id: I7c0b146590f92f1166b1683f1032ccb9545142d3
diff --git a/DeviceParts/AndroidManifest.xml b/DeviceParts/AndroidManifest.xml
index ef43823..1bb93e1 100644
--- a/DeviceParts/AndroidManifest.xml
+++ b/DeviceParts/AndroidManifest.xml
@@ -86,5 +86,14 @@
                     android:name="android.service.quicksettings.action.QS_TILE"/>
             </intent-filter>
         </service>
+        <service
+            android:name="org.omnirom.device.VolumeTile"
+            android:icon="@drawable/ic_volume_ringer"
+            android:label="@string/volume_mode"
+            android:permission="android.permission.BIND_QUICK_SETTINGS_TILE">
+            <intent-filter>
+                <action android:name="android.service.quicksettings.action.QS_TILE" />
+            </intent-filter>
+        </service>
     </application>
 </manifest>
diff --git a/DeviceParts/res/drawable/ic_volume_ringer.xml b/DeviceParts/res/drawable/ic_volume_ringer.xml
new file mode 100644
index 0000000..11d8428
--- /dev/null
+++ b/DeviceParts/res/drawable/ic_volume_ringer.xml
@@ -0,0 +1,5 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:sysui="http://schemas.android.com/apk/res-auto" xmlns:aapt="http://schemas.android.com/aapt" android:tint="?android:attr/colorControlNormal" android:height="24dp" android:width="24dp" android:viewportWidth="24" android:viewportHeight="24">
+    <path android:fillColor="#ffffffff" android:pathData="M18,17v-6c0,-3.07 -1.63,-5.64 -4.5,-6.32V4c0,-0.83 -0.67,-1.5 -1.5,-1.5S10.5,3.17 10.5,4v0.68C7.64,5.36 6,7.92 6,11v6H4v2h10h0.38H20v-2H18zM16,17H8v-6c0,-2.48 1.51,-4.5 4,-4.5s4,2.02 4,4.5V17z"/>
+    <path android:fillColor="#ffffffff" android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4C10,21.1 10.9,22 12,22z"/>
+</vector>
diff --git a/DeviceParts/res/drawable/ic_volume_ringer_mute.xml b/DeviceParts/res/drawable/ic_volume_ringer_mute.xml
new file mode 100644
index 0000000..f6f486f
--- /dev/null
+++ b/DeviceParts/res/drawable/ic_volume_ringer_mute.xml
@@ -0,0 +1,6 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:sysui="http://schemas.android.com/apk/res-auto" xmlns:aapt="http://schemas.android.com/aapt" android:tint="?android:attr/colorControlNormal" android:height="24dp" android:width="24dp" android:viewportWidth="24" android:viewportHeight="24">
+    <path android:fillColor="#ffffffff" android:pathData="M12,22c1.1,0 2,-0.9 2,-2h-4C10,21.1 10.9,22 12,22z"/>
+    <path android:fillColor="#ffffffff" android:pathData="M16,16L2.81,2.81L1.39,4.22l4.85,4.85C6.09,9.68 6,10.33 6,11v6H4v2h12.17l3.61,3.61l1.41,-1.41L16,16zM8,17c0,0 0.01,-6.11 0.01,-6.16L14.17,17H8z"/>
+    <path android:fillColor="#ffffffff" android:pathData="M12,6.5c2.49,0 4,2.02 4,4.5v2.17l2,2V11c0,-3.07 -1.63,-5.64 -4.5,-6.32V4c0,-0.83 -0.67,-1.5 -1.5,-1.5S10.5,3.17 10.5,4v0.68C9.72,4.86 9.05,5.2 8.46,5.63L9.93,7.1C10.51,6.73 11.2,6.5 12,6.5z"/>
+</vector>
diff --git a/DeviceParts/res/drawable/ic_volume_ringer_vibrate.xml b/DeviceParts/res/drawable/ic_volume_ringer_vibrate.xml
new file mode 100644
index 0000000..9010c53
--- /dev/null
+++ b/DeviceParts/res/drawable/ic_volume_ringer_vibrate.xml
@@ -0,0 +1,4 @@
+<?xml version="1.0" encoding="utf-8"?>
+<vector xmlns:androidprv="http://schemas.android.com/apk/prv/res/android" xmlns:android="http://schemas.android.com/apk/res/android" xmlns:sysui="http://schemas.android.com/apk/res-auto" xmlns:aapt="http://schemas.android.com/aapt" android:height="19dp" android:width="19dp" android:viewportWidth="24" android:viewportHeight="24">
+    <path android:fillColor="#ffffffff" android:pathData="M1,9h2v6H1V9zM4,17h2V7H4V17zM21,9v6h2V9H21zM18,17h2V7h-2V17zM17,5.5v13c0,0.83 -0.67,1.5 -1.5,1.5h-7C7.67,20 7,19.33 7,18.5v-13C7,4.67 7.67,4 8.5,4h7C16.33,4 17,4.67 17,5.5zM15,6H9v12h6V6z"/>
+</vector>
diff --git a/DeviceParts/res/values/strings.xml b/DeviceParts/res/values/strings.xml
index 8284a21..0d50ce8 100644
--- a/DeviceParts/res/values/strings.xml
+++ b/DeviceParts/res/values/strings.xml
@@ -77,4 +77,9 @@
     <string name="category_frame_rate">FPS of the screen</string>
     <string name="refresh_rate_title">Refresh rate</string>
     <string name="summary_placeholder"> </string>
+
+    <!-- Volume panel QS tile -->
+    <string name="volume_mode">Sound</string>
+    <string name="vibrate_mode">Vibrate</string>
+    <string name="mute_mode">Mute</string>
 </resources>
diff --git a/DeviceParts/src/org/omnirom/device/VolumeTile.java b/DeviceParts/src/org/omnirom/device/VolumeTile.java
new file mode 100644
index 0000000..c2126eb
--- /dev/null
+++ b/DeviceParts/src/org/omnirom/device/VolumeTile.java
@@ -0,0 +1,96 @@
+/*
+ * Copyright (C) 2020 The OmniROM 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 org.omnirom.device;
+
+import android.content.Context;
+import android.content.Intent;
+import android.graphics.drawable.Icon;
+import android.media.AudioManager;
+import android.service.quicksettings.Tile;
+import android.service.quicksettings.TileService;
+
+public class VolumeTile extends TileService {
+	private AudioManager mAudioManager;
+    
+    @Override
+    public void onDestroy() {
+        super.onDestroy();
+    }
+
+    @Override
+    public void onTileAdded() {
+        super.onTileAdded();
+    }
+
+    @Override
+    public void onTileRemoved() {
+        super.onTileRemoved();
+    }
+
+    @Override
+    public void onStartListening() {
+        super.onStartListening();
+        mAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
+
+        switch (mAudioManager.getRingerModeInternal()) {
+			case AudioManager.RINGER_MODE_SILENT:
+                getQsTile().setIcon(Icon.createWithResource(this, R.drawable.ic_volume_ringer_mute));
+                getQsTile().setLabel(getString(R.string.mute_mode));
+                break;
+            case AudioManager.RINGER_MODE_VIBRATE:
+                getQsTile().setIcon(Icon.createWithResource(this, R.drawable.ic_volume_ringer_vibrate));
+                getQsTile().setLabel(getString(R.string.vibrate_mode));
+                break;
+            case AudioManager.RINGER_MODE_NORMAL:
+                getQsTile().setIcon(Icon.createWithResource(this, R.drawable.ic_volume_ringer));
+                getQsTile().setLabel(getString(R.string.volume_mode));
+                break;
+        }
+        getQsTile().setState(Tile.STATE_ACTIVE);
+        getQsTile().updateTile();
+    }
+
+    @Override
+    public void onStopListening() {
+        super.onStopListening();
+    }
+    
+    @Override
+    public void onClick() {
+        super.onClick();
+        mAudioManager = (AudioManager) this.getSystemService(Context.AUDIO_SERVICE);
+
+        switch (mAudioManager.getRingerModeInternal()) {
+            case AudioManager.RINGER_MODE_SILENT:
+                mAudioManager.setRingerModeInternal(AudioManager.RINGER_MODE_NORMAL);
+                getQsTile().setIcon(Icon.createWithResource(this, R.drawable.ic_volume_ringer));
+                getQsTile().setLabel(getString(R.string.volume_mode));
+                break;
+            case AudioManager.RINGER_MODE_VIBRATE:
+                mAudioManager.setRingerModeInternal(AudioManager.RINGER_MODE_SILENT);
+                getQsTile().setIcon(Icon.createWithResource(this, R.drawable.ic_volume_ringer_mute));
+                getQsTile().setLabel(getString(R.string.mute_mode));
+                break;
+            case AudioManager.RINGER_MODE_NORMAL:
+                mAudioManager.setRingerModeInternal(AudioManager.RINGER_MODE_VIBRATE);
+                getQsTile().setIcon(Icon.createWithResource(this, R.drawable.ic_volume_ringer_vibrate));
+                getQsTile().setLabel(getString(R.string.vibrate_mode));                
+                break;
+        }
+        getQsTile().updateTile();
+    }
+
+}
\ No newline at end of file