Android Open Source - Mountie Blkid Command






From Project

Back to project page Mountie.

License

The source code is released under:

GNU General Public License

If you think the Android project Mountie listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Mountie, a tool for mounting external storage on Android
 * Copyright (C) 2014 Andrew Comminos <andrew@morlunk.com>
 */*from   w w  w  .j  a va 2  s  .  co m*/
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package com.morlunk.mountie.command;

import com.morlunk.mountie.fs.Partition;
import com.stericson.RootTools.execution.Command;

import java.util.LinkedList;
import java.util.List;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

/**
 * Retrieves sd[a-z0-9] partition data using the system blkid command.
 * TODO: switch to JNI calls and libblkid
 * Created by andrew on 19/09/14.
 */
public class BlkidCommand extends Command {
    private static final Pattern BLOCK_DEVICE_PATTERN = Pattern.compile("/dev/block/(sd[a-z0-9]+):");
    /**
     * Returns a whitespace separated key-value mapping containing a label, UUID,
     * and partition type
     */
    private static final String BLKID_COMMAND = "/system/bin/blkid";
    private static final String BLKID_TARGET_COMMAND = BLKID_COMMAND + " /dev/block/%s";

    private Listener mListener;
    private List<Partition> mPartitions;

    public BlkidCommand(int id, Listener listener) {
        super(id, BLKID_COMMAND);
        mListener = listener;
        mPartitions = new LinkedList<Partition>();
    }

    public BlkidCommand(int id, String device, Listener listener) {
        super(id, String.format(BLKID_TARGET_COMMAND, device));
        mListener = listener;
        mPartitions = new LinkedList<Partition>();
    }

    @Override
    public void commandOutput(int id, String line) {
        // Example output (we can expect one line of output)
        // /dev/block/sda1: LABEL="Device" UUID="ABCD-EFGH" TYPE="vfat"
        String name = null;
        String label = null;
        String uuid = null;
        String fs = null;

        String[] params = line.split(" ");

        if (params.length == 0) {
            return;
        }

        // Match device name (sdxn)
        Matcher deviceMatcher = BLOCK_DEVICE_PATTERN.matcher(params[0]);
        if (deviceMatcher.matches()) {
            name = deviceMatcher.group(1);
        } else {
            return;
        }
        for (int i = 1; i < params.length; i++) {
            String[] kv = params[i].split("=");
            if (kv.length != 2) {
                continue;
            }

            String key = kv[0];
            String value = kv[1].substring(1, kv[1].length() - 1); // trim quotes

            if ("LABEL".equals(key)) {
                label = value;
            } else if ("UUID".equals(key)) {
                uuid = value;
            } else if ("TYPE".equals(key)) {
                fs = value;
            }
        }

        mPartitions.add(new Partition(name, label, uuid, fs));
    }

    @Override
    public void commandTerminated(int id, String reason) {
        mListener.onBlkidFailure();
    }

    @Override
    public void commandCompleted(int id, int exitCode) {
        if (!mPartitions.isEmpty()) {
            mListener.onBlkidResult(mPartitions);
        } else {
            mListener.onBlkidFailure();
        }
    }

    public static interface Listener {
        public void onBlkidResult(List<Partition> partitions);
        public void onBlkidFailure();
    }
}




Java Source Code List

com.morlunk.mountie.ApplicationTest.java
com.morlunk.mountie.Automounter.java
com.morlunk.mountie.Constants.java
com.morlunk.mountie.MountieActivity.java
com.morlunk.mountie.MountieBootReceiver.java
com.morlunk.mountie.MountieNotification.java
com.morlunk.mountie.MountieService.java
com.morlunk.mountie.UsbHotplugReceiver.java
com.morlunk.mountie.command.BlkidCommand.java
com.morlunk.mountie.fs.BlockDeviceObserver.java
com.morlunk.mountie.fs.BlockDevice.java
com.morlunk.mountie.fs.MountException.java
com.morlunk.mountie.fs.MountListener.java
com.morlunk.mountie.fs.Mount.java
com.morlunk.mountie.fs.PartitionListener.java
com.morlunk.mountie.fs.Partition.java
com.morlunk.mountie.fs.UnmountListener.java
com.morlunk.mountie.fs.Volume.java
com.morlunk.mountie.jni.Native.java
com.morlunk.mountie.util.Filesystems.java
com.stericson.RootTools.Constants.java
com.stericson.RootTools.RootTools.java
com.stericson.RootTools.containers.Mount.java
com.stericson.RootTools.containers.Permissions.java
com.stericson.RootTools.containers.RootClass.java
com.stericson.RootTools.containers.Symlink.java
com.stericson.RootTools.exceptions.RootDeniedException.java
com.stericson.RootTools.execution.CommandCapture.java
com.stericson.RootTools.execution.Command.java
com.stericson.RootTools.execution.JavaCommandCapture.java
com.stericson.RootTools.execution.Shell.java
com.stericson.RootTools.internal.Installer.java
com.stericson.RootTools.internal.InternalVariables.java
com.stericson.RootTools.internal.Remounter.java
com.stericson.RootTools.internal.RootToolsInternalMethods.java
com.stericson.RootTools.internal.Runner.java