1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-24 01:54:22 +00:00

Add native content sharing support for iOS and Android

This commit is contained in:
Lukasz Kozakiewicz 2017-11-20 12:56:02 +01:00
parent 2a5108ffc6
commit 36da4cde05
161 changed files with 6519 additions and 217 deletions

View file

@ -8,7 +8,7 @@ SET(BINARY_NAME "juce_jni")
add_library("cpufeatures" STATIC "${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c")
set_source_files_properties("${ANDROID_NDK}/sources/android/cpufeatures/cpu-features.c" PROPERTIES COMPILE_FLAGS "-Wno-sign-conversion -Wno-gnu-statement-expression")
add_definitions("-DJUCE_ANDROID=1" "-DJUCE_ANDROID_API_VERSION=10" "-DJUCE_ANDROID_ACTIVITY_CLASSNAME=com_yourcompany_analyticscollection_AnalyticsCollection" "-DJUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/yourcompany/analyticscollection/AnalyticsCollection\"" "-DJUCE_PUSH_NOTIFICATIONS=1" "-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000")
add_definitions("-DJUCE_ANDROID=1" "-DJUCE_ANDROID_API_VERSION=10" "-DJUCE_ANDROID_ACTIVITY_CLASSNAME=com_yourcompany_analyticscollection_AnalyticsCollection" "-DJUCE_ANDROID_ACTIVITY_CLASSPATH=\"com/yourcompany/analyticscollection/AnalyticsCollection\"" "-DJUCE_ANDROID_SHARING_CONTENT_PROVIDER_CLASSNAME=com_yourcompany_analyticscollection_SharingContentProvider" "-DJUCE_ANDROID_SHARING_CONTENT_PROVIDER_CLASSPATH=\"com/yourcompany/analyticscollection/SharingContentProvider\"" "-DJUCE_PUSH_NOTIFICATIONS=1" "-DJUCER_ANDROIDSTUDIO_7F0E4A25=1" "-DJUCE_APP_VERSION=1.0.0" "-DJUCE_APP_VERSION_HEX=0x10000")
include_directories( AFTER
"../../../JuceLibraryCode"
@ -552,6 +552,8 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp"
"../../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h"
"../../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp"
"../../../../../modules/juce_gui_basics/filebrowser/juce_ContentSharer.cpp"
"../../../../../modules/juce_gui_basics/filebrowser/juce_ContentSharer.h"
"../../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp"
"../../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h"
"../../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp"
@ -677,9 +679,11 @@ add_library( ${BINARY_NAME}
"../../../../../modules/juce_gui_basics/mouse/juce_SelectedItemSet.h"
"../../../../../modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h"
"../../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h"
"../../../../../modules/juce_gui_basics/native/juce_android_ContentSharer.cpp"
"../../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp"
"../../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp"
"../../../../../modules/juce_gui_basics/native/juce_common_MimeTypes.cpp"
"../../../../../modules/juce_gui_basics/native/juce_ios_ContentSharer.cpp"
"../../../../../modules/juce_gui_basics/native/juce_ios_FileChooser.mm"
"../../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm"
"../../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm"
@ -1305,6 +1309,8 @@ set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/ju
set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_DrawableText.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_DrawableText.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/drawables/juce_SVGParser.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/filebrowser/juce_ContentSharer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/filebrowser/juce_ContentSharer.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsDisplayComponent.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/filebrowser/juce_DirectoryContentsList.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
@ -1430,9 +1436,11 @@ set_source_files_properties("../../../../../modules/juce_gui_basics/mouse/juce_M
set_source_files_properties("../../../../../modules/juce_gui_basics/mouse/juce_SelectedItemSet.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/mouse/juce_TextDragAndDropTarget.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/mouse/juce_TooltipClient.h" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_android_ContentSharer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_android_FileChooser.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_android_Windowing.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_common_MimeTypes.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_ios_ContentSharer.cpp" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_ios_FileChooser.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_ios_UIViewComponentPeer.mm" PROPERTIES HEADER_FILE_ONLY TRUE)
set_source_files_properties("../../../../../modules/juce_gui_basics/native/juce_ios_Windowing.mm" PROPERTIES HEADER_FILE_ONLY TRUE)

View file

@ -0,0 +1,129 @@
package com.yourcompany.analyticscollection;
import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.res.AssetFileDescriptor;
import android.content.res.Resources;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.net.Uri;
import android.os.FileObserver;
import android.os.ParcelFileDescriptor;
import java.lang.String;
public final class SharingContentProvider extends ContentProvider
{
private Object lock = new Object();
private native void contentSharerFileObserverEvent (long host, int event, String path);
private native Cursor contentSharerQuery (Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder);
private native void contentSharerCursorClosed (long host);
private native AssetFileDescriptor contentSharerOpenFile (Uri uri, String mode);
private native String[] contentSharerGetStreamTypes (Uri uri, String mimeTypeFilter);
public final class ProviderFileObserver extends FileObserver
{
public ProviderFileObserver (long hostToUse, String path, int mask)
{
super (path, mask);
host = hostToUse;
}
public void onEvent (int event, String path)
{
contentSharerFileObserverEvent (host, event, path);
}
private long host;
}
public final class ProviderCursor extends MatrixCursor
{
ProviderCursor (long hostToUse, String[] columnNames)
{
super (columnNames);
host = hostToUse;
}
@Override
public void close()
{
super.close();
contentSharerCursorClosed (host);
}
private long host;
}
@Override
public boolean onCreate()
{
return true;
}
@Override
public Cursor query (Uri url, String[] projection, String selection,
String[] selectionArgs, String sortOrder)
{
synchronized (lock)
{
return contentSharerQuery (url, projection, selection, selectionArgs, sortOrder);
}
}
@Override
public Uri insert (Uri uri, ContentValues values)
{
return null;
}
@Override
public int update (Uri uri, ContentValues values, String selection,
String[] selectionArgs)
{
return 0;
}
@Override
public int delete (Uri uri, String selection, String[] selectionArgs)
{
return 0;
}
@Override
public String getType (Uri uri)
{
return null;
}
@Override
public AssetFileDescriptor openAssetFile (Uri uri, String mode)
{
synchronized (lock)
{
return contentSharerOpenFile (uri, mode);
}
}
@Override
public ParcelFileDescriptor openFile (Uri uri, String mode)
{
synchronized (lock)
{
AssetFileDescriptor result = contentSharerOpenFile (uri, mode);
if (result != null)
return result.getParcelFileDescriptor();
return null;
}
}
}