summaryrefslogtreecommitdiffstats
path: root/media
diff options
context:
space:
mode:
Diffstat (limited to 'media')
-rw-r--r--media/java/android/media/AudioManager.java24
-rw-r--r--media/java/android/media/RingtoneManager.java69
2 files changed, 67 insertions, 26 deletions
diff --git a/media/java/android/media/AudioManager.java b/media/java/android/media/AudioManager.java
index 035b282..f55a0bb 100644
--- a/media/java/android/media/AudioManager.java
+++ b/media/java/android/media/AudioManager.java
@@ -19,6 +19,8 @@ package android.media;
import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.app.PendingIntent;
+import android.app.ProfileGroup;
+import android.app.ProfileManager;
import android.bluetooth.BluetoothDevice;
import android.content.ComponentName;
import android.content.Context;
@@ -51,6 +53,7 @@ public class AudioManager {
private final boolean mUseMasterVolume;
private final boolean mUseVolumeKeySounds;
private static String TAG = "AudioManager";
+ private final ProfileManager mProfileManager;
/**
* Broadcast intent, a hint for applications that audio is about to become
@@ -422,6 +425,7 @@ public class AudioManager {
com.android.internal.R.bool.config_useMasterVolume);
mUseVolumeKeySounds = mContext.getResources().getBoolean(
com.android.internal.R.bool.config_useVolumeKeySounds);
+ mProfileManager = (ProfileManager) context.getSystemService(Context.PROFILE_SERVICE);
}
private static IAudioService getService()
@@ -1000,6 +1004,26 @@ public class AudioManager {
* current ringer mode that can be queried via {@link #getRingerMode()}.
*/
public boolean shouldVibrate(int vibrateType) {
+ String packageName = mContext.getPackageName();
+ // Don't apply profiles for "android" context, as these could
+ // come from the NotificationManager, and originate from a real package.
+ if (!packageName.equals("android")) {
+ ProfileGroup profileGroup = mProfileManager.getActiveProfileGroup(packageName);
+ if (profileGroup != null) {
+ Log.v(TAG, "shouldVibrate, group: " + profileGroup.getUuid()
+ + " mode: " + profileGroup.getVibrateMode());
+ switch (profileGroup.getVibrateMode()) {
+ case OVERRIDE :
+ return true;
+ case SUPPRESS :
+ return false;
+ case DEFAULT :
+ // Drop through
+ }
+ }
+ } else {
+ Log.v(TAG, "Not applying override for 'android' package");
+ }
IAudioService service = getService();
try {
return service.shouldVibrate(vibrateType);
diff --git a/media/java/android/media/RingtoneManager.java b/media/java/android/media/RingtoneManager.java
index 5e18bfa..b5a672a 100644
--- a/media/java/android/media/RingtoneManager.java
+++ b/media/java/android/media/RingtoneManager.java
@@ -22,6 +22,8 @@ import android.annotation.SdkConstant;
import android.annotation.SdkConstant.SdkConstantType;
import android.app.Activity;
import android.content.ContentUris;
+import android.app.ProfileGroup;
+import android.app.ProfileManager;
import android.content.Context;
import android.content.res.AssetFileDescriptor;
import android.database.Cursor;
@@ -55,29 +57,29 @@ public class RingtoneManager {
// Make sure these are in sync with attrs.xml:
// <attr name="ringtoneType">
-
+
/**
* Type that refers to sounds that are used for the phone ringer.
*/
public static final int TYPE_RINGTONE = 1;
-
+
/**
* Type that refers to sounds that are used for notifications.
*/
public static final int TYPE_NOTIFICATION = 2;
-
+
/**
* Type that refers to sounds that are used for the alarm.
*/
public static final int TYPE_ALARM = 4;
-
+
/**
* All types of sounds.
*/
public static final int TYPE_ALL = TYPE_RINGTONE | TYPE_NOTIFICATION | TYPE_ALARM;
// </attr>
-
+
/**
* Activity Action: Shows a ringtone picker.
* <p>
@@ -131,7 +133,7 @@ public class RingtoneManager {
*/
public static final String EXTRA_RINGTONE_EXISTING_URI =
"android.intent.extra.ringtone.EXISTING_URI";
-
+
/**
* Given to the ringtone picker as a {@link Uri}. The {@link Uri} of the
* ringtone to play when the user attempts to preview the "Default"
@@ -144,7 +146,7 @@ public class RingtoneManager {
*/
public static final String EXTRA_RINGTONE_DEFAULT_URI =
"android.intent.extra.ringtone.DEFAULT_URI";
-
+
/**
* Given to the ringtone picker as an int. Specifies which ringtone type(s) should be
* shown in the picker. One or more of {@link #TYPE_RINGTONE},
@@ -194,7 +196,7 @@ public class RingtoneManager {
"\"" + MediaStore.Audio.Media.EXTERNAL_CONTENT_URI + "\"",
MediaStore.Audio.Media.TITLE_KEY
};
-
+
/**
* The column index (in the cursor returned by {@link #getCursor()} for the
* row ID.
@@ -215,11 +217,11 @@ public class RingtoneManager {
private Activity mActivity;
private Context mContext;
-
+
private Cursor mCursor;
private int mType = TYPE_RINGTONE;
-
+
/**
* If a column (item from this list) exists in the Cursor, its value must
* be true (value of 1) for the row to be returned.
@@ -230,7 +232,7 @@ public class RingtoneManager {
private Ringtone mPreviousRingtone;
private boolean mIncludeDrm;
-
+
/**
* Constructs a RingtoneManager. This constructor is recommended as its
* constructed instance manages cursor(s).
@@ -322,7 +324,7 @@ public class RingtoneManager {
mPreviousRingtone.stop();
}
}
-
+
/**
* Returns whether DRM ringtones will be included.
*
@@ -365,7 +367,7 @@ public class RingtoneManager {
final Cursor internalCursor = getInternalRingtones();
final Cursor drmCursor = mIncludeDrm ? getDrmRingtones() : null;
final Cursor mediaCursor = getMediaRingtones();
-
+
return mCursor = new SortCursor(new Cursor[] { internalCursor, drmCursor, mediaCursor },
MediaStore.Audio.Media.DEFAULT_SORT_ORDER);
}
@@ -401,12 +403,12 @@ public class RingtoneManager {
return getUriFromCursor(mCursor);
}
-
+
private static Uri getUriFromCursor(Cursor cursor) {
return ContentUris.withAppendedId(Uri.parse(cursor.getString(URI_COLUMN_INDEX)), cursor
.getLong(ID_COLUMN_INDEX));
}
-
+
/**
* Gets the position of a {@link Uri} within this {@link RingtoneManager}.
*
@@ -527,7 +529,7 @@ public class RingtoneManager {
columns.add(MediaStore.Audio.AudioColumns.IS_ALARM);
}
}
-
+
/**
* Constructs a where clause that consists of at least one column being 1
* (true). This is used to find all matching sounds for the given sound
@@ -539,7 +541,7 @@ public class RingtoneManager {
private static String constructBooleanTrueWhereClause(List<String> columns, boolean includeDrm) {
if (columns == null) return null;
-
+
StringBuilder sb = new StringBuilder();
sb.append("(");
@@ -565,7 +567,7 @@ public class RingtoneManager {
return sb.toString();
}
-
+
private Cursor query(Uri uri,
String[] projection,
String selection,
@@ -578,7 +580,7 @@ public class RingtoneManager {
sortOrder);
}
}
-
+
/**
* Returns a {@link Ringtone} for a given sound URI.
* <p>
@@ -606,11 +608,26 @@ public class RingtoneManager {
* @see #getRingtone(Context, Uri)
*/
private static Ringtone getRingtone(final Context context, Uri ringtoneUri, int streamType) {
+ ProfileManager pm = (ProfileManager)context.getSystemService(context.PROFILE_SERVICE);
+ ProfileGroup profileGroup = pm.getActiveProfileGroup(context.getPackageName());
+
try {
- final Ringtone r = new Ringtone(context, true);
+ Ringtone r = new Ringtone(context, true);
if (streamType >= 0) {
r.setStreamType(streamType);
}
+
+ if (profileGroup != null) {
+ switch (profileGroup.getRingerMode()) {
+ case OVERRIDE :
+ r.setUri(profileGroup.getRingerOverride());
+ return r;
+ case SUPPRESS :
+ r = null;
+ return r;
+ }
+ }
+
r.setUri(ringtoneUri);
return r;
} catch (Exception ex) {
@@ -619,7 +636,7 @@ public class RingtoneManager {
return null;
}
-
+
/**
* Gets the current default sound's {@link Uri}. This will give the actual
* sound {@link Uri}, instead of using this, most clients can use
@@ -638,7 +655,7 @@ public class RingtoneManager {
final String uriString = Settings.System.getString(context.getContentResolver(), setting);
return uriString != null ? Uri.parse(uriString) : null;
}
-
+
/**
* Sets the {@link Uri} of the default sound for a given sound type.
*
@@ -655,7 +672,7 @@ public class RingtoneManager {
Settings.System.putString(context.getContentResolver(), setting,
ringtoneUri != null ? ringtoneUri.toString() : null);
}
-
+
private static String getSettingForType(int type) {
if ((type & TYPE_RINGTONE) != 0) {
return Settings.System.RINGTONE;
@@ -667,7 +684,7 @@ public class RingtoneManager {
return null;
}
}
-
+
/**
* Returns whether the given {@link Uri} is one of the default ringtones.
*
@@ -677,7 +694,7 @@ public class RingtoneManager {
public static boolean isDefault(Uri ringtoneUri) {
return getDefaultType(ringtoneUri) != -1;
}
-
+
/**
* Returns the type of a default {@link Uri}.
*
@@ -700,7 +717,7 @@ public class RingtoneManager {
return -1;
}
}
-
+
/**
* Returns the {@link Uri} for the default ringtone of a particular type.
* Rather than returning the actual ringtone's sound {@link Uri}, this will