Android Open Source - voicesmith Audio Service Activity






From Project

Back to project page voicesmith.

License

The source code is released under:

GNU General Public License

If you think the Android project voicesmith listed in this page is inappropriate, such as containing malicious code/tools or violating the copyright, please email info at java2s dot com, thanks.

Java Source Code

/*
 * Voicesmith <http://voicesmith.jurihock.de/>
 *// www  .j  a va 2  s .co  m
 * Copyright (c) 2011-2014 Juergen Hock
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

package de.jurihock.voicesmith.activities;

import greendroid.app.GDActivity;
import greendroid.widget.ActionBarItem;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.ServiceConnection;
import android.os.Bundle;
import android.os.IBinder;
import de.jurihock.voicesmith.Utils;
import de.jurihock.voicesmith.services.AudioService;
import de.jurihock.voicesmith.services.ServiceBinder;

/**
 * Base class for a front-end activity which interacts with its service.
 */
public abstract class AudioServiceActivity<T extends AudioService> extends
  GDActivity
{
  // Service parameters:
  private final Class<T>    serviceClass;
  private T          serviceInstance    = null;
  private Context        serviceContext    = null;
  private Intent        serviceIntent    = null;
  private ServiceConnection  serviceConnection  = null;

  protected AudioServiceActivity(Class<T> serviceClass)
  {
    this.serviceClass = serviceClass;
  }

  @Override
  protected void onCreate(Bundle savedInstanceState)
  {
    super.onCreate(savedInstanceState);

    addActionBarItem(ActionBarItem.Type.Settings);
  }

  protected T getService()
  {
    new Utils(this).assertTrue(serviceInstance != null,
      "Service %s wasn't properly instantiated!",
      serviceClass.getName());

    return serviceInstance;
  }

  private void startService()
  {
    if (serviceContext == null)
    {
      serviceContext = this.getApplicationContext();
    }

    if (serviceIntent == null)
    {
      serviceIntent = new Intent(
        serviceContext,
        serviceClass);
    }

    if (!new Utils(serviceContext).isServiceRunning(serviceClass))
    {
      if (startService(serviceIntent) == null)
      {
        new Utils(this).toast("Unable to start audio service %s!",
          serviceClass.getName());
      }
    }
  }

  private void stopService()
  {
    if (serviceIntent != null)
    {
      stopService(serviceIntent);
    }
  }

  private void bindService()
  {
    if (serviceConnection == null)
    {
      serviceConnection = new ServiceConnection()
      {
        public void onServiceConnected(ComponentName component, IBinder _binder)
        {
          @SuppressWarnings("unchecked")
          ServiceBinder<T> binder = (ServiceBinder<T>) _binder;
          serviceInstance = binder.getServiceInstance();

          // Notify the subclass
          AudioServiceActivity.this.onServiceConnected();
        }

        public void onServiceDisconnected(ComponentName component)
        {
          // Notify the subclass
          AudioServiceActivity.this.onServiceDisconnected();
          serviceInstance = null;
        }
      };
    }

    if (serviceInstance == null)
    {
      if (!bindService(serviceIntent,
        serviceConnection, Context.BIND_AUTO_CREATE))
      {
        new Utils(this).toast("Unable to bind service %s!",
          serviceClass.getName());
      }
    }
  }

  private void unbindService()
  {
    if (serviceConnection != null)
    {
      unbindService(serviceConnection);

      // Notify the subclass
      onServiceDisconnected();
      serviceInstance = null;
    }
  }

  /**
   * The reference to the service instance is now available.
   */
  protected void onServiceConnected()
  {
  }

  /**
   * The reference to the service instance is no longer available.
   */
  protected void onServiceDisconnected()
  {
  }

  @Override
  protected void onResume()
  {
    super.onResume();

    startService();
    bindService();
  }

  @Override
  protected void onPause()
  {
    super.onPause();

    unbindService();
  }

  @Override
  public boolean onHandleActionBarItemClick(ActionBarItem item, int position)
  {
    // Show preference activity
    if (position == 0)
    {
      Intent intent = new Intent(this, PreferenceActivity.class);
      intent.putExtra("caller", this.getClass().getName());
      startActivity(intent);
    }

    return super.onHandleActionBarItemClick(item, position);
  }
}




Java Source Code List

de.jurihock.voicesmith.AAF.java
de.jurihock.voicesmith.Application.java
de.jurihock.voicesmith.ChangeLog.java
de.jurihock.voicesmith.DAFX.java
de.jurihock.voicesmith.Disposable.java
de.jurihock.voicesmith.FrameType.java
de.jurihock.voicesmith.Preferences.java
de.jurihock.voicesmith.Utils.java
de.jurihock.voicesmith.activities.AafActivity.java
de.jurihock.voicesmith.activities.AboutActivity.java
de.jurihock.voicesmith.activities.AboutApplicationActivity.java
de.jurihock.voicesmith.activities.AboutLicenseActivity.java
de.jurihock.voicesmith.activities.AudioServiceActivity.java
de.jurihock.voicesmith.activities.ContributionActivity.java
de.jurihock.voicesmith.activities.DafxActivity.java
de.jurihock.voicesmith.activities.HomeActivity.java
de.jurihock.voicesmith.activities.PreferenceActivity.java
de.jurihock.voicesmith.activities.SupportActivity.java
de.jurihock.voicesmith.audio.AudioDeviceManager.java
de.jurihock.voicesmith.audio.HeadsetManagerListener.java
de.jurihock.voicesmith.audio.HeadsetManager.java
de.jurihock.voicesmith.audio.HeadsetMode.java
de.jurihock.voicesmith.dsp.KissFFT.java
de.jurihock.voicesmith.dsp.LuenbergerObserver.java
de.jurihock.voicesmith.dsp.Math.java
de.jurihock.voicesmith.dsp.SchmittTrigger.java
de.jurihock.voicesmith.dsp.Window.java
de.jurihock.voicesmith.dsp.processors.AmplifyProcessor.java
de.jurihock.voicesmith.dsp.processors.DenoiseProcessor.java
de.jurihock.voicesmith.dsp.processors.DetuneProcessor.java
de.jurihock.voicesmith.dsp.processors.HoarsenessProcessor.java
de.jurihock.voicesmith.dsp.processors.NativeResampleProcessor.java
de.jurihock.voicesmith.dsp.processors.NativeTimescaleProcessor.java
de.jurihock.voicesmith.dsp.processors.OffsetProcessor.java
de.jurihock.voicesmith.dsp.processors.ResampleProcessor.java
de.jurihock.voicesmith.dsp.processors.RobotizeProcessor.java
de.jurihock.voicesmith.dsp.processors.SeparationProcessor.java
de.jurihock.voicesmith.dsp.processors.TimescaleProcessor.java
de.jurihock.voicesmith.dsp.processors.VadProcessor.java
de.jurihock.voicesmith.dsp.stft.StftPostprocessor.java
de.jurihock.voicesmith.dsp.stft.StftPreprocessor.java
de.jurihock.voicesmith.io.AudioDevice.java
de.jurihock.voicesmith.io.dummy.DummyInDevice.java
de.jurihock.voicesmith.io.dummy.DummyOutDevice.java
de.jurihock.voicesmith.io.file.FileDevice.java
de.jurihock.voicesmith.io.file.FileInDevice.java
de.jurihock.voicesmith.io.file.FileOutDevice.java
de.jurihock.voicesmith.io.oscillators.CosineWave.java
de.jurihock.voicesmith.io.oscillators.PhaseAccumulator.java
de.jurihock.voicesmith.io.pcm.DelayedPcmInDevice.java
de.jurihock.voicesmith.io.pcm.PcmDevice.java
de.jurihock.voicesmith.io.pcm.PcmInDevice.java
de.jurihock.voicesmith.io.pcm.PcmOutDevice.java
de.jurihock.voicesmith.services.AafService.java
de.jurihock.voicesmith.services.AudioService.java
de.jurihock.voicesmith.services.DafxService.java
de.jurihock.voicesmith.services.ServiceBinder.java
de.jurihock.voicesmith.services.ServiceFailureReason.java
de.jurihock.voicesmith.services.ServiceListener.java
de.jurihock.voicesmith.threads.AudioThread.java
de.jurihock.voicesmith.threads.DelayThread.java
de.jurihock.voicesmith.threads.DetuneThread.java
de.jurihock.voicesmith.threads.HoarsenessThread.java
de.jurihock.voicesmith.threads.LowDelayThread.java
de.jurihock.voicesmith.threads.RobotizeThread.java
de.jurihock.voicesmith.threads.TransposeThread.java
de.jurihock.voicesmith.voicebank.Record.java
de.jurihock.voicesmith.voicebank.RecordsSerializer.java
de.jurihock.voicesmith.voicebank.Records.java
de.jurihock.voicesmith.widgets.AafPicker.java
de.jurihock.voicesmith.widgets.ColoredToggleButton.java
de.jurihock.voicesmith.widgets.DafxPicker.java
de.jurihock.voicesmith.widgets.DelayPicker.java
de.jurihock.voicesmith.widgets.IntervalPicker.java
de.jurihock.voicesmith.widgets.ListPreference.java
de.jurihock.voicesmith.widgets.SeekBarPreference.java