Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 71aa6241 authored by nift4's avatar nift4
Browse files

FMRadio: (almost) drop system UID

* Add FMRadio app to media group to allow maintainers to start
  changing their trees
* Add various fixes for running with less permissions (previously, we
  got said permissions from other apps in the system UID)
* Do all preparations so the sharedUid can be dropped without breakage
* ACCESS_BROADCAST_RADIO adds us to media group which allows us to
  access /dev/fm without system uid
* ACCESS_FM_RADIO is no-op

Change-Id: Ib8847a6104cab9d8dac6e22c82104fd780276052
parent 25b8ce2a
Loading
Loading
Loading
Loading
+4 −1
Original line number Diff line number Diff line
@@ -27,11 +27,14 @@
        android:targetSdkVersion="30"
        android:usesCleartextTraffic="false" />

    <uses-permission android:name="android.permission.ACCESS_BROADCAST_RADIO" />
    <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
    <uses-permission android:name="android.permission.ACCESS_FM_RADIO" />
    <uses-permission android:name="android.permission.ACCESS_MOCK_LOCATION" />
    <uses-permission android:name="android.permission.BLUETOOTH" />
    <uses-permission android:name="android.permission.CAPTURE_AUDIO_OUTPUT" />
    <uses-permission android:name="android.permission.CAPTURE_TUNER_AUDIO_INPUT" />
    <uses-permission android:name="android.permission.FOREGROUND_SERVICE" />
    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_ROUTING" />
    <uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" />
+3 −1
Original line number Diff line number Diff line
@@ -16,7 +16,9 @@
-->
<permissions>
    <privapp-permissions package="com.android.fmradio">
        <permission name="android.permission.ACCESS_FM_RADIO"/>
        <permission name="android.permission.ACCESS_BROADCAST_RADIO"/>
        <permission name="android.permission.CAPTURE_AUDIO_OUTPUT" />
        <permission name="android.permission.CAPTURE_TUNER_AUDIO_INPUT" />
        <permission name="android.permission.MODIFY_AUDIO_ROUTING"/>
        <permission name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>
    </privapp-permissions>
+1 −1
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<paths>
    <external-path name="FM Recording" path="FM Recording"/>
    <external-path name="FM Recording" path="Documents/FM Recording"/>
</paths>
+2 −2
Original line number Diff line number Diff line
@@ -16,6 +16,8 @@

package com.android.fmradio;

import java.lang.reflect.Field;

import android.app.Activity;
import android.app.FragmentManager;
import android.content.ActivityNotFoundException;
@@ -57,8 +59,6 @@ import com.android.fmradio.views.FmScroller;
import com.android.fmradio.views.FmSnackBar;
import com.android.fmradio.views.FmScroller.EventListener;

import java.lang.reflect.Field;

/**
 * This class interact with user, provide FM basic function.
 */
+7 −3
Original line number Diff line number Diff line
@@ -48,10 +48,10 @@ public class FmRecorder implements AudioRecorder.Callback {
    // file extension
    public static final String RECORDING_FILE_EXTENSION = ".3gpp";
    // recording file folder
    public static final String FM_RECORD_FOLDER = "FM Recording";
    public static final String FM_RECORD_FOLDER = "Documents/FM Recording";
    public static final Uri RECORDINGS_URI = Uri.parse("content://" +
                                "com.android.externalstorage.documents/document/" +
                                "primary%3AFM%20Recording");
                                "primary%3ADocuments%2FFM%20Recording");
    private static final String RECORDING_FILE_TYPE = "audio/3gpp";
    private static final String RECORDING_FILE_SOURCE = "FM Recordings";
    // error type no sdcard
@@ -497,7 +497,11 @@ public class FmRecorder implements AudioRecorder.Callback {
        ContentValues cv = new ContentValues(2);
        cv.put(MediaStore.Audio.Playlists.Members.AUDIO_ID, recordingId);
        cv.put(MediaStore.Audio.Playlists.Members.PLAY_ORDER, order);
        try {
            context.getContentResolver().insert(uri, cv);
        } catch (SecurityException e) {
            e.printStackTrace();
        }
    }

    private void stopRecorder() {
Loading