Skip to content

Most visited

Recently visited

navigation
MidiSynth / src / com.example.android.midisynth /

MainActivity.java

1
/*
2
 * Copyright (C) 2015 The Android Open Source Project
3
 *
4
 * Licensed under the Apache License, Version 2.0 (the "License");
5
 * you may not use this file except in compliance with the License.
6
 * You may obtain a copy of the License at
7
 *
8
 *      http://www.apache.org/licenses/LICENSE-2.0
9
 *
10
 * Unless required by applicable law or agreed to in writing, software
11
 * distributed under the License is distributed on an "AS IS" BASIS,
12
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
 * See the License for the specific language governing permissions and
14
 * limitations under the License.
15
 */
16
 
17
package com.example.android.midisynth;
18
 
19
import android.app.ActionBar;
20
import android.app.Activity;
21
import android.content.pm.PackageManager;
22
import android.media.midi.MidiDevice.MidiConnection;
23
import android.media.midi.MidiDeviceInfo;
24
import android.media.midi.MidiManager;
25
import android.os.Bundle;
26
import android.view.Menu;
27
import android.view.MenuItem;
28
import android.view.WindowManager;
29
import android.widget.Toast;
30
import android.widget.Toolbar;
31
 
32
import com.example.android.common.midi.MidiOutputPortConnectionSelector;
33
import com.example.android.common.midi.MidiPortConnector;
34
import com.example.android.common.midi.MidiTools;
35
 
36
/**
37
 * Simple synthesizer as a MIDI Device.
38
 */
39
public class MainActivity extends Activity {
40
    static final String TAG = "MidiSynthExample";
41
 
42
    private MidiManager mMidiManager;
43
    private MidiOutputPortConnectionSelector mPortSelector;
44
 
45
    @Override
46
    public void onCreate(Bundle savedInstanceState) {
47
        super.onCreate(savedInstanceState);
48
        setContentView(R.layout.main);
49
        setActionBar((Toolbar) findViewById(R.id.toolbar));
50
        ActionBar actionBar = getActionBar();
51
        if (actionBar != null) {
52
            actionBar.setDisplayShowTitleEnabled(false);
53
        }
54
 
55
        if (getPackageManager().hasSystemFeature(PackageManager.FEATURE_MIDI)) {
56
            setupMidi();
57
        }
58
    }
59
 
60
    @Override
61
    public boolean onCreateOptionsMenu(Menu menu) {
62
        getMenuInflater().inflate(R.menu.main, menu);
63
        setKeepScreenOn(menu.findItem(R.id.action_keep_screen_on).isChecked());
64
        return true;
65
    }
66
 
67
    @Override
68
    public boolean onOptionsItemSelected(MenuItem item) {
69
        switch (item.getItemId()) {
70
            case R.id.action_keep_screen_on:
71
                boolean checked = !item.isChecked();
72
                setKeepScreenOn(checked);
73
                item.setChecked(checked);
74
                break;
75
        }
76
        return super.onOptionsItemSelected(item);
77
    }
78
 
79
    private void setKeepScreenOn(boolean keepScreenOn) {
80
        if (keepScreenOn) {
81
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
82
        } else {
83
            getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
84
        }
85
    }
86
 
87
    private void setupMidi() {
88
        // Setup MIDI
89
        mMidiManager = (MidiManager) getSystemService(MIDI_SERVICE);
90
 
91
        MidiDeviceInfo synthInfo = MidiTools.findDevice(mMidiManager, "AndroidTest",
92
                "SynthExample");
93
        int portIndex = 0;
94
        mPortSelector = new MidiOutputPortConnectionSelector(mMidiManager, this,
95
                R.id.spinner_synth_sender, synthInfo, portIndex);
96
        mPortSelector.setConnectedListener(new MyPortsConnectedListener());
97
    }
98
 
99
    private void closeSynthResources() {
100
        if (mPortSelector != null) {
101
            mPortSelector.close();
102
        }
103
    }
104
 
105
    // TODO A better way would be to listen to the synth server
106
    // for open/close events and then disable/enable the spinner.
107
    private class MyPortsConnectedListener
108
            implements MidiPortConnector.OnPortsConnectedListener {
109
        @Override
110
        public void onPortsConnected(final MidiConnection connection) {
111
            runOnUiThread(new Runnable() {
112
                @Override
113
                public void run() {
114
                    if (connection == null) {
115
                        Toast.makeText(MainActivity.this,
116
                                R.string.error_port_busy, Toast.LENGTH_SHORT)
117
                                .show();
118
                        mPortSelector.clearSelection();
119
                    } else {
120
                        Toast.makeText(MainActivity.this,
121
                                R.string.port_open_ok, Toast.LENGTH_SHORT)
122
                                .show();
123
                    }
124
                }
125
            });
126
        }
127
    }
128
 
129
    @Override
130
    public void onDestroy() {
131
        closeSynthResources();
132
        super.onDestroy();
133
    }
134
 
135
}
This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields

Hooray!

Follow Google Developers on WeChat

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher