• Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Register
  • Login
UBports Robot Logo UBports Forum
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Register
  • Login

apparmor picture_files_read

Scheduled Pinned Locked Moved App Development
15 Posts 4 Posters 1.1k Views 2 Watching
Loading More Posts
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • C Offline
      Craig
      last edited by 29 Feb 2020, 04:15

      I'm working on an app that needs permissions to access the user's Pictures directory. I'm programming with C++ and SDL. I set this in my apparmor file:

      {
      "policy_groups": [
      "audio",
      "picture_files_read"
      ],
      "policy_version": 16.04
      }

      I am able to access the app's directory here:
      /home/phablet/.local/share/appname.craig/
      I can read and write to that directory.

      However, I am not able to read files from this directory:
      /home/phablet/Pictures

      Is there something I have over looked?

      Thank you for your help.

      A 1 Reply Last reply 29 Feb 2020, 09:22 Reply Quote 0
      • A Offline
        AppLee @Craig
        last edited by 29 Feb 2020, 09:22

        @Craig Hi Craig,

        Short answer, please read this page :
        http://docs.ubports.com/en/latest/appdev/platform/apparmor.html#picture-files-read

        Developers should typically use the content_exchange policy group and API to access picture files instead

        You might want to use :
        http://docs.ubports.com/en/latest/appdev/guides/contenthub.html

        I don't know about how to use the reserved rights but I'll advise to follow the common rules and use the content hub.

        C 2 Replies Last reply 7 Mar 2020, 13:56 Reply Quote 0
        • C Offline
          Craig @AppLee
          last edited by 7 Mar 2020, 13:56

          @AppLee Thank you. I read those pages before and I read them again. I added hooks in my manifest.json and a contenthub.json file. I see my app listed when I open Gallery, select a photo and click the share icon.

          I'm programming my app in C++ and SDL2. So my question is: How can I get my app to open the content hub so a user can select a photo from their Gallery?

          L 1 Reply Last reply 7 Mar 2020, 19:31 Reply Quote 1
          • L Offline
            lduboeuf @Craig
            last edited by 7 Mar 2020, 19:31

            @Craig have you tried Telegram AppDev group ?, or maybe create a new topic for this issue

            1 Reply Last reply Reply Quote 0
            • C Offline
              Craig @AppLee
              last edited by 12 Mar 2020, 05:38

              @AppLee I'm getting my C++/SDL app to receive pictures from the content hub as you suggested. I hope this can serve as a half-way tutorial for others out there. But it's not complete. Here is what I have so far:

              In my manifest.json, I have "content-hub" in the hooks section:

              "hooks": {
              	"SDLTest": {
              		"apparmor": "SDLTest.apparmor",
              		"desktop": "SDLTest.desktop",
              		"content-hub": "SDLTest-contenthub.json"
              	}
              

              In SDLTest-contenthub.json I have "pictures":

              {
              "destination": [
              "pictures"
              ]
              }

              In SDLTest.apparmor I have "content_exchange":

              {
              "policy_groups": [
              "audio",
              "content_exchange"
              ],
              "policy_version": 16.04
              }

              After I run "clickable", I open the Gallery app, select a photo and click on the link icon, I see my app listed. After I selected my app, I used "adb shell" and found the photo I selected on my phone at this system path:
              /home/phablet/.cache/sdltest.craig/HubIncoming/18

              And I had read/write access to the photos with C++. This part works great so far!

              But all I need to understand now is how to I get my app to LAUNCH Gallery when a user clicks a button inside my app. I'm using purely C++ and SDL. I imagine it would work something like this:

              if ( event.type == SDL_FINGERDOWN ) {
              SomeFunctionHere(LaunchGallery);
              }

              Detailed instructions would be appreciated. You wont bore me.

              F A 2 Replies Last reply 12 Mar 2020, 07:45 Reply Quote 0
              • F Offline
                flohack @Craig
                last edited by 12 Mar 2020, 07:45

                @Craig I dont think that its supported for an App to launch another app. You could export a picture and then the suer canchoose Gallery as a target. But so far just launching a specific app is not possible. Its also hard to make this stable since what if Gallery app is not installed, has been renamed etc ?

                My languages: πŸ‡¦πŸ‡Ή πŸ‡©πŸ‡ͺ πŸ‡¬πŸ‡§ πŸ‡ΊπŸ‡Έ

                C 1 Reply Last reply 12 Mar 2020, 08:36 Reply Quote 0
                • A Offline
                  AppLee @Craig
                  last edited by 12 Mar 2020, 08:24

                  @Craig
                  Hi, and good job on this.
                  Now you want to use the content hub the other way around and export a picture from your app.

                  You'll have to add ContentHandler.Source to your SDLTest-contenthub.json
                  You should read this : http://docs.ubports.com/en/latest/appdev/guides/contenthub.html#exporting

                  As Flo wrote, you cannot force an app, the user has to select the destination app.

                  C 1 Reply Last reply 12 Mar 2020, 08:39 Reply Quote 0
                  • C Offline
                    Craig @flohack
                    last edited by 12 Mar 2020, 08:36

                    @Flohack What about when the Messaging app launches the content hub so I can attach an image to a text message?

                    A 1 Reply Last reply 12 Mar 2020, 08:38 Reply Quote 0
                    • A Offline
                      AppLee @Craig
                      last edited by 12 Mar 2020, 08:38

                      @Craig
                      What Florian meant is that an app cannot directly opens another one (even less a specific one).
                      You have to go through the Content Hub to do so, but it's not the messaging app opening the gallery...

                      C 1 Reply Last reply 12 Mar 2020, 08:45 Reply Quote 0
                      • C Offline
                        Craig @AppLee
                        last edited by 12 Mar 2020, 08:39

                        @AppLee Why would I want to export a picture from my app when that's not what it needs to do? It needs to acquire a picture from the content hub, namely Gallery or File Manager. Sorry, maybe I didn't make it clear what I'm trying to do.

                        1 Reply Last reply Reply Quote 0
                        • C Offline
                          Craig @AppLee
                          last edited by 12 Mar 2020, 08:45

                          @AppLee Sorry, I must not be using the right vocabulary. Basically, like how the Messaging app opens the content hub and you can choose from Gallery or File Manager, then a photo is sent to a directory where the Messaging app can access it. How can I get my C++ app to open/launch/etc the content hub? I have already added the required code for my app to be listed as a "destination" in the content hub. I just need to understand how to create an event/link/etc in C++ that will open the content hub for my app's users. Thank you!

                          A 1 Reply Last reply 12 Mar 2020, 08:51 Reply Quote 0
                          • A Offline
                            AppLee @Craig
                            last edited by 12 Mar 2020, 08:51

                            @Craig
                            Oh sorry, I ddin't fully understand your question.

                            So you can refer there : http://docs.ubports.com/en/latest/appdev/guides/contenthub.html#importing
                            You can call the ContentPeerPicker in your code to display the app choice to import a Picture from.

                            C 1 Reply Last reply 12 Mar 2020, 08:59 Reply Quote 0
                            • C Offline
                              Craig @AppLee
                              last edited by 12 Mar 2020, 08:59

                              @AppLee I read that Importing section, thanks. What language is that written in? Qml? My app is written in C++. Is there a way to open the content hub with C++? Or is there some headers I can put in my C++ program that will enable a new function to do that? I can't seem to find documentation for C++.

                              A 1 Reply Last reply 12 Mar 2020, 09:08 Reply Quote 0
                              • A Offline
                                AppLee @Craig
                                last edited by 12 Mar 2020, 09:08

                                @Craig
                                Yes it's QML, I don't know about C++ only.
                                Can you consider some QML for the front part of your app ?
                                It's not difficult to learn and use.

                                C 1 Reply Last reply 1 Apr 2020, 23:25 Reply Quote 0
                                • C Offline
                                  Craig @AppLee
                                  last edited by 1 Apr 2020, 23:25

                                  @AppLee Okay, I tried it. I did "clickable create" and selected the C++ binary option.

                                  When I run "clickable" the main.cpp file calls qml/Main.qml and it says "Hello World!" on my touch device.

                                  Now, I tried to swap the code in Main.qml for this code here:
                                  https://api-docs.ubports.com/sdk/apps/qml/Ubuntu.Content/ContentHub.html
                                  The code just below "Example usage for importing content:"

                                  When I run "clickable", clickable reports: /bin/sh: 1: Syntax error: "(" unexpected

                                  Is there a mistake in the documented code? What do I need to put in the Main.qml file so it brings up the content hub?

                                  Thanks!

                                  1 Reply Last reply Reply Quote 0
                                  • First post
                                    Last post