DeviceStorage Related Link
Volume State
dom/system/gonk/nsIVolume.idl
// These MUST match the states from android's system/vold/Volume.h header
const long STATE_INIT = -1;
const long STATE_NOMEDIA = 0;
const long STATE_IDLE = 1;
const long STATE_PENDING = 2;
const long STATE_CHECKING = 3;
const long STATE_MOUNTED = 4; // We can only use this volume in this state
const long STATE_UNMOUNTING = 5;
const long STATE_FORMATTING = 6;
const long STATE_SHARED = 7;
const long STATE_SHAREDMNT = 8;
const long STATE_CHECKMNT = 100;
const long STATE_MOUNT_FAIL = 101; // this is new added by mozilla
NS_VOLUME_STATE_CHANGED
You can listen the the event called “NS_VOLUME_STATE_CHANGED” for volume state change. (related bug : 1118177)
//@constructor
if (NS_FAILED(obs->AddObserver(this, NS_VOLUME_STATE_CHANGED, false))) {
WARNING("Failed to add ns volume observer!");
return false;
}
//PS: Need to use RemoveObserver in @desturctor.
NS_IMETHODIMP
BluetoothOppManager::Observe(nsISupports* aSubject,
const char* aTopic,
const char16_t* aData)
{
// if state of any volume was changed
if (!strcmp(aTopic, NS_VOLUME_STATE_CHANGED)) {
HandleVolumeStateChanged(aSubject);
return NS_OK;
}
}
Useful DS function
void DeviceStorageFile::GetStatus(nsAString& aStatus)
- The possibility value of aStatus are “available”, “unavailable”, “shared”
- We can access this storage only when the status is “available”.
- When this storage is in ums mode, the status is “shared”.
Useful DS function
void DeviceStorageFile::GetStorageStatus(nsAString& aStatus)
- If you want to detail state, you can use this function.
- The possibility value of aStatus are as “0. Volume State”.
Mount Lock
- e.g. Get a mount lock to prevent the sdcard from being shared with the PC or being formatted
- Related bug : 869259
File Change
- Listen "file-watcher-update" event
nsCOMPtr<nsIObserverService> obs = mozilla::services::GetObserverService();
obs->AddObserver(this, "file-watcher-update", false);
NS_IMETHOD
Observe(nsISupports* aSubject, const char* aTopic, const char16_t* aData)
{
if (!strcmp(aTopic, "file-watcher-update")) {
NS_ConvertUTF16toUTF8 eventType(aData);
DeviceStorageFile* file = static_cast<DeviceStorageFile*>(aSubject);
MTP_LOG("file-watcher-update: file %s %s",
NS_LossyConvertUTF16toASCII(file->mPath).get(),
eventType.get());
}
}
I. Add observer
II. Add event handle in observe function
Gaia Development
- MDN:
- However, something are not mentioned in this document.
'change' event
-
In MDN - File Change
- a change event is triggered each time a file is created, modified or deleted.
- This event can be captured using the onchange property or the addEventListener() method.
-
The event handler gets a DeviceStorageChangeEvent object which is a regular Event object with two extra properties:
-
DeviceStorageChangeEvent.reason which gives the reason of the change (created, modified or deleted).
- DeviceStorageChangeEvent.path which gives the full path to the file affected by the change.
-
'change' event
Not In MDN - Volume Change
-
The reasons for storage are :
-
available, unavailable, shared :
- For volume state change.
-
low-disk-space <-> available-disk-space :
- For the space status of vloume
-
default-location-changed <-> became-default-location :
- For notify gaia about the change of default location. (related to settings key “"device.storage.writable.name"”)
-
available, unavailable, shared :
'storage-state-change' Event
-
This event is for the change of real volume state change.
-
The possible reasons of this event are as below.
STATE_INIT = -1;
STATE_NOMEDIA = 0;
STATE_IDLE = 1;
STATE_PENDING = 2;
STATE_CHECKING = 3;
STATE_MOUNTED = 4; // We can only use this volume in this state
STATE_UNMOUNTING = 5;
STATE_FORMATTING = 6;
STATE_SHARED = 7;
STATE_SHAREDMNT = 8;
STATE_CHECKMNT = 100;
STATE_MOUNT_FAIL = 101; // this is new added by mozilla
MTP Test Case
DeviceStorage Related Link
By Alphan Chen
DeviceStorage Related Link
- 1,356