Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.
 
 

135 linhas
3.7 KiB

  1. package com.codezjx.andlinker;
  2. import android.os.Parcel;
  3. import android.os.Parcelable;
  4. import java.lang.reflect.Array;
  5. import java.util.Arrays;
  6. /**
  7. * Created by codezjx on 2017/9/13.<br/>
  8. */
  9. final class Request implements SuperParcelable {
  10. private String mTargetClass;
  11. private String mMethodName;
  12. private BaseTypeWrapper[] mArgsWrapper;
  13. // This field use for client slide only
  14. private boolean mOneWay = false;
  15. Request(String targetClass, String methodName, BaseTypeWrapper[] argsWrapper) {
  16. this(targetClass, methodName, argsWrapper, false);
  17. }
  18. Request(String targetClass, String methodName, BaseTypeWrapper[] argsWrapper, boolean oneWay) {
  19. mTargetClass = targetClass;
  20. mMethodName = methodName;
  21. mArgsWrapper = argsWrapper;
  22. mOneWay = oneWay;
  23. }
  24. @Override
  25. public int describeContents() {
  26. return 0;
  27. }
  28. @Override
  29. public void writeToParcel(Parcel dest, int flags) {
  30. dest.writeString(mTargetClass);
  31. dest.writeString(mMethodName);
  32. if (flags == PARCELABLE_WRITE_RETURN_VALUE) {
  33. writeParcelableArrayToParcel(dest, mArgsWrapper, flags);
  34. } else {
  35. dest.writeParcelableArray(mArgsWrapper, flags);
  36. }
  37. }
  38. @Override
  39. public void readFromParcel(Parcel in) {
  40. mTargetClass = in.readString();
  41. mMethodName = in.readString();
  42. readParcelableArrayFromParcel(in, mArgsWrapper);
  43. }
  44. private Request(Parcel in) {
  45. mTargetClass = in.readString();
  46. mMethodName = in.readString();
  47. mArgsWrapper = readParcelableArray(getClass().getClassLoader(), BaseTypeWrapper.class, in);
  48. }
  49. private <T extends BaseTypeWrapper> void writeParcelableArrayToParcel(Parcel dest, T[] value, int parcelableFlags) {
  50. if (value != null) {
  51. int N = value.length;
  52. dest.writeInt(N);
  53. for (int i = 0; i < N; i++) {
  54. value[i].writeToParcel(dest, parcelableFlags);
  55. }
  56. } else {
  57. dest.writeInt(-1);
  58. }
  59. }
  60. private <T extends BaseTypeWrapper> void readParcelableArrayFromParcel(Parcel in, T[] value) {
  61. int N = in.readInt();
  62. if (N < 0) {
  63. return;
  64. }
  65. for (int i = 0; i < N; i++) {
  66. value[i].readFromParcel(in);
  67. }
  68. }
  69. /**
  70. * Code from {@link Parcel}.readParcelableArray(ClassLoader loader, Class<T> clazz), it's a hide method.
  71. */
  72. @SuppressWarnings("unchecked")
  73. private <T extends Parcelable> T[] readParcelableArray(ClassLoader loader, Class<T> clazz, Parcel in) {
  74. int N = in.readInt();
  75. if (N < 0) {
  76. return null;
  77. }
  78. T[] p = (T[]) Array.newInstance(clazz, N);
  79. for (int i = 0; i < N; i++) {
  80. p[i] = in.readParcelable(loader);
  81. }
  82. return p;
  83. }
  84. public static final Creator<Request> CREATOR = new Creator<Request>() {
  85. @Override
  86. public Request createFromParcel(Parcel source) {
  87. return new Request(source);
  88. }
  89. @Override
  90. public Request[] newArray(int size) {
  91. return new Request[size];
  92. }
  93. };
  94. String getTargetClass() {
  95. return mTargetClass;
  96. }
  97. String getMethodName() {
  98. return mMethodName;
  99. }
  100. boolean isOneWay() {
  101. return mOneWay;
  102. }
  103. BaseTypeWrapper[] getArgsWrapper() {
  104. return mArgsWrapper;
  105. }
  106. @Override
  107. public String toString() {
  108. return "Request{" +
  109. "mTargetClass='" + mTargetClass + '\'' +
  110. ", mMethodName='" + mMethodName + '\'' +
  111. ", mArgsWrapper=" + Arrays.toString(mArgsWrapper) +
  112. '}';
  113. }
  114. }