/*
Suggestion Provider for RDP bookmarks
Copyright 2013 Thincast Technologies GmbH, Author: Martin Fleisz
This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0.
If a copy of the MPL was not distributed with this file, You can obtain one at
http://mozilla.org/MPL/2.0/.
*/
package com.freerdp.freerdpcore.services;
import android.app.SearchManager;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import com.freerdp.freerdpcore.R;
import com.freerdp.freerdpcore.application.GlobalApp;
import com.freerdp.freerdpcore.domain.BookmarkBase;
import com.freerdp.freerdpcore.domain.ConnectionReference;
import com.freerdp.freerdpcore.domain.ManualBookmark;
import java.util.ArrayList;
public class FreeRDPSuggestionProvider extends ContentProvider
{
public static final Uri CONTENT_URI =
Uri.parse("content://com.freerdp.afreerdp.services.freerdpsuggestionprovider");
@Override public int delete(Uri uri, String selection, String[] selectionArgs)
{
// TODO Auto-generated method stub
return 0;
}
@Override public String getType(Uri uri)
{
return "vnd.android.cursor.item/vnd.freerdp.remote";
}
@Override public Uri insert(Uri uri, ContentValues values)
{
// TODO Auto-generated method stub
return null;
}
@Override public boolean onCreate()
{
return true;
}
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs,
String sortOrder)
{
String query = (selectionArgs != null && selectionArgs.length > 0) ? selectionArgs[0] : "";
// search history
ArrayList<BookmarkBase> history =
GlobalApp.getQuickConnectHistoryGateway().findHistory(query);
// search bookmarks
ArrayList<BookmarkBase> manualBookmarks;
if (query.length() > 0)
manualBookmarks = GlobalApp.getManualBookmarkGateway().findByLabelOrHostnameLike(query);
else
manualBookmarks = GlobalApp.getManualBookmarkGateway().findAll();
return createResultCursor(history, manualBookmarks);
}
@Override
public int update(Uri uri, ContentValues values, String selection, String[] selectionArgs)
{
// TODO Auto-generated method stub
return 0;
}
private void addBookmarksToCursor(ArrayList<BookmarkBase> bookmarks, MatrixCursor resultCursor)
{
Object[] row = new Object[5];
for (BookmarkBase bookmark : bookmarks)
{
row[0] = new Long(bookmark.getId());
row[1] = bookmark.getLabel();
row[2] = bookmark.<ManualBookmark>get().getHostname();
row[3] = ConnectionReference.getManualBookmarkReference(bookmark.getId());
row[4] = "android.resource://" + getContext().getPackageName() + "/" +
R.drawable.icon_star_on;
resultCursor.addRow(row);
}
}
private void addHistoryToCursor(ArrayList<BookmarkBase> history, MatrixCursor resultCursor)
{
Object[] row = new Object[5];
for (BookmarkBase bookmark : history)
{
row[0] = new Integer(1);
row[1] = bookmark.getLabel();
row[2] = bookmark.getLabel();
row[3] = ConnectionReference.getHostnameReference(bookmark.getLabel());
row[4] = "android.resource://" + getContext().getPackageName() + "/" +
R.drawable.icon_star_off;
resultCursor.addRow(row);
}
}
private Cursor createResultCursor(ArrayList<BookmarkBase> history,
ArrayList<BookmarkBase> manualBookmarks)
{
// create result matrix cursor
int totalCount = history.size() + manualBookmarks.size();
String[] columns = { android.provider.BaseColumns._ID, SearchManager.SUGGEST_COLUMN_TEXT_1,
SearchManager.SUGGEST_COLUMN_TEXT_2,
SearchManager.SUGGEST_COLUMN_INTENT_DATA,
SearchManager.SUGGEST_COLUMN_ICON_2 };
MatrixCursor matrixCursor = new MatrixCursor(columns, totalCount);
// populate result matrix
if (totalCount > 0)
{
addHistoryToCursor(history, matrixCursor);
addBookmarksToCursor(manualBookmarks, matrixCursor);
}
return matrixCursor;
}
}