• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2009 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package android.os.storage;
18 
19 import android.os.Binder;
20 import android.os.IBinder;
21 import android.os.IInterface;
22 import android.os.Parcel;
23 import android.os.RemoteException;
24 
25 /**
26  * Callback class for receiving events from MountService.
27  *
28  * @hide - Applications should use IStorageEventListener for storage event
29  *       callbacks.
30  */
31 public interface IMountServiceListener extends IInterface {
32     /** Local-side IPC implementation stub class. */
33     public static abstract class Stub extends Binder implements IMountServiceListener {
34         private static final String DESCRIPTOR = "IMountServiceListener";
35 
36         /** Construct the stub at attach it to the interface. */
Stub()37         public Stub() {
38             this.attachInterface(this, DESCRIPTOR);
39         }
40 
41         /**
42          * Cast an IBinder object into an IMountServiceListener interface,
43          * generating a proxy if needed.
44          */
asInterface(IBinder obj)45         public static IMountServiceListener asInterface(IBinder obj) {
46             if ((obj == null)) {
47                 return null;
48             }
49             IInterface iin = (IInterface) obj.queryLocalInterface(DESCRIPTOR);
50             if (((iin != null) && (iin instanceof IMountServiceListener))) {
51                 return ((IMountServiceListener) iin);
52             }
53             return new IMountServiceListener.Stub.Proxy(obj);
54         }
55 
asBinder()56         public IBinder asBinder() {
57             return this;
58         }
59 
60         @Override
onTransact(int code, Parcel data, Parcel reply, int flags)61         public boolean onTransact(int code, Parcel data, Parcel reply, int flags)
62                 throws RemoteException {
63             switch (code) {
64                 case INTERFACE_TRANSACTION: {
65                     reply.writeString(DESCRIPTOR);
66                     return true;
67                 }
68                 case TRANSACTION_onUsbMassStorageConnectionChanged: {
69                     data.enforceInterface(DESCRIPTOR);
70                     boolean connected;
71                     connected = (0 != data.readInt());
72                     this.onUsbMassStorageConnectionChanged(connected);
73                     reply.writeNoException();
74                     return true;
75                 }
76                 case TRANSACTION_onStorageStateChanged: {
77                     data.enforceInterface(DESCRIPTOR);
78                     String path;
79                     path = data.readString();
80                     String oldState;
81                     oldState = data.readString();
82                     String newState;
83                     newState = data.readString();
84                     this.onStorageStateChanged(path, oldState, newState);
85                     reply.writeNoException();
86                     return true;
87                 }
88             }
89             return super.onTransact(code, data, reply, flags);
90         }
91 
92         private static class Proxy implements IMountServiceListener {
93             private IBinder mRemote;
94 
Proxy(IBinder remote)95             Proxy(IBinder remote) {
96                 mRemote = remote;
97             }
98 
asBinder()99             public IBinder asBinder() {
100                 return mRemote;
101             }
102 
getInterfaceDescriptor()103             public String getInterfaceDescriptor() {
104                 return DESCRIPTOR;
105             }
106 
107             /**
108              * Detection state of USB Mass Storage has changed
109              *
110              * @param available true if a UMS host is connected.
111              */
onUsbMassStorageConnectionChanged(boolean connected)112             public void onUsbMassStorageConnectionChanged(boolean connected) throws RemoteException {
113                 Parcel _data = Parcel.obtain();
114                 Parcel _reply = Parcel.obtain();
115                 try {
116                     _data.writeInterfaceToken(DESCRIPTOR);
117                     _data.writeInt(((connected) ? (1) : (0)));
118                     mRemote.transact(Stub.TRANSACTION_onUsbMassStorageConnectionChanged, _data,
119                             _reply, 0);
120                     _reply.readException();
121                 } finally {
122                     _reply.recycle();
123                     _data.recycle();
124                 }
125             }
126 
127             /**
128              * Storage state has changed.
129              *
130              * @param path The volume mount path.
131              * @param oldState The old state of the volume.
132              * @param newState The new state of the volume. Note: State is one
133              *            of the values returned by
134              *            Environment.getExternalStorageState()
135              */
onStorageStateChanged(String path, String oldState, String newState)136             public void onStorageStateChanged(String path, String oldState, String newState)
137                     throws RemoteException {
138                 Parcel _data = Parcel.obtain();
139                 Parcel _reply = Parcel.obtain();
140                 try {
141                     _data.writeInterfaceToken(DESCRIPTOR);
142                     _data.writeString(path);
143                     _data.writeString(oldState);
144                     _data.writeString(newState);
145                     mRemote.transact(Stub.TRANSACTION_onStorageStateChanged, _data, _reply, 0);
146                     _reply.readException();
147                 } finally {
148                     _reply.recycle();
149                     _data.recycle();
150                 }
151             }
152         }
153 
154         static final int TRANSACTION_onUsbMassStorageConnectionChanged = (IBinder.FIRST_CALL_TRANSACTION + 0);
155 
156         static final int TRANSACTION_onStorageStateChanged = (IBinder.FIRST_CALL_TRANSACTION + 1);
157     }
158 
159     /**
160      * Detection state of USB Mass Storage has changed
161      *
162      * @param available true if a UMS host is connected.
163      */
onUsbMassStorageConnectionChanged(boolean connected)164     public void onUsbMassStorageConnectionChanged(boolean connected) throws RemoteException;
165 
166     /**
167      * Storage state has changed.
168      *
169      * @param path The volume mount path.
170      * @param oldState The old state of the volume.
171      * @param newState The new state of the volume. Note: State is one of the
172      *            values returned by Environment.getExternalStorageState()
173      */
onStorageStateChanged(String path, String oldState, String newState)174     public void onStorageStateChanged(String path, String oldState, String newState)
175             throws RemoteException;
176 }
177