/* 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 history = GlobalApp.getQuickConnectHistoryGateway().findHistory(query); // search bookmarks ArrayList 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 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.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 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 history, ArrayList 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; } }