From 824840d16de731860efe80df981ec10ae78bb97e Mon Sep 17 00:00:00 2001 From: Xiao Ma Date: Tue, 28 Dec 2021 06:33:23 +0000 Subject: Move Ethernet related files to f/b/packages/ConnectivityT. ethernet-service is going to be moved into Connectivity mainline module. Notice that below sources are also only used in the ethernet framework during compiling the filegroup: framework-connectivity-ethernet-sources. Move them from f/b to f/b/packages/ConnectivityT as well. Ethernet framework only related files: - IInternalNetworkManagementListener.aidl - InternalNetworkManagementException.java - InternalNetworkManagementException.aidl - InternalNetworkUpdateRequest.java - InternalNetworkUpdateRequest.aidl Ethernet service only related files: - DelayedDiskWrite.java(IpConfigStore imports this class) Bug: 210586283 Test: build pass atest FrameworksNetTests atest EthernetServiceTests Change-Id: I1ec2d1d182c04f3f2acc9b757d5061ca749a4a3c --- .../net/IInternalNetworkManagementListener.aidl | 25 ----- .../net/InternalNetworkManagementException.aidl | 19 ---- .../net/InternalNetworkManagementException.java | 59 ----------- .../android/net/InternalNetworkUpdateRequest.aidl | 19 ---- .../android/net/InternalNetworkUpdateRequest.java | 103 ------------------- packages/ConnectivityT/framework-t/Android.bp | 5 + .../net/IInternalNetworkManagementListener.aidl | 25 +++++ .../net/InternalNetworkManagementException.aidl | 19 ++++ .../net/InternalNetworkManagementException.java | 59 +++++++++++ .../android/net/InternalNetworkUpdateRequest.aidl | 19 ++++ .../android/net/InternalNetworkUpdateRequest.java | 103 +++++++++++++++++++ packages/ConnectivityT/service/Android.bp | 1 + .../com/android/server/net/DelayedDiskWrite.java | 114 +++++++++++++++++++++ .../com/android/server/net/DelayedDiskWrite.java | 98 ------------------ 14 files changed, 345 insertions(+), 323 deletions(-) delete mode 100644 core/java/android/net/IInternalNetworkManagementListener.aidl delete mode 100644 core/java/android/net/InternalNetworkManagementException.aidl delete mode 100644 core/java/android/net/InternalNetworkManagementException.java delete mode 100644 core/java/android/net/InternalNetworkUpdateRequest.aidl delete mode 100644 core/java/android/net/InternalNetworkUpdateRequest.java create mode 100644 packages/ConnectivityT/framework-t/src/android/net/IInternalNetworkManagementListener.aidl create mode 100644 packages/ConnectivityT/framework-t/src/android/net/InternalNetworkManagementException.aidl create mode 100644 packages/ConnectivityT/framework-t/src/android/net/InternalNetworkManagementException.java create mode 100644 packages/ConnectivityT/framework-t/src/android/net/InternalNetworkUpdateRequest.aidl create mode 100644 packages/ConnectivityT/framework-t/src/android/net/InternalNetworkUpdateRequest.java create mode 100644 packages/ConnectivityT/service/src/com/android/server/net/DelayedDiskWrite.java delete mode 100644 services/core/java/com/android/server/net/DelayedDiskWrite.java diff --git a/core/java/android/net/IInternalNetworkManagementListener.aidl b/core/java/android/net/IInternalNetworkManagementListener.aidl deleted file mode 100644 index 69cde3bd14e8..000000000000 --- a/core/java/android/net/IInternalNetworkManagementListener.aidl +++ /dev/null @@ -1,25 +0,0 @@ -/** - * Copyright (c) 2021, The Android Open Source 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 android.net; - -import android.net.InternalNetworkManagementException; -import android.net.Network; - -/** @hide */ -oneway interface IInternalNetworkManagementListener { - void onComplete(in Network network, in InternalNetworkManagementException exception); -} \ No newline at end of file diff --git a/core/java/android/net/InternalNetworkManagementException.aidl b/core/java/android/net/InternalNetworkManagementException.aidl deleted file mode 100644 index dcce706989f6..000000000000 --- a/core/java/android/net/InternalNetworkManagementException.aidl +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source 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 android.net; - - parcelable InternalNetworkManagementException; \ No newline at end of file diff --git a/core/java/android/net/InternalNetworkManagementException.java b/core/java/android/net/InternalNetworkManagementException.java deleted file mode 100644 index 7f4e403f2259..000000000000 --- a/core/java/android/net/InternalNetworkManagementException.java +++ /dev/null @@ -1,59 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source 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 android.net; - -import android.annotation.NonNull; -import android.os.Parcel; -import android.os.Parcelable; - -/** @hide */ -public final class InternalNetworkManagementException - extends RuntimeException implements Parcelable { - - /* @hide */ - public InternalNetworkManagementException(@NonNull final Throwable t) { - super(t); - } - - private InternalNetworkManagementException(@NonNull final Parcel source) { - super(source.readString()); - } - - @Override - public void writeToParcel(@NonNull Parcel dest, int flags) { - dest.writeString(getCause().getMessage()); - } - - @Override - public int describeContents() { - return 0; - } - - @NonNull - public static final Parcelable.Creator CREATOR = - new Parcelable.Creator() { - @Override - public InternalNetworkManagementException[] newArray(int size) { - return new InternalNetworkManagementException[size]; - } - - @Override - public InternalNetworkManagementException createFromParcel(@NonNull Parcel source) { - return new InternalNetworkManagementException(source); - } - }; -} diff --git a/core/java/android/net/InternalNetworkUpdateRequest.aidl b/core/java/android/net/InternalNetworkUpdateRequest.aidl deleted file mode 100644 index da00cb97afb4..000000000000 --- a/core/java/android/net/InternalNetworkUpdateRequest.aidl +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source 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 android.net; - - parcelable InternalNetworkUpdateRequest; \ No newline at end of file diff --git a/core/java/android/net/InternalNetworkUpdateRequest.java b/core/java/android/net/InternalNetworkUpdateRequest.java deleted file mode 100644 index f42c4b7c420d..000000000000 --- a/core/java/android/net/InternalNetworkUpdateRequest.java +++ /dev/null @@ -1,103 +0,0 @@ -/* - * Copyright (C) 2021 The Android Open Source 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 android.net; - -import android.annotation.NonNull; -import android.os.Parcel; -import android.os.Parcelable; - -import java.util.Objects; - -/** @hide */ -public final class InternalNetworkUpdateRequest implements Parcelable { - @NonNull - private final StaticIpConfiguration mIpConfig; - @NonNull - private final NetworkCapabilities mNetworkCapabilities; - - @NonNull - public StaticIpConfiguration getIpConfig() { - return new StaticIpConfiguration(mIpConfig); - } - - @NonNull - public NetworkCapabilities getNetworkCapabilities() { - return new NetworkCapabilities(mNetworkCapabilities); - } - - /** @hide */ - public InternalNetworkUpdateRequest(@NonNull final StaticIpConfiguration ipConfig, - @NonNull final NetworkCapabilities networkCapabilities) { - Objects.requireNonNull(ipConfig); - Objects.requireNonNull(networkCapabilities); - mIpConfig = new StaticIpConfiguration(ipConfig); - mNetworkCapabilities = new NetworkCapabilities(networkCapabilities); - } - - private InternalNetworkUpdateRequest(@NonNull final Parcel source) { - Objects.requireNonNull(source); - mIpConfig = StaticIpConfiguration.CREATOR.createFromParcel(source); - mNetworkCapabilities = NetworkCapabilities.CREATOR.createFromParcel(source); - } - - @Override - public String toString() { - return "InternalNetworkUpdateRequest{" - + "mIpConfig=" + mIpConfig - + ", mNetworkCapabilities=" + mNetworkCapabilities + '}'; - } - - @Override - public boolean equals(Object o) { - if (this == o) return true; - if (o == null || getClass() != o.getClass()) return false; - InternalNetworkUpdateRequest that = (InternalNetworkUpdateRequest) o; - - return Objects.equals(that.getIpConfig(), mIpConfig) - && Objects.equals(that.getNetworkCapabilities(), mNetworkCapabilities); - } - - @Override - public int hashCode() { - return Objects.hash(mIpConfig, mNetworkCapabilities); - } - - @Override - public void writeToParcel(@NonNull Parcel dest, int flags) { - mIpConfig.writeToParcel(dest, flags); - mNetworkCapabilities.writeToParcel(dest, flags); - } - - @Override - public int describeContents() { - return 0; - } - - @NonNull - public static final Parcelable.Creator CREATOR = - new Parcelable.Creator() { - @Override - public InternalNetworkUpdateRequest[] newArray(int size) { - return new InternalNetworkUpdateRequest[size]; - } - - @Override - public InternalNetworkUpdateRequest createFromParcel(@NonNull Parcel source) { - return new InternalNetworkUpdateRequest(source); - } - }; -} diff --git a/packages/ConnectivityT/framework-t/Android.bp b/packages/ConnectivityT/framework-t/Android.bp index d3d8bba16c7c..223bdcdd9c95 100644 --- a/packages/ConnectivityT/framework-t/Android.bp +++ b/packages/ConnectivityT/framework-t/Android.bp @@ -129,6 +129,11 @@ filegroup { "src/android/net/EthernetNetworkSpecifier.java", "src/android/net/IEthernetManager.aidl", "src/android/net/IEthernetServiceListener.aidl", + "src/android/net/IInternalNetworkManagementListener.aidl", + "src/android/net/InternalNetworkUpdateRequest.java", + "src/android/net/InternalNetworkUpdateRequest.aidl", + "src/android/net/InternalNetworkManagementException.java", + "src/android/net/InternalNetworkManagementException.aidl", "src/android/net/ITetheredInterfaceCallback.aidl", ], path: "src", diff --git a/packages/ConnectivityT/framework-t/src/android/net/IInternalNetworkManagementListener.aidl b/packages/ConnectivityT/framework-t/src/android/net/IInternalNetworkManagementListener.aidl new file mode 100644 index 000000000000..69cde3bd14e8 --- /dev/null +++ b/packages/ConnectivityT/framework-t/src/android/net/IInternalNetworkManagementListener.aidl @@ -0,0 +1,25 @@ +/** + * Copyright (c) 2021, The Android Open Source 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 android.net; + +import android.net.InternalNetworkManagementException; +import android.net.Network; + +/** @hide */ +oneway interface IInternalNetworkManagementListener { + void onComplete(in Network network, in InternalNetworkManagementException exception); +} \ No newline at end of file diff --git a/packages/ConnectivityT/framework-t/src/android/net/InternalNetworkManagementException.aidl b/packages/ConnectivityT/framework-t/src/android/net/InternalNetworkManagementException.aidl new file mode 100644 index 000000000000..dcce706989f6 --- /dev/null +++ b/packages/ConnectivityT/framework-t/src/android/net/InternalNetworkManagementException.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2021 The Android Open Source 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 android.net; + + parcelable InternalNetworkManagementException; \ No newline at end of file diff --git a/packages/ConnectivityT/framework-t/src/android/net/InternalNetworkManagementException.java b/packages/ConnectivityT/framework-t/src/android/net/InternalNetworkManagementException.java new file mode 100644 index 000000000000..7f4e403f2259 --- /dev/null +++ b/packages/ConnectivityT/framework-t/src/android/net/InternalNetworkManagementException.java @@ -0,0 +1,59 @@ +/* + * Copyright (C) 2021 The Android Open Source 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 android.net; + +import android.annotation.NonNull; +import android.os.Parcel; +import android.os.Parcelable; + +/** @hide */ +public final class InternalNetworkManagementException + extends RuntimeException implements Parcelable { + + /* @hide */ + public InternalNetworkManagementException(@NonNull final Throwable t) { + super(t); + } + + private InternalNetworkManagementException(@NonNull final Parcel source) { + super(source.readString()); + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + dest.writeString(getCause().getMessage()); + } + + @Override + public int describeContents() { + return 0; + } + + @NonNull + public static final Parcelable.Creator CREATOR = + new Parcelable.Creator() { + @Override + public InternalNetworkManagementException[] newArray(int size) { + return new InternalNetworkManagementException[size]; + } + + @Override + public InternalNetworkManagementException createFromParcel(@NonNull Parcel source) { + return new InternalNetworkManagementException(source); + } + }; +} diff --git a/packages/ConnectivityT/framework-t/src/android/net/InternalNetworkUpdateRequest.aidl b/packages/ConnectivityT/framework-t/src/android/net/InternalNetworkUpdateRequest.aidl new file mode 100644 index 000000000000..da00cb97afb4 --- /dev/null +++ b/packages/ConnectivityT/framework-t/src/android/net/InternalNetworkUpdateRequest.aidl @@ -0,0 +1,19 @@ +/* + * Copyright (C) 2021 The Android Open Source 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 android.net; + + parcelable InternalNetworkUpdateRequest; \ No newline at end of file diff --git a/packages/ConnectivityT/framework-t/src/android/net/InternalNetworkUpdateRequest.java b/packages/ConnectivityT/framework-t/src/android/net/InternalNetworkUpdateRequest.java new file mode 100644 index 000000000000..f42c4b7c420d --- /dev/null +++ b/packages/ConnectivityT/framework-t/src/android/net/InternalNetworkUpdateRequest.java @@ -0,0 +1,103 @@ +/* + * Copyright (C) 2021 The Android Open Source 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 android.net; + +import android.annotation.NonNull; +import android.os.Parcel; +import android.os.Parcelable; + +import java.util.Objects; + +/** @hide */ +public final class InternalNetworkUpdateRequest implements Parcelable { + @NonNull + private final StaticIpConfiguration mIpConfig; + @NonNull + private final NetworkCapabilities mNetworkCapabilities; + + @NonNull + public StaticIpConfiguration getIpConfig() { + return new StaticIpConfiguration(mIpConfig); + } + + @NonNull + public NetworkCapabilities getNetworkCapabilities() { + return new NetworkCapabilities(mNetworkCapabilities); + } + + /** @hide */ + public InternalNetworkUpdateRequest(@NonNull final StaticIpConfiguration ipConfig, + @NonNull final NetworkCapabilities networkCapabilities) { + Objects.requireNonNull(ipConfig); + Objects.requireNonNull(networkCapabilities); + mIpConfig = new StaticIpConfiguration(ipConfig); + mNetworkCapabilities = new NetworkCapabilities(networkCapabilities); + } + + private InternalNetworkUpdateRequest(@NonNull final Parcel source) { + Objects.requireNonNull(source); + mIpConfig = StaticIpConfiguration.CREATOR.createFromParcel(source); + mNetworkCapabilities = NetworkCapabilities.CREATOR.createFromParcel(source); + } + + @Override + public String toString() { + return "InternalNetworkUpdateRequest{" + + "mIpConfig=" + mIpConfig + + ", mNetworkCapabilities=" + mNetworkCapabilities + '}'; + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + InternalNetworkUpdateRequest that = (InternalNetworkUpdateRequest) o; + + return Objects.equals(that.getIpConfig(), mIpConfig) + && Objects.equals(that.getNetworkCapabilities(), mNetworkCapabilities); + } + + @Override + public int hashCode() { + return Objects.hash(mIpConfig, mNetworkCapabilities); + } + + @Override + public void writeToParcel(@NonNull Parcel dest, int flags) { + mIpConfig.writeToParcel(dest, flags); + mNetworkCapabilities.writeToParcel(dest, flags); + } + + @Override + public int describeContents() { + return 0; + } + + @NonNull + public static final Parcelable.Creator CREATOR = + new Parcelable.Creator() { + @Override + public InternalNetworkUpdateRequest[] newArray(int size) { + return new InternalNetworkUpdateRequest[size]; + } + + @Override + public InternalNetworkUpdateRequest createFromParcel(@NonNull Parcel source) { + return new InternalNetworkUpdateRequest(source); + } + }; +} diff --git a/packages/ConnectivityT/service/Android.bp b/packages/ConnectivityT/service/Android.bp index b261e165a112..36dd20054c5c 100644 --- a/packages/ConnectivityT/service/Android.bp +++ b/packages/ConnectivityT/service/Android.bp @@ -66,6 +66,7 @@ filegroup { filegroup { name: "services.connectivity-ethernet-sources", srcs: [ + "src/com/android/server/net/DelayedDiskWrite.java", "src/com/android/server/net/IpConfigStore.java", ], path: "src", diff --git a/packages/ConnectivityT/service/src/com/android/server/net/DelayedDiskWrite.java b/packages/ConnectivityT/service/src/com/android/server/net/DelayedDiskWrite.java new file mode 100644 index 000000000000..35dc4557252c --- /dev/null +++ b/packages/ConnectivityT/service/src/com/android/server/net/DelayedDiskWrite.java @@ -0,0 +1,114 @@ +/* + * Copyright (C) 2014 The Android Open Source 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 com.android.server.net; + +import android.os.Handler; +import android.os.HandlerThread; +import android.text.TextUtils; +import android.util.Log; + +import java.io.BufferedOutputStream; +import java.io.DataOutputStream; +import java.io.FileOutputStream; +import java.io.IOException; + +/** + * This class provides APIs to do a delayed data write to a given {@link OutputStream}. + */ +public class DelayedDiskWrite { + private static final String TAG = "DelayedDiskWrite"; + + private HandlerThread mDiskWriteHandlerThread; + private Handler mDiskWriteHandler; + /* Tracks multiple writes on the same thread */ + private int mWriteSequence = 0; + + /** + * Used to do a delayed data write to a given {@link OutputStream}. + */ + public interface Writer { + /** + * write data to a given {@link OutputStream}. + */ + void onWriteCalled(DataOutputStream out) throws IOException; + } + + /** + * Do a delayed data write to a given output stream opened from filePath. + */ + public void write(final String filePath, final Writer w) { + write(filePath, w, true); + } + + /** + * Do a delayed data write to a given output stream opened from filePath. + */ + public void write(final String filePath, final Writer w, final boolean open) { + if (TextUtils.isEmpty(filePath)) { + throw new IllegalArgumentException("empty file path"); + } + + /* Do a delayed write to disk on a separate handler thread */ + synchronized (this) { + if (++mWriteSequence == 1) { + mDiskWriteHandlerThread = new HandlerThread("DelayedDiskWriteThread"); + mDiskWriteHandlerThread.start(); + mDiskWriteHandler = new Handler(mDiskWriteHandlerThread.getLooper()); + } + } + + mDiskWriteHandler.post(new Runnable() { + @Override + public void run() { + doWrite(filePath, w, open); + } + }); + } + + private void doWrite(String filePath, Writer w, boolean open) { + DataOutputStream out = null; + try { + if (open) { + out = new DataOutputStream(new BufferedOutputStream( + new FileOutputStream(filePath))); + } + w.onWriteCalled(out); + } catch (IOException e) { + loge("Error writing data file " + filePath); + } finally { + if (out != null) { + try { + out.close(); + } catch (Exception e) { } + } + + // Quit if no more writes sent + synchronized (this) { + if (--mWriteSequence == 0) { + mDiskWriteHandler.getLooper().quit(); + mDiskWriteHandler = null; + mDiskWriteHandlerThread = null; + } + } + } + } + + private void loge(String s) { + Log.e(TAG, s); + } +} + diff --git a/services/core/java/com/android/server/net/DelayedDiskWrite.java b/services/core/java/com/android/server/net/DelayedDiskWrite.java deleted file mode 100644 index 8f09eb7c19ab..000000000000 --- a/services/core/java/com/android/server/net/DelayedDiskWrite.java +++ /dev/null @@ -1,98 +0,0 @@ -/* - * Copyright (C) 2014 The Android Open Source 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 com.android.server.net; - -import android.os.Handler; -import android.os.HandlerThread; -import android.text.TextUtils; -import android.util.Log; - -import java.io.BufferedOutputStream; -import java.io.DataOutputStream; -import java.io.FileOutputStream; -import java.io.IOException; - -public class DelayedDiskWrite { - private HandlerThread mDiskWriteHandlerThread; - private Handler mDiskWriteHandler; - /* Tracks multiple writes on the same thread */ - private int mWriteSequence = 0; - private final String TAG = "DelayedDiskWrite"; - - public interface Writer { - public void onWriteCalled(DataOutputStream out) throws IOException; - } - - public void write(final String filePath, final Writer w) { - write(filePath, w, true); - } - - public void write(final String filePath, final Writer w, final boolean open) { - if (TextUtils.isEmpty(filePath)) { - throw new IllegalArgumentException("empty file path"); - } - - /* Do a delayed write to disk on a separate handler thread */ - synchronized (this) { - if (++mWriteSequence == 1) { - mDiskWriteHandlerThread = new HandlerThread("DelayedDiskWriteThread"); - mDiskWriteHandlerThread.start(); - mDiskWriteHandler = new Handler(mDiskWriteHandlerThread.getLooper()); - } - } - - mDiskWriteHandler.post(new Runnable() { - @Override - public void run() { - doWrite(filePath, w, open); - } - }); - } - - private void doWrite(String filePath, Writer w, boolean open) { - DataOutputStream out = null; - try { - if (open) { - out = new DataOutputStream(new BufferedOutputStream( - new FileOutputStream(filePath))); - } - w.onWriteCalled(out); - } catch (IOException e) { - loge("Error writing data file " + filePath); - } finally { - if (out != null) { - try { - out.close(); - } catch (Exception e) {} - } - - // Quit if no more writes sent - synchronized (this) { - if (--mWriteSequence == 0) { - mDiskWriteHandler.getLooper().quit(); - mDiskWriteHandler = null; - mDiskWriteHandlerThread = null; - } - } - } - } - - private void loge(String s) { - Log.e(TAG, s); - } -} - -- cgit v1.2.3-59-g8ed1b