Android Open Source - spydroid-ipcamera Handset Fragment






From Project

Back to project page spydroid-ipcamera.

License

The source code is released under:

GNU General Public License

If you think the Android project spydroid-ipcamera 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

/*
 * Copyright (C) 2011-2013 GUIGUI Simon, fyhertz@gmail.com
 * //from   w ww  .j  ava 2s.  c  om
 * This file is part of Spydroid (http://code.google.com/p/spydroid-ipcamera/)
 * 
 * Spydroid 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 source code 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 source code; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */

package net.majorkernelpanic.spydroid.ui;

import java.util.Locale;

import net.majorkernelpanic.http.TinyHttpServer;
import net.majorkernelpanic.spydroid.R;
import net.majorkernelpanic.spydroid.SpydroidApplication;
import net.majorkernelpanic.spydroid.Utilities;
import net.majorkernelpanic.spydroid.api.CustomHttpServer;
import net.majorkernelpanic.spydroid.api.CustomRtspServer;
import net.majorkernelpanic.streaming.rtsp.RtspServer;
import android.content.BroadcastReceiver;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.ServiceConnection;
import android.net.wifi.WifiInfo;
import android.net.wifi.WifiManager;
import android.os.Bundle;
import android.os.Handler;
import android.os.IBinder;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.animation.Animation;
import android.view.animation.AnimationUtils;
import android.widget.LinearLayout;
import android.widget.TextView;

public class HandsetFragment extends Fragment {

  public final static String TAG = "HandsetFragment";
  
    private TextView mDescription1, mDescription2, mLine1, mLine2, mVersion, mSignWifi, mTextBitrate;
    private LinearLayout mSignInformation, mSignStreaming;
    private Animation mPulseAnimation;
    
    private SpydroidApplication mApplication;
    private CustomHttpServer mHttpServer;
    private RtspServer mRtspServer;
    
    @Override
    public void onCreate(Bundle savedInstanceState) {
      super.onCreate(savedInstanceState);
      mApplication  = (SpydroidApplication) getActivity().getApplication();
    }
    
    
  @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
      View rootView = inflater.inflate(R.layout.main,container,false);
        mLine1 = (TextView)rootView.findViewById(R.id.line1);
        mLine2 = (TextView)rootView.findViewById(R.id.line2);
        mDescription1 = (TextView)rootView.findViewById(R.id.line1_description);
        mDescription2 = (TextView)rootView.findViewById(R.id.line2_description);
        mVersion = (TextView)rootView.findViewById(R.id.version);
        mSignWifi = (TextView)rootView.findViewById(R.id.advice);
        mSignStreaming = (LinearLayout)rootView.findViewById(R.id.streaming);
        mSignInformation = (LinearLayout)rootView.findViewById(R.id.information);
        mPulseAnimation = AnimationUtils.loadAnimation(mApplication.getApplicationContext(), R.anim.pulse);
        mTextBitrate = (TextView)rootView.findViewById(R.id.bitrate);
        return rootView ;
    }
  
  @Override
    public void onStart() {
      super.onStart();
      
      // Print version number
      Context mContext = mApplication.getApplicationContext();
        try {
      mVersion.setText("v"+mContext.getPackageManager().getPackageInfo(mContext.getPackageName(), 0 ).versionName);
    } catch (Exception e) {
      mVersion.setText("v???");
    }
      
    }
    
  @Override
    public void onPause() {
      super.onPause();
      update();
      getActivity().unregisterReceiver(mWifiStateReceiver);
      getActivity().unbindService(mHttpServiceConnection);
      getActivity().unbindService(mRtspServiceConnection);
    }
  
  @Override
    public void onResume() {
      super.onResume();
    getActivity().bindService(new Intent(getActivity(),CustomHttpServer.class), mHttpServiceConnection, Context.BIND_AUTO_CREATE);
    getActivity().bindService(new Intent(getActivity(),CustomRtspServer.class), mRtspServiceConnection, Context.BIND_AUTO_CREATE);
      getActivity().registerReceiver(mWifiStateReceiver,new IntentFilter(WifiManager.NETWORK_STATE_CHANGED_ACTION));
    }
  
  public void update() {
    getActivity().runOnUiThread(new Runnable () {
      @Override
      public void run() {
        if (mDescription1 != null) {
          if (mHttpServer != null && mRtspServer != null) {
            if (!mHttpServer.isHttpEnabled() && !mHttpServer.isHttpsEnabled()) {
              mDescription1.setVisibility(View.INVISIBLE);
              mLine1.setVisibility(View.INVISIBLE);
            } else {
              mDescription1.setVisibility(View.VISIBLE);
              mLine1.setVisibility(View.VISIBLE);
            }
            if (!mRtspServer.isEnabled()) {
              mDescription2.setVisibility(View.INVISIBLE);
              mLine2.setVisibility(View.INVISIBLE);
            } else {
              mDescription2.setVisibility(View.VISIBLE);
              mLine2.setVisibility(View.VISIBLE);
            }
            if (!mHttpServer.isStreaming() && !mRtspServer.isStreaming()) displayIpAddress();
            else streamingState(1);
          }    
        }
      }
    });
  }
  
  private void streamingState(int state) {
    if (state==0) {
      // Not streaming
      mSignStreaming.clearAnimation();
      mSignWifi.clearAnimation();
      mSignStreaming.setVisibility(View.GONE);
      mSignInformation.setVisibility(View.VISIBLE);
      mSignWifi.setVisibility(View.GONE);
    } else if (state==1) {
      // Streaming
      mSignWifi.clearAnimation();
      mSignStreaming.setVisibility(View.VISIBLE);
      mSignStreaming.startAnimation(mPulseAnimation);
      mHandler.post(mUpdateBitrate);
      mSignInformation.setVisibility(View.INVISIBLE);
      mSignWifi.setVisibility(View.GONE);
    } else if (state==2) {
      // No wifi !
      mSignStreaming.clearAnimation();
      mSignStreaming.setVisibility(View.GONE);
      mSignInformation.setVisibility(View.INVISIBLE);
      mSignWifi.setVisibility(View.VISIBLE);
      mSignWifi.startAnimation(mPulseAnimation);
    }
  }
  
    private void displayIpAddress() {
    WifiManager wifiManager = (WifiManager) mApplication.getApplicationContext().getSystemService(Context.WIFI_SERVICE);
    WifiInfo info = wifiManager.getConnectionInfo();
    String ipaddress = null;
      if (info!=null && info.getNetworkId()>-1) {
        int i = info.getIpAddress();
          String ip = String.format(Locale.ENGLISH,"%d.%d.%d.%d", i & 0xff, i >> 8 & 0xff,i >> 16 & 0xff,i >> 24 & 0xff);
        mLine1.setText(mHttpServer.isHttpsEnabled()?"https://":"http://");
        mLine1.append(ip);
        mLine1.append(":"+mHttpServer.getHttpPort());
        mLine2.setText("rtsp://");
        mLine2.append(ip);
        mLine2.append(":"+mRtspServer.getPort());
        streamingState(0);
      } else if((ipaddress = Utilities.getLocalIpAddress(true)) != null) {
        mLine1.setText(mHttpServer.isHttpsEnabled()?"https://":"http://");
        mLine1.append(ipaddress);
        mLine1.append(":"+mHttpServer.getHttpPort());
        mLine2.setText("rtsp://");
        mLine2.append(ipaddress);
        mLine2.append(":"+mRtspServer.getPort());
        streamingState(0);
      } else {
        streamingState(2);
      }
      
    }

    private final ServiceConnection mRtspServiceConnection = new ServiceConnection() {

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
      mRtspServer = (RtspServer) ((RtspServer.LocalBinder)service).getService();
      update();
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {}
    
  };
    
    private final ServiceConnection mHttpServiceConnection = new ServiceConnection() {

    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
      mHttpServer = (CustomHttpServer) ((TinyHttpServer.LocalBinder)service).getService();
      update();
    }

    @Override
    public void onServiceDisconnected(ComponentName name) {}
    
  };
    
    // BroadcastReceiver that detects wifi state changements
    private final BroadcastReceiver mWifiStateReceiver = new BroadcastReceiver() {
        public void onReceive(Context context, Intent intent) {
          String action = intent.getAction();
          // This intent is also received when app resumes even if wifi state hasn't changed :/
          if (action.equals(WifiManager.NETWORK_STATE_CHANGED_ACTION)) {
            update();
          }
        } 
    };
    
  private final Handler mHandler = new Handler();
    
  private Runnable mUpdateBitrate = new Runnable() {
    @Override
    public void run() {
      if ((mRtspServer != null && mRtspServer.isStreaming()) || (mHttpServer != null && mHttpServer.isStreaming())) {
        long bitrate = 0;
        bitrate += mRtspServer!=null?mRtspServer.getBitrate():0;
        bitrate += mHttpServer!=null?mHttpServer.getBitrate():0;
        mTextBitrate.setText(""+bitrate/1000+" kbps");
        mHandler.postDelayed(mUpdateBitrate, 1000);
      } else {
        mTextBitrate.setText("0 kbps");
      }
    }
  };
  
}




Java Source Code List

net.majorkernelpanic.http.ModAssetServer.java
net.majorkernelpanic.http.ModInternationalization.java
net.majorkernelpanic.http.ModSSL.java
net.majorkernelpanic.http.TinyHttpServer.java
net.majorkernelpanic.spydroid.SpydroidApplication.java
net.majorkernelpanic.spydroid.Utilities.java
net.majorkernelpanic.spydroid.api.CustomHttpServer.java
net.majorkernelpanic.spydroid.api.CustomRtspServer.java
net.majorkernelpanic.spydroid.api.RequestHandler.java
net.majorkernelpanic.spydroid.ui.AboutFragment.java
net.majorkernelpanic.spydroid.ui.HandsetFragment.java
net.majorkernelpanic.spydroid.ui.OptionsActivity.java
net.majorkernelpanic.spydroid.ui.PreviewFragment.java
net.majorkernelpanic.spydroid.ui.SpydroidActivity.java
net.majorkernelpanic.spydroid.ui.TabletFragment.java
net.majorkernelpanic.streaming.MediaStream.java
net.majorkernelpanic.streaming.SessionBuilder.java
net.majorkernelpanic.streaming.Session.java
net.majorkernelpanic.streaming.Stream.java
net.majorkernelpanic.streaming.audio.AACStream.java
net.majorkernelpanic.streaming.audio.AMRNBStream.java
net.majorkernelpanic.streaming.audio.AudioQuality.java
net.majorkernelpanic.streaming.audio.AudioStream.java
net.majorkernelpanic.streaming.exceptions.CameraInUseException.java
net.majorkernelpanic.streaming.exceptions.ConfNotSupportedException.java
net.majorkernelpanic.streaming.exceptions.InvalidSurfaceException.java
net.majorkernelpanic.streaming.exceptions.StorageUnavailableException.java
net.majorkernelpanic.streaming.gl.SurfaceManager.java
net.majorkernelpanic.streaming.gl.SurfaceView.java
net.majorkernelpanic.streaming.gl.TextureManager.java
net.majorkernelpanic.streaming.hw.CodecManager.java
net.majorkernelpanic.streaming.hw.EncoderDebugger.java
net.majorkernelpanic.streaming.hw.NV21Convertor.java
net.majorkernelpanic.streaming.mp4.MP4Config.java
net.majorkernelpanic.streaming.mp4.MP4Parser.java
net.majorkernelpanic.streaming.rtcp.SenderReport.java
net.majorkernelpanic.streaming.rtp.AACADTSPacketizer.java
net.majorkernelpanic.streaming.rtp.AACLATMPacketizer.java
net.majorkernelpanic.streaming.rtp.AMRNBPacketizer.java
net.majorkernelpanic.streaming.rtp.AbstractPacketizer.java
net.majorkernelpanic.streaming.rtp.H263Packetizer.java
net.majorkernelpanic.streaming.rtp.H264Packetizer.java
net.majorkernelpanic.streaming.rtp.MediaCodecInputStream.java
net.majorkernelpanic.streaming.rtp.RtpSocket.java
net.majorkernelpanic.streaming.rtsp.RtspClient.java
net.majorkernelpanic.streaming.rtsp.RtspServer.java
net.majorkernelpanic.streaming.rtsp.UriParser.java
net.majorkernelpanic.streaming.video.CodecManager.java
net.majorkernelpanic.streaming.video.H263Stream.java
net.majorkernelpanic.streaming.video.H264Stream.java
net.majorkernelpanic.streaming.video.VideoQuality.java
net.majorkernelpanic.streaming.video.VideoStream.java