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

Commit df3f2e6f authored by Daichi Hirono's avatar Daichi Hirono
Browse files

Add ReceiverActivity to MtpDocumentsProvider.

To show the application chooser for the UsbManager.ACTION_USB_DEVICE_ATTACHED
intent, the intent should be received by activity. The activity has NoDisplay
theme and immediately terminate after routing intent to MtpDocumentsService.

BUG=20274999

Change-Id: I2080ea433b1657dd68640681664adbf92d1d30e9
parent ad370615
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -15,6 +15,17 @@
                <action android:name="android.content.action.DOCUMENTS_PROVIDER" />
            </intent-filter>
        </provider>
        <activity android:name=".ReceiverActivity"
                  android:theme="@android:style/Theme.NoDisplay"
                  android:screenOrientation="locked"
                  android:excludeFromRecents="true"
                  android:enabled="false">
            <intent-filter>
                <action android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED" />
            </intent-filter>
            <meta-data android:name="android.hardware.usb.action.USB_DEVICE_ATTACHED"
                       android:resource="@xml/device_filter" />
        </activity>
        <service android:name=".MtpDocumentsService"></service>
    </application>
</manifest>
+20 −0
Original line number Diff line number Diff line
<?xml version="1.0" encoding="utf-8"?>
<!-- Copyright (C) 2015 The Android Open Source Project

     Licensed under the Apache License, Version 2.0 (the "License");
     you may not use this file except in compliance with the License.
     You may obtain a copy of the License at

          http://www.apache.org/licenses/LICENSE-2.0

     Unless required by applicable law or agreed to in writing, software
     distributed under the License is distributed on an "AS IS" BASIS,
     WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     See the License for the specific language governing permissions and
     limitations under the License.
-->
<resources>
    <!-- filter for MTP/PTP devices -->
    <usb-device class="255" subclass="255" protocol="0" />
    <usb-device class="6" subclass="1" protocol="1" />
</resources>
+47 −0
Original line number Diff line number Diff line
/*
 * Copyright (C) 2015 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package com.android.mtp;

import android.app.Activity;
import android.content.Intent;
import android.hardware.usb.UsbManager;
import android.os.Bundle;

/**
 * Invisible activity to receive intents.
 * To show the application chooser for the UsbManager.ACTION_USB_DEVICE_ATTACHED intent, the intent
 * should be received by activity. The activity has NoDisplay theme and immediately terminate after
 * routing intent to MtpDocumentsService.
 */
public class ReceiverActivity extends Activity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if (UsbManager.ACTION_USB_DEVICE_ATTACHED.equals(getIntent().getAction())) {
            final Intent serviceIntent = new Intent(
                    MtpDocumentsService.ACTION_OPEN_DEVICE,
                    null,
                    this,
                    MtpDocumentsService.class);
            serviceIntent.putExtra(
                    UsbManager.EXTRA_DEVICE,
                    getIntent().getParcelableExtra(UsbManager.EXTRA_DEVICE));
            startService(serviceIntent);
        }
        finish();
    }
}