Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4a91bcff authored by Meng Wang's avatar Meng Wang Committed by Android (Google) Code Review
Browse files

Merge "Do not use hidden API ParcelableException"

parents 47718be3 15423142
Loading
Loading
Loading
Loading
+1 −2
Original line number Original line Diff line number Diff line
@@ -16,7 +16,6 @@


package android.telephony;
package android.telephony;


import android.os.ParcelableException;
import android.telephony.CellInfo;
import android.telephony.CellInfo;


import java.util.List;
import java.util.List;
@@ -28,5 +27,5 @@ import java.util.List;
oneway interface ICellInfoCallback
oneway interface ICellInfoCallback
{
{
    void onCellInfo(in List<CellInfo> state);
    void onCellInfo(in List<CellInfo> state);
    void onError(in int errorCode, in ParcelableException detail);
    void onError(in int errorCode, in String exceptionName, in String message);
}
}
+22 −5
Original line number Original line Diff line number Diff line
@@ -5570,18 +5570,20 @@ public class TelephonyManager {
            telephony.requestCellInfoUpdate(
            telephony.requestCellInfoUpdate(
                    getSubId(),
                    getSubId(),
                    new ICellInfoCallback.Stub() {
                    new ICellInfoCallback.Stub() {
                        @Override
                        public void onCellInfo(List<CellInfo> cellInfo) {
                        public void onCellInfo(List<CellInfo> cellInfo) {
                            Binder.withCleanCallingIdentity(() ->
                            Binder.withCleanCallingIdentity(() ->
                                    executor.execute(() -> callback.onCellInfo(cellInfo)));
                                    executor.execute(() -> callback.onCellInfo(cellInfo)));
                        }
                        }


                        public void onError(int errorCode, android.os.ParcelableException detail) {
                        @Override
                        public void onError(int errorCode, String exceptionName, String message) {
                            Binder.withCleanCallingIdentity(() ->
                            Binder.withCleanCallingIdentity(() ->
                                    executor.execute(() -> callback.onError(
                                    executor.execute(() -> callback.onError(
                                            errorCode, detail.getCause())));
                                            errorCode,
                                            createThrowableByClassName(exceptionName, message))));
                        }
                        }
                    }, getOpPackageName());
                    }, getOpPackageName());

        } catch (RemoteException ex) {
        } catch (RemoteException ex) {
        }
        }
    }
    }
@@ -5610,21 +5612,36 @@ public class TelephonyManager {
            telephony.requestCellInfoUpdateWithWorkSource(
            telephony.requestCellInfoUpdateWithWorkSource(
                    getSubId(),
                    getSubId(),
                    new ICellInfoCallback.Stub() {
                    new ICellInfoCallback.Stub() {
                        @Override
                        public void onCellInfo(List<CellInfo> cellInfo) {
                        public void onCellInfo(List<CellInfo> cellInfo) {
                            Binder.withCleanCallingIdentity(() ->
                            Binder.withCleanCallingIdentity(() ->
                                    executor.execute(() -> callback.onCellInfo(cellInfo)));
                                    executor.execute(() -> callback.onCellInfo(cellInfo)));
                        }
                        }


                        public void onError(int errorCode, android.os.ParcelableException detail) {
                        @Override
                        public void onError(int errorCode, String exceptionName, String message) {
                            Binder.withCleanCallingIdentity(() ->
                            Binder.withCleanCallingIdentity(() ->
                                    executor.execute(() -> callback.onError(
                                    executor.execute(() -> callback.onError(
                                            errorCode, detail.getCause())));
                                            errorCode,
                                            createThrowableByClassName(exceptionName, message))));
                        }
                        }
                    }, getOpPackageName(), workSource);
                    }, getOpPackageName(), workSource);
        } catch (RemoteException ex) {
        } catch (RemoteException ex) {
        }
        }
    }
    }


    private static Throwable createThrowableByClassName(String className, String message) {
        if (className == null) {
            return null;
        }
        try {
            Class<?> c = Class.forName(className);
            return (Throwable) c.getConstructor(String.class).newInstance(message);
        } catch (ReflectiveOperationException | ClassCastException e) {
        }
        return new RuntimeException(className + ": " + message);
    }

    /**
    /**
     * Sets the minimum time in milli-seconds between {@link PhoneStateListener#onCellInfoChanged
     * Sets the minimum time in milli-seconds between {@link PhoneStateListener#onCellInfoChanged
     * PhoneStateListener.onCellInfoChanged} will be invoked.
     * PhoneStateListener.onCellInfoChanged} will be invoked.