Search in sources :

Example 36 with VolumeRecord

use of android.os.storage.VolumeRecord in project platform_frameworks_base by android.

the class MountService method readVolumeRecord.

public static VolumeRecord readVolumeRecord(XmlPullParser in) throws IOException {
    final int type = readIntAttribute(in, ATTR_TYPE);
    final String fsUuid = readStringAttribute(in, ATTR_FS_UUID);
    final VolumeRecord meta = new VolumeRecord(type, fsUuid);
    meta.partGuid = readStringAttribute(in, ATTR_PART_GUID);
    meta.nickname = readStringAttribute(in, ATTR_NICKNAME);
    meta.userFlags = readIntAttribute(in, ATTR_USER_FLAGS);
    meta.createdMillis = readLongAttribute(in, ATTR_CREATED_MILLIS);
    meta.lastTrimMillis = readLongAttribute(in, ATTR_LAST_TRIM_MILLIS);
    meta.lastBenchMillis = readLongAttribute(in, ATTR_LAST_BENCH_MILLIS);
    return meta;
}
Also used : VolumeRecord(android.os.storage.VolumeRecord)

Example 37 with VolumeRecord

use of android.os.storage.VolumeRecord in project platform_frameworks_base by android.

the class MountService method setVolumeUserFlags.

@Override
public void setVolumeUserFlags(String fsUuid, int flags, int mask) {
    enforcePermission(android.Manifest.permission.MOUNT_UNMOUNT_FILESYSTEMS);
    waitForReady();
    Preconditions.checkNotNull(fsUuid);
    synchronized (mLock) {
        final VolumeRecord rec = mRecords.get(fsUuid);
        rec.userFlags = (rec.userFlags & ~mask) | (flags & mask);
        mCallbacks.notifyVolumeRecordChanged(rec);
        writeSettingsLocked();
    }
}
Also used : VolumeRecord(android.os.storage.VolumeRecord)

Example 38 with VolumeRecord

use of android.os.storage.VolumeRecord in project android_frameworks_base by DirtyUnicorns.

the class StorageNotification method onVolumeMounted.

private Notification onVolumeMounted(VolumeInfo vol) {
    final VolumeRecord rec = mStorageManager.findRecordByUuid(vol.getFsUuid());
    final DiskInfo disk = vol.getDisk();
    // used to allow snoozing non-adoptable disks too.)
    if (rec.isSnoozed() && disk.isAdoptable()) {
        return null;
    }
    if (disk.isAdoptable() && !rec.isInited()) {
        final CharSequence title = disk.getDescription();
        final CharSequence text = mContext.getString(R.string.ext_media_new_notification_message, disk.getDescription());
        final PendingIntent initIntent = buildInitPendingIntent(vol);
        return buildNotificationBuilder(vol, title, text).addAction(new Action(R.drawable.ic_settings_24dp, mContext.getString(R.string.ext_media_init_action), initIntent)).addAction(new Action(R.drawable.ic_eject_24dp, mContext.getString(R.string.ext_media_unmount_action), buildUnmountPendingIntent(vol))).setContentIntent(initIntent).setDeleteIntent(buildSnoozeIntent(vol.getFsUuid())).setCategory(Notification.CATEGORY_SYSTEM).build();
    } else {
        final CharSequence title = disk.getDescription();
        final CharSequence text = mContext.getString(R.string.ext_media_ready_notification_message, disk.getDescription());
        final PendingIntent browseIntent = buildBrowsePendingIntent(vol);
        final Notification.Builder builder = buildNotificationBuilder(vol, title, text).addAction(new Action(R.drawable.ic_folder_24dp, mContext.getString(R.string.ext_media_browse_action), browseIntent)).addAction(new Action(R.drawable.ic_eject_24dp, mContext.getString(R.string.ext_media_unmount_action), buildUnmountPendingIntent(vol))).setContentIntent(browseIntent).setCategory(Notification.CATEGORY_SYSTEM).setPriority(Notification.PRIORITY_LOW);
        // Non-adoptable disks can't be snoozed.
        if (disk.isAdoptable()) {
            builder.setDeleteIntent(buildSnoozeIntent(vol.getFsUuid()));
        }
        return builder.build();
    }
}
Also used : VolumeRecord(android.os.storage.VolumeRecord) Action(android.app.Notification.Action) DiskInfo(android.os.storage.DiskInfo) PendingIntent(android.app.PendingIntent) Notification(android.app.Notification)

Example 39 with VolumeRecord

use of android.os.storage.VolumeRecord in project android_frameworks_base by DirtyUnicorns.

the class MountService method readSettingsLocked.

private void readSettingsLocked() {
    mRecords.clear();
    mPrimaryStorageUuid = getDefaultPrimaryStorageUuid();
    mForceAdoptable = false;
    FileInputStream fis = null;
    try {
        fis = mSettingsFile.openRead();
        final XmlPullParser in = Xml.newPullParser();
        in.setInput(fis, StandardCharsets.UTF_8.name());
        int type;
        while ((type = in.next()) != END_DOCUMENT) {
            if (type == START_TAG) {
                final String tag = in.getName();
                if (TAG_VOLUMES.equals(tag)) {
                    final int version = readIntAttribute(in, ATTR_VERSION, VERSION_INIT);
                    final boolean primaryPhysical = SystemProperties.getBoolean(StorageManager.PROP_PRIMARY_PHYSICAL, false);
                    final boolean validAttr = (version >= VERSION_FIX_PRIMARY) || (version >= VERSION_ADD_PRIMARY && !primaryPhysical);
                    if (validAttr) {
                        mPrimaryStorageUuid = readStringAttribute(in, ATTR_PRIMARY_STORAGE_UUID);
                    }
                    mForceAdoptable = readBooleanAttribute(in, ATTR_FORCE_ADOPTABLE, false);
                } else if (TAG_VOLUME.equals(tag)) {
                    final VolumeRecord rec = readVolumeRecord(in);
                    mRecords.put(rec.fsUuid, rec);
                }
            }
        }
    } catch (FileNotFoundException e) {
    // Missing metadata is okay, probably first boot
    } catch (IOException e) {
        Slog.wtf(TAG, "Failed reading metadata", e);
    } catch (XmlPullParserException e) {
        Slog.wtf(TAG, "Failed reading metadata", e);
    } finally {
        IoUtils.closeQuietly(fis);
    }
}
Also used : VolumeRecord(android.os.storage.VolumeRecord) XmlPullParser(org.xmlpull.v1.XmlPullParser) FileNotFoundException(java.io.FileNotFoundException) XmlPullParserException(org.xmlpull.v1.XmlPullParserException) IOException(java.io.IOException) FileInputStream(java.io.FileInputStream)

Example 40 with VolumeRecord

use of android.os.storage.VolumeRecord in project android_frameworks_base by DirtyUnicorns.

the class MountService method shouldBenchmark.

private boolean shouldBenchmark() {
    final long benchInterval = Settings.Global.getLong(mContext.getContentResolver(), Settings.Global.STORAGE_BENCHMARK_INTERVAL, -1);
    if (benchInterval == -1) {
        return false;
    } else if (benchInterval == 0) {
        return true;
    }
    synchronized (mLock) {
        for (int i = 0; i < mVolumes.size(); i++) {
            final VolumeInfo vol = mVolumes.valueAt(i);
            final VolumeRecord rec = mRecords.get(vol.fsUuid);
            if (vol.isMountedWritable() && rec != null) {
                final long benchAge = System.currentTimeMillis() - rec.lastBenchMillis;
                if (benchAge >= benchInterval) {
                    return true;
                }
            }
        }
        return false;
    }
}
Also used : VolumeRecord(android.os.storage.VolumeRecord) VolumeInfo(android.os.storage.VolumeInfo)

Aggregations

VolumeRecord (android.os.storage.VolumeRecord)61 VolumeInfo (android.os.storage.VolumeInfo)16 DiskInfo (android.os.storage.DiskInfo)11 Notification (android.app.Notification)10 IOException (java.io.IOException)10 Intent (android.content.Intent)6 Action (android.app.Notification.Action)5 PendingIntent (android.app.PendingIntent)5 IBinder (android.os.IBinder)5 RemoteCallbackList (android.os.RemoteCallbackList)5 StorageVolume (android.os.storage.StorageVolume)5 FastXmlSerializer (com.android.internal.util.FastXmlSerializer)5 IndentingPrintWriter (com.android.internal.util.IndentingPrintWriter)5 FileInputStream (java.io.FileInputStream)5 FileNotFoundException (java.io.FileNotFoundException)5 FileOutputStream (java.io.FileOutputStream)5 ArrayList (java.util.ArrayList)5 LinkedList (java.util.LinkedList)5 List (java.util.List)5 Entry (java.util.Map.Entry)5