diff options
Diffstat (limited to 'java/com/android/dialer/callintent')
-rw-r--r-- | java/com/android/dialer/callintent/CallIntentParser.java | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/java/com/android/dialer/callintent/CallIntentParser.java b/java/com/android/dialer/callintent/CallIntentParser.java index b54f7c78b..01afce06d 100644 --- a/java/com/android/dialer/callintent/CallIntentParser.java +++ b/java/com/android/dialer/callintent/CallIntentParser.java @@ -19,32 +19,35 @@ package com.android.dialer.callintent; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; -import com.android.dialer.common.Assert; -import com.google.protobuf.InvalidProtocolBufferException; +import com.android.dialer.protos.ProtoParsers; /** Parses data for a call extra to get any dialer specific app data. */ public class CallIntentParser { + static final String EXTRA_CALL_SPECIFIC_APP_DATA_WRAPPER = + "com.android.dialer.callintent.CALL_SPECIFIC_APP_DATA_WRAPPER"; @Nullable public static CallSpecificAppData getCallSpecificAppData(@Nullable Bundle extras) { if (extras == null) { return null; } - byte[] flatArray = extras.getByteArray(Constants.EXTRA_CALL_SPECIFIC_APP_DATA); - if (flatArray == null) { - return null; - } - try { - return CallSpecificAppData.parseFrom(flatArray); - } catch (InvalidProtocolBufferException e) { - Assert.fail("unexpected exception: " + e); + if (!extras.containsKey(Constants.EXTRA_CALL_SPECIFIC_APP_DATA)) { return null; } + + return ProtoParsers.getTrusted( + extras.getBundle(Constants.EXTRA_CALL_SPECIFIC_APP_DATA), + EXTRA_CALL_SPECIFIC_APP_DATA_WRAPPER, + CallSpecificAppData.getDefaultInstance()); } public static void putCallSpecificAppData( @NonNull Bundle extras, @NonNull CallSpecificAppData callSpecificAppData) { - extras.putByteArray(Constants.EXTRA_CALL_SPECIFIC_APP_DATA, callSpecificAppData.toByteArray()); + // We wrap our bundle for consumers that may not have access to ProtoParsers in their class + // loader. This is necessary to prevent ClassNotFoundException's + Bundle wrapperBundle = new Bundle(); + ProtoParsers.put(wrapperBundle, EXTRA_CALL_SPECIFIC_APP_DATA_WRAPPER, callSpecificAppData); + extras.putBundle(Constants.EXTRA_CALL_SPECIFIC_APP_DATA, wrapperBundle); } private CallIntentParser() {} |