com.ezio.multiwii.Main.PadMainMultiWiiActivity.java Source code

Java tutorial

Introduction

Here is the source code for com.ezio.multiwii.Main.PadMainMultiWiiActivity.java

Source

/*  MultiWii EZ-GUI
Copyright (C) <2012>  Bartosz Szczygiel (eziosoft)
    
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 com.ezio.multiwii.Main;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.pm.PackageManager.NameNotFoundException;
import android.graphics.Color;
import android.media.AudioManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Handler;
import android.support.v4.view.ViewPager;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import android.widget.Toast;

import com.actionbarsherlock.ActionBarSherlock;
import com.actionbarsherlock.app.SherlockActivity;
//import com.actionbarsherlock.view.Menu;
//import com.actionbarsherlock.view.MenuInflater;
//import com.actionbarsherlock.view.MenuItem;
import com.actionbarsherlock.view.Window;

import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

import com.ezio.multiwii.R;
import com.ezio.multiwii.about.AboutActivity;
import com.ezio.multiwii.about.InfoActivity;
import com.ezio.multiwii.advanced.AdvancedActivity;
import com.ezio.multiwii.advanced.ControlActivity;
import com.ezio.multiwii.advanced.PadControlActivity;
import com.ezio.multiwii.app.App;
import com.ezio.multiwii.aux_pid.AUXActivity;
import com.ezio.multiwii.aux_pid.PIDActivity;
import com.ezio.multiwii.aux_pid.PadAUXActivity;
import com.ezio.multiwii.aux_pid.PadPIDActivity;
import com.ezio.multiwii.config.ConfigActivity;
import com.ezio.multiwii.dashboard.CompassView;
import com.ezio.multiwii.dashboard.Dashboard1Activity;
import com.ezio.multiwii.dashboard.Dashboard2Activity;
import com.ezio.multiwii.dashboard.Dashboard2View;
import com.ezio.multiwii.dashboard.PitchRollCircleView;
import com.ezio.multiwii.dashboard.PitchRollView;
import com.ezio.multiwii.dashboard.dashboard3.Dashboard3Activity;
import com.ezio.multiwii.dashboard.dashboard3.Dashboard3GoogleMapActivity;
import com.ezio.multiwii.frsky.FrskyActivity;
import com.ezio.multiwii.gps.GPSActivity;
import com.ezio.multiwii.gps.MOCK_GPS_Service;
import com.ezio.multiwii.gps.PadGPSActivity;
import com.ezio.multiwii.graph.GraphsActivity;
import com.ezio.multiwii.graph.PadGraphsActivity;
import com.ezio.multiwii.helpers.Functions;
import com.ezio.multiwii.log.LogActivity;
import com.ezio.multiwii.map.MapActivityMy;
import com.ezio.multiwii.mapoffline.MapOfflineActivityMy;
import com.ezio.multiwii.motors.MotorsActivity;
import com.ezio.multiwii.other.OtherActivity;
import com.ezio.multiwii.other.PadOtherCaliActivity;
import com.ezio.multiwii.radio.RadioActivity;
import com.ezio.multiwii.radio.StickView;
import com.ezio.multiwii.raw.RawDataActivity;
import com.ezio.multiwii.waypoints.WaypointActivity;
import com.viewpagerindicator.TitlePageIndicator;

public class PadMainMultiWiiActivity extends Activity {

    private boolean killme = false;

    App app;

    TextView TVinfo;

    private Handler mHandler = new Handler();

    ActionBarSherlock actionBar;

    PadControlActivity control;
    Dashboard2View dashboard2;
    PadPIDActivity pidconfig;
    PadOtherCaliActivity otherCali;
    PadAUXActivity auxfunc;
    PadGraphsActivity graphs;
    PadGPSActivity gps;

    public static final String MY_PUBLISHER_ID = "a15030365bc09b4";

    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        Log.d("aaa", "MAIN ON CREATE");
        //requestWindowFeature(Window.FEATURE_PROGRESS);

        super.onCreate(savedInstanceState);
        setContentView(R.layout.pad_main_layout);

        app = (App) getApplication();

        //getSupportActionBar().setDisplayShowTitleEnabled(false);

        /*if (app.AppStartCounter % 10 == 0 && app.DonateButtonPressed == 0) {
           killme = true;
           mHandler.removeCallbacksAndMessages(null);
           startActivity(new Intent(getApplicationContext(), InfoActivity.class));
        }*/

        app.AppStartCounter++;
        app.SaveSettings(true);

        setVolumeControlStream(AudioManager.STREAM_MUSIC);
    }

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

    }

    @Override
    public void onResume() {
        Log.d("aaa", "MAIN ON RESUME");
        app.ForceLanguage();
        super.onResume();

        killme = false;

        String app_ver = "";
        int app_ver_code = 0;
        try {
            app_ver = getPackageManager().getPackageInfo(this.getPackageName(), 0).versionName;
            app_ver_code = getPackageManager().getPackageInfo(this.getPackageName(), 0).versionCode;
        } catch (NameNotFoundException e1) {
            e1.printStackTrace();
        }

        if (app.commMW.Connected || app.commFrsky.Connected) {

            try {
                mHandler.removeCallbacksAndMessages(null);
            } catch (Exception e) {

            }

            mHandler.postDelayed(update, 100);
            // Log.d(BT_old.TAG, "OnResume if connected");

        }
        if (auxfunc == null) {
            auxfunc = new PadAUXActivity();
            auxfunc.mContext = this;
            auxfunc.app = app;
            auxfunc.show();
        }

        if (graphs == null) {
            graphs = new PadGraphsActivity();
            graphs.mContext = this;
            graphs.app = app;
        }
        graphs.show();

        if (gps == null) {
            gps = new PadGPSActivity();
            gps.mContext = this;
            gps.app = app;
            gps.show();
        }
    }

    @Override
    public void onPause() {
        killme = true;
        mHandler.removeCallbacksAndMessages(null);
        super.onPause();
    }

    public void Close(View v) {
        try {
            mHandler.removeCallbacksAndMessages(null);
            app.commMW.Close();
            app.commFrsky.Close();
        }

        catch (Exception e) {

        }

    }

    public void Connect(String MacAddress) {
        if (app.CommunicationTypeMW == App.COMMUNICATION_TYPE_SERIAL_FTDI
                || app.CommunicationTypeMW == App.COMMUNICATION_TYPE_SERIAL_OTHERCHIPS) {
            app.commMW.Connect(app.SerialPortBaudRateMW);
        }

        if (app.CommunicationTypeMW == App.COMMUNICATION_TYPE_BT) {
            if (!app.MacAddress.equals("")) {
                app.commMW.Connect(app.MacAddress);
                app.Say(getString(R.string.menu_connect));
            } else {
                Toast.makeText(getApplicationContext(), "Wrong MAC address. Go to Config and select correct device",
                        Toast.LENGTH_LONG).show();
            }
            try {
                mHandler.removeCallbacksAndMessages(null);
            } catch (Exception e) {
            }
        }
    }

    public void ConnectFrsky(String MacAddress) {
        if (app.CommunicationTypeFrSky == App.COMMUNICATION_TYPE_SERIAL_FTDI) {
            app.commMW.Connect(app.SerialPortBaudRateFrSky);
        }

        if (app.CommunicationTypeFrSky == App.COMMUNICATION_TYPE_BT) {
            if (!app.MacAddressFrsky.equals("")) {
                app.commFrsky.Connect(app.MacAddressFrsky);
                app.Say(getString(R.string.Connect_frsky));
            } else {
                Toast.makeText(getApplicationContext(), "Wrong MAC address. Go to Config and select correct device",
                        Toast.LENGTH_LONG).show();
            }
            try {
                mHandler.removeCallbacksAndMessages(null);
            } catch (Exception e) {

            }
        }
    }

    public void ConfigOnClick(View v) {
        killme = true;
        mHandler.removeCallbacksAndMessages(null);
        startActivity(new Intent(getApplicationContext(), ConfigActivity.class));
    }

    int update_sum = 0;
    private Runnable update = new Runnable() {
        @Override
        public void run() {

            app.mw.ProcessSerialData(app.loggingON);

            app.frskyProtocol.ProcessSerialData(false);
            //setSupportProgress((int) Functions.map(app.frskyProtocol.TxRSSI, 0, 110, 0, 10000));

            updateDashboard2();
            updateRadio();
            updateAuxFunc();
            update_sum++;

            //performance is low, so comment this
            /*if ((update_sum % 10) == 0) {
               updateDashboard1();
               updateGPS();
            }*/

            app.Frequentjobs();

            updateGraphs();

            app.mw.SendRequest(app.MainRequestMethod);
            if (!killme)
                mHandler.postDelayed(update, app.RefreshRate);

            if (app.D)
                Log.d(app.TAG, "loop " + this.getClass().getName());
        }

    };

    PitchRollView PRVp;
    PitchRollView PRVr;
    CompassView compass;
    CompassView myCompass;
    PitchRollCircleView pitchRollCircle;
    TextView baro;

    TextView BattVoltageTV;
    TextView PowerSumTV;

    float myAzimuth = 0;

    void updateDashboard1() {

        if (PRVp == null) {
            PRVp = (PitchRollView) findViewById(R.id.PRVp);
            PRVp.SetColor(Color.GREEN);

            PRVr = (PitchRollView) findViewById(R.id.PRVr);
            PRVr.SetColor(Color.GREEN);

            pitchRollCircle = (PitchRollCircleView) findViewById(R.id.PitchRollCircle);
            pitchRollCircle.SetColor(Color.GREEN);

            compass = (CompassView) findViewById(R.id.Mag);
            compass.SetColor(Color.GREEN, Color.YELLOW);

            myCompass = (CompassView) findViewById(R.id.CompassView02);
            myCompass.SetColor(Color.GRAY, Color.LTGRAY);
            myCompass.SetText("N");

            baro = (TextView) findViewById(R.id.textViewBaro);
            BattVoltageTV = (TextView) findViewById(R.id.TextViewBattVoltage);
            PowerSumTV = (TextView) findViewById(R.id.TextViewPowerSum);
        }

        myAzimuth = (float) (app.sensors.Heading);
        if (app.D) {
            app.mw.angy = app.sensors.Pitch;
            app.mw.angx = app.sensors.Roll;
        }

        PRVp.SetAngle(app.mw.angy);
        PRVr.SetAngle(app.mw.angx);

        pitchRollCircle.SetRollPitch(app.mw.angx, app.mw.angy);

        if (app.MagMode == 1) {
            compass.SetHeading(-app.mw.head);
            compass.SetText("");

        } else {
            compass.SetHeading(myAzimuth - app.mw.head);
            compass.SetText("FRONT");
        }

        myCompass.SetHeading(myAzimuth);

        baro.setText(String.format("%.2f", app.mw.alt));
        BattVoltageTV.setText(String.valueOf((float) (app.mw.bytevbat / 10.0)));
        PowerSumTV.setText(String.valueOf(app.mw.pMeterSum));
    }

    void updateDashboard2() {
        String state = "";
        for (int i = 0; i < app.mw.CHECKBOXITEMS; i++) {
            if (app.mw.ActiveModes[i]) {
                state += " " + app.mw.buttonCheckboxLabel[i];
            }
        }

        int a = 1; // used for reverce roll
        if (app.ReverseRoll) {
            a = -1;
        }

        // float gforce = (float) Math.sqrt(app.mw.ax * app.mw.ax +
        // app.mw.ay * app.mw.ay + app.mw.az * app.mw.az) / app.mw._1G;
        if (dashboard2 == null)
            dashboard2 = (Dashboard2View) findViewById(R.id.dashboard2);
        dashboard2.Set(app.mw.GPS_numSat, app.mw.GPS_distanceToHome, app.mw.GPS_directionToHome, app.mw.GPS_speed,
                app.mw.GPS_altitude, app.mw.alt, app.mw.GPS_latitude, app.mw.GPS_longitude, -app.mw.angy,
                a * app.mw.angx, app.mw.head, app.mw.vario / 100f, state, app.mw.bytevbat, app.mw.pMeterSum,
                app.mw.intPowerTrigger, app.frskyProtocol.TxRSSI, app.frskyProtocol.RxRSSI);
    }

    StickView SV1;
    StickView SV2;
    ProgressBar pb1;
    ProgressBar pb2;
    ProgressBar pb3;
    ProgressBar pb4;
    TextView TextViewRadioInfo;

    void updateRadio() {
        if (SV1 == null) {
            SV1 = (StickView) findViewById(R.id.StickView1);
            SV2 = (StickView) findViewById(R.id.StickView2);

            pb1 = (ProgressBar) findViewById(R.id.progressBar1);
            pb2 = (ProgressBar) findViewById(R.id.progressBar2);
            pb3 = (ProgressBar) findViewById(R.id.progressBar3);
            pb4 = (ProgressBar) findViewById(R.id.progressBar4);

            TextViewRadioInfo = (TextView) findViewById(R.id.textViewRadioInfo);
        }

        if (app.RadioMode == 2) {
            SV1.SetPosition(app.mw.rcYaw, app.mw.rcThrottle);
            SV2.SetPosition(app.mw.rcRoll, app.mw.rcPitch);
        }

        if (app.RadioMode == 1) {
            SV1.SetPosition(app.mw.rcYaw, app.mw.rcPitch);
            SV2.SetPosition(app.mw.rcRoll, app.mw.rcThrottle);
        }

        pb1.setProgress((int) (app.mw.rcAUX1 - 1000));
        pb2.setProgress((int) (app.mw.rcAUX2 - 1000));
        pb3.setProgress((int) (app.mw.rcAUX3 - 1000));
        pb4.setProgress((int) (app.mw.rcAUX4 - 1000));

        String a = "Throttle:" + String.valueOf(app.mw.rcThrottle);
        a += "\nYaw:" + String.valueOf(app.mw.rcYaw);

        a += "\nRoll:" + String.valueOf(app.mw.rcRoll);
        a += "\nPitch:" + String.valueOf(app.mw.rcPitch);

        a += "\nAUX1:" + String.valueOf(app.mw.rcAUX1);
        a += "\nAUX2:" + String.valueOf(app.mw.rcAUX2);
        a += "\nAUX3:" + String.valueOf(app.mw.rcAUX3);
        a += "\nAUX4:" + String.valueOf(app.mw.rcAUX4);

        TextViewRadioInfo.setText(a);
    }

    void updateAuxFunc() {
        if (auxfunc != null)
            auxfunc.SetActiveStates();
    }

    void updateGraphs() {
        graphs.update();
    }

    void updateGPS() {
        gps.update();
    }

    public void Dashboard3OnClick(View v) {
        if (app.checkAndGuideGoogleMapLibInstall(this) == false)
            return;

        killme = true;
        mHandler.removeCallbacksAndMessages(null);
        if (app.mMapEngine == App.MAP_OSM) {
            startActivity(new Intent(getApplicationContext(), Dashboard3Activity.class));
        } else {
            startActivity(new Intent(getApplicationContext(), Dashboard3GoogleMapActivity.class));
        }
    }

    public void MapOnClick(View v) {
        if (app.checkAndGuideGoogleMapLibInstall(this) == false)
            return;

        killme = true;
        if (app.mMapEngine == App.MAP_OSM) {
            mHandler.removeCallbacksAndMessages(null);
            startActivity(new Intent(getApplicationContext(), MapOfflineActivityMy.class));
        } else {
            killme = true;
            mHandler.removeCallbacksAndMessages(null);
            startActivity(new Intent(getApplicationContext(), MapActivityMy.class));
        }
    }

    public void AboutOnClick(View v) {
        killme = true;
        mHandler.removeCallbacksAndMessages(null);
        startActivity(new Intent(getApplicationContext(), AboutActivity.class));
    }

    // /////menu////////
    public boolean onCreateOptionsMenu(Menu menu) {
        MenuInflater inflater = getMenuInflater();
        inflater.inflate(R.menu.menu, menu);
        return true;
    }

    public boolean onOptionsItemSelected(MenuItem item) {
        if (item.getItemId() == R.id.menu_exit) {

            try {
                stopService(new Intent(getApplicationContext(), MOCK_GPS_Service.class));
            } catch (Exception e) {
                // TODO: handle exception
            }

            if (app.DisableBTonExit) {
                app.commMW.Disable();
                app.commFrsky.Disable();
            }

            app.sensors.stop();
            app.mw.CloseLoggingFile();
            app.notifications.Cancel(99);
            Close(null);
            System.exit(0);
            return true;
        }

        if (item.getItemId() == R.id.menu_connect) {

            Connect(app.MacAddress);

            mHandler.postDelayed(update, 100);
            return true;
        }

        if (item.getItemId() == R.id.menu_control) {
            //startActivity(new Intent(getApplicationContext(), ControlActivity.class));
            if (control == null) {
                control = new PadControlActivity();
                control.mContext = this;
                control.app = app;
                control.show();
                Toast.makeText(this, R.string.AdvancedWarning, Toast.LENGTH_LONG).show();
                Toast.makeText(this, R.string.ControlWarning, Toast.LENGTH_LONG).show();
            }

            return true;
        }

        if (item.getItemId() == R.id.menuMap) {
            MapOnClick(null);
            return true;
        }

        if (item.getItemId() == R.id.menuDashboard3) {
            Dashboard3OnClick(null);
            return true;
        }

        if (item.getItemId() == R.id.menu_connect_frsky) {

            ConnectFrsky(app.MacAddressFrsky);

            mHandler.postDelayed(update, 100);

            //setSupportProgressBarVisibility(true);

            return true;
        }

        if (item.getItemId() == R.id.menu_disconnect) {
            app.Say(getString(R.string.menu_disconnect));
            app.commMW.ConnectionLost = false;
            app.commFrsky.ConnectionLost = false;
            Close(null);
            return true;
        }

        if (item.getItemId() == R.id.menuConfig) {
            ConfigOnClick(null);
            return true;
        }

        if (item.getItemId() == R.id.menuSwitchScreenMode) {
            killme = true;
            mHandler.removeCallbacksAndMessages(null);
            try {
                stopService(new Intent(getApplicationContext(), MOCK_GPS_Service.class));
            } catch (Exception e) {
            }

            if (app.DisableBTonExit) {
                app.commMW.Disable();
                app.commFrsky.Disable();
            }

            app.sensors.stop();
            app.mw.CloseLoggingFile();
            app.notifications.Cancel(99);
            Close(null);
            startActivity(
                    new Intent(getApplicationContext(), MainMultiWiiActivity.class).putExtra("ISFROMPAD", true));
            finish();
            return true;
        }

        if (item.getItemId() == R.id.menuAbout) {
            AboutOnClick(null);
            return true;
        }

        return false;
    }

    // ///menu end//////
    public void doArm(View v) {
        if (control != null)
            control.doArm(v);
    }

    public void doDisaArm(View v) {
        if (control != null)
            control.doDisaArm(v);
    }

    public void doCtrlQuit(View v) {
        if (control != null) {
            control.doCtrlQuit(v);
            control = null;
        }
    }

    public void ReadOnClick(View v) {
        if (pidconfig == null) {
            pidconfig = new PadPIDActivity();
            pidconfig.app = app;
            pidconfig.mContext = this;
            pidconfig.show();
        }
        pidconfig.ReadOnClick(v);
    }

    public void SetOnClick(View v) {
        if (pidconfig == null) {
            pidconfig = new PadPIDActivity();
            pidconfig.app = app;
            pidconfig.mContext = this;
            pidconfig.show();
        }
        pidconfig.SetOnClick(v);
    }

    private void do_otherCali() {
        if (otherCali == null) {
            otherCali = new PadOtherCaliActivity();
            otherCali.app = app;
            otherCali.mContext = this;
            otherCali.show();
        }
    }

    public void BatteryVoltageRefreshOnClick(View v) {
        do_otherCali();
        otherCali.BatteryVoltageRefreshOnClick(v);
    }

    public void DeclinationTakeFromPhoneOnClick(View v) {
        do_otherCali();
        otherCali.BatteryVoltageRefreshOnClick(v);
    }

    public void MSP_MISC_CONFreadOnClick(View v) {
        do_otherCali();
        otherCali.MSP_MISC_CONFreadOnClick(v);
    }

    public void MagCalibrationOnClick(View v) {
        do_otherCali();
        otherCali.MagCalibrationOnClick(v);
    }

    public void AccCalibrationOnClick(View v) {
        do_otherCali();
        otherCali.AccCalibrationOnClick(v);
    }

    public void MSP_SET_MISC_CONF_WriteOnClick(View v) {
        do_otherCali();
        otherCali.MSP_SET_MISC_CONF_WriteOnClick(v);
    }

    public void WriteSelectSettingOnClick(View v) {
        do_otherCali();
        otherCali.WriteSelectSettingOnClick(v);
    }

    public void RXBINDOnClick(View v) {
        do_otherCali();
        otherCali.RXBINDOnClick(v);
    }

    public void SetSerialBoudRateOnClick(View v) {
        do_otherCali();
        otherCali.SetSerialBoudRateOnClick(v);
    }

    public void FuncAuxReadOnClick(View v) {
        if (auxfunc != null)
            auxfunc.ReadOnClick();
    }

    public void FuncAuxSetOnClick(View v) {
        if (auxfunc != null)
            auxfunc.SetOnClick();
    }

    public void GraphsPauseOnClick(View v) {
        if (graphs != null)
            graphs.PauseOnClick();
    }

    public void GraphsShowOnClick(View v) {
        if (graphs != null)
            graphs.ShowOnClick();
    }

    public void FollowMeCheckBoxOnClick(View v) {
        gps.FollowMeCheckBoxOnClick(v);
    }

    public void InjectGPSCheckBoxOnClick(View v) {
        gps.InjectGPSCheckBoxOnClick(v);
    }

    public void FollowHeadingCheckBoxOnClick(View v) {
        gps.FollowHeadingCheckBoxOnClick(v);
    }

    public void StartMOCKLocationServiceOnClick(View v) {
        gps.StartMOCKLocationServiceOnClick(v);
    }

}