package mediabrowser.apiinteraction.android;
import mediabrowser.apiinteraction.ApiClient;
import mediabrowser.apiinteraction.AutomaticObservable;
import mediabrowser.apiinteraction.device.IDevice;
import mediabrowser.apiinteraction.tasks.CancellationToken;
import mediabrowser.apiinteraction.tasks.IProgress;
import mediabrowser.model.devices.LocalFileInfo;
import android.content.Context;
import android.database.Cursor;
import android.net.Uri;
import android.os.Build;
import android.provider.MediaStore;
import android.provider.Settings;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Observable;
public class AndroidDevice implements IDevice {
private final String deviceName;
private final String deviceId;
private Context context;
public AndroidDevice(Context context){
this.context = context;
deviceId = getDeviceIdInternal(context);
deviceName = getDeviceNameInternal();
}
public AndroidDevice(Context context, String deviceId, String deviceName){
this.context = context;
this.deviceId = deviceId;
this.deviceName = deviceName;
}
@Override
public String getDeviceName() {
return deviceName;
}
@Override
public String getDeviceId() {
return deviceId;
}
@Override
public ArrayList<LocalFileInfo> GetLocalPhotos() {
// which image properties are we querying
String[] projection = new String[]{
MediaStore.Images.Media._ID,
MediaStore.Images.Media.BUCKET_DISPLAY_NAME,
MediaStore.Images.Media.DATE_TAKEN,
MediaStore.Images.Media.MIME_TYPE,
MediaStore.Images.Media.TITLE,
MediaStore.Images.Media.DISPLAY_NAME,
MediaStore.Images.Media.DATA
};
// Get the base URI for the People table in the Contacts content provider.
Uri images = MediaStore.Images.Media.EXTERNAL_CONTENT_URI;
// Make the query.
Cursor cur = context.getContentResolver().query(images,
projection, // Which columns to return
null, // Which rows to return (all rows)
null, // Selection arguments (none)
null // Ordering
);
ArrayList<LocalFileInfo> files = new ArrayList<LocalFileInfo>();
if (cur.moveToFirst()) {
String bucket;
String date;
String id;
String title;
String displayName;
String mimeType;
String data;
int bucketColumn = cur.getColumnIndex(
MediaStore.Images.Media.BUCKET_DISPLAY_NAME);
int dateColumn = cur.getColumnIndex(
MediaStore.Images.Media.DATE_TAKEN);
int idColumn = cur.getColumnIndex(
MediaStore.Images.Media._ID);
int titleColumn = cur.getColumnIndex(
MediaStore.Images.Media.TITLE);
int displayNameColumn = cur.getColumnIndex(
MediaStore.Images.Media.DISPLAY_NAME);
int mimeTypeColumn = cur.getColumnIndex(
MediaStore.Images.Media.MIME_TYPE);
int dataColumn = cur.getColumnIndex(
MediaStore.Images.Media.DATA);
do {
// Get the field values
bucket = cur.getString(bucketColumn);
date = cur.getString(dateColumn);
id = cur.getString(idColumn);
title = cur.getString(titleColumn);
displayName = cur.getString(displayNameColumn);
mimeType = cur.getString(mimeTypeColumn);
data = cur.getString(dataColumn);
LocalFileInfo file = new LocalFileInfo();
file.setAlbum(bucket);
file.setId(data);
file.setMimeType(mimeType);
file.setName(displayName);
files.add(file);
} while (cur.moveToNext());
}
return files;
}
@Override
public ArrayList<LocalFileInfo> GetLocalVideos() {
return new ArrayList<LocalFileInfo>();
}
private String getDeviceIdInternal(Context context) {
return Settings.Secure.getString(context.getContentResolver(),
Settings.Secure.ANDROID_ID);
}
private String getDeviceNameInternal() {
String manufacturer = Build.MANUFACTURER;
String model = Build.MODEL;
if (model.startsWith(manufacturer)) {
return model;
} else {
return manufacturer + " " + model;
}
}
@Override
public void UploadFile(LocalFileInfo file,
ApiClient apiClient,
IProgress<Double> progress,
CancellationToken cancellationToken) {
try {
apiClient.UploadFile(new FileInputStream(file.getId()), file, progress, cancellationToken);
}
catch (FileNotFoundException ex){
progress.reportError(ex);
}
catch (IOException ex){
progress.reportError(ex);
}
catch (Exception ex){
progress.reportError(ex);
}
}
}