IOIOActivity and AppCompactActivity

144 views Asked by At

I'm not experienced in Java development and migrating from Eclipse. I don't know how to use the nested classes in my case where I need to extend AppCompactActivity and IOIOActivity. Considering, I have another inner class Looper already extending another class. The code below isn't running what is inside Testing class. Can someone help me about how to execute my inner class, which is Testing class.

My code:

public class MainActivity extends AppCompatActivity  {

    private class Testing extends IOIOActivity {

        private ToggleButton button_;

        @Override
        public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            button_ = (ToggleButton) findViewById(R.id.toggleButton);

        }

        class Looper extends BaseIOIOLooper {
            /** The on-board LED. */
            private DigitalOutput led_;

            @Override
            protected void setup() throws ConnectionLostException {
                showVersions(ioio_, "IOIO connected!");
                led_ = ioio_.openDigitalOutput(0, true);
                enableUi(true);
            }
 @Override
            public void loop() throws ConnectionLostException, InterruptedException {
                led_.write(!button_.isChecked());
                Thread.sleep(100);
            }

            @Override
            public void disconnected() {
                enableUi(false);
                toast("IOIO disconnected");
            }

            @Override
            public void incompatible() {
                showVersions(ioio_, "Incompatible firmware version!");
            }
        }

        @Override
        protected IOIOLooper createIOIOLooper() {
            return new Looper();
        }

        private void showVersions(IOIO ioio, String title) {
            toast(String.format("%s\n" +
                            "IOIOLib: %s\n" +
                            "Application firmware: %s\n" +
                            "Bootloader firmware: %s\n" +
                            "Hardware: %s",
                    title,
                    ioio.getImplVersion(IOIO.VersionType.IOIOLIB_VER),
                    ioio.getImplVersion(IOIO.VersionType.APP_FIRMWARE_VER),
                    ioio.getImplVersion(IOIO.VersionType.BOOTLOADER_VER),
                    ioio.getImplVersion(IOIO.VersionType.HARDWARE_VER)));
        }

        private void toast(final String message) {
            final Context context = this;
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    Toast.makeText(context, message, Toast.LENGTH_LONG).show();
                }
            });
        }

        private int numConnected_ = 0;

        private void enableUi(final boolean enable) {
            // This is slightly trickier than expected to support a multi-IOIO use-case.
            runOnUiThread(new Runnable() {
                @Override
                public void run() {
                    if (enable) {
                        if (numConnected_++ == 0) {
                            button_.setEnabled(true);
                        }
                    } else {
                        if (--numConnected_ == 0) {
                            button_.setEnabled(false);
                        }
                    }
                }
            });
        }
    }
}

Thankss

1

There are 1 answers

0
AudioBubble On

I found my answer and I would like to share it with you all for the future. This is for starting a new IOIOActivity in Android Studio. IOIO developers haven't written the official IOIO code for AppCompactActivity yet. After couple of days trying, its finally tested and working with IOIO led.

  1. Create a new Class file called AppCompactIOIOActivity (I just like that name) in your package. Note: all credits to Ytai. IOIO code from App507

public class AppCompactIOIOActivity extends AppCompatActivity implements IOIOLooperProvider {
private final IOIOAndroidApplicationHelper helper_ = new IOIOAndroidApplicationHelper(this, this);

public AppCompactIOIOActivity() {
}

protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    this.helper_.create();
}

protected void onDestroy() {
    this.helper_.destroy();
    super.onDestroy();
}

protected void onStart() {
    super.onStart();
    this.helper_.start();
}

protected void onStop() {
    this.helper_.stop();
    super.onStop();
}

@SuppressLint("WrongConstant")
protected void onNewIntent(Intent intent) {
    super.onNewIntent(intent);
    if((intent.getFlags() & 268435456) != 0) {
        this.helper_.restart();
    }

}

protected IOIOLooper createIOIOLooper() {
    throw new RuntimeException("Client must override one of the createIOIOLooper overloads!");
}

public IOIOLooper createIOIOLooper(String connectionType, Object extra) {
    return this.createIOIOLooper();
}

}

  1. Then in your MainActivity

public class MainActivity extends AppCompactIOIOActivity {

    private ToggleButton button_;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        button_ = (ToggleButton) findViewById(R.id.toggleButton);

    }
    class Looper extends BaseIOIOLooper {
        /** The on-board LED. */
        private DigitalOutput led_;

        @Override
        protected void setup() throws ConnectionLostException {
            showVersions(ioio_, "IOIO connected!");
            led_ = ioio_.openDigitalOutput(0, true);
            enableUi(true);
        }

        @Override
        public void loop() throws ConnectionLostException, InterruptedException {
            led_.write(!button_.isChecked());
            Thread.sleep(100);
        }

        @Override
        public void disconnected() {
            enableUi(false);
            toast("IOIO disconnected");
        }

        @Override
        public void incompatible() {
            showVersions(ioio_, "Incompatible firmware version!");
        }
    }

    @Override
    protected IOIOLooper createIOIOLooper() {
        return new Looper();
    }

    private void showVersions(IOIO ioio, String title) {
        toast(String.format("%s\n" +
                        "IOIOLib: %s\n" +
                        "Application firmware: %s\n" +
                        "Bootloader firmware: %s\n" +
                        "Hardware: %s",
                title,
                ioio.getImplVersion(IOIO.VersionType.IOIOLIB_VER),
                ioio.getImplVersion(IOIO.VersionType.APP_FIRMWARE_VER),
                ioio.getImplVersion(IOIO.VersionType.BOOTLOADER_VER),
                ioio.getImplVersion(IOIO.VersionType.HARDWARE_VER)));
    }

    private void toast(final String message) {
        final Context context = this;
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                Toast.makeText(context, message, Toast.LENGTH_LONG).show();
            }
        });
    }

    private int numConnected_ = 0;

    private void enableUi(final boolean enable) {
        // This is slightly trickier than expected to support a multi-IOIO use-case.
        runOnUiThread(new Runnable() {
            @Override
            public void run() {
                if (enable) {
                    if (numConnected_++ == 0) {
                        button_.setEnabled(true);
                    }
                } else {
                    if (--numConnected_ == 0) {
                        button_.setEnabled(false);
                    }
                }
            }
        });
    }
}

Don't forget to add your resources and dependances from IOIO developers. Good luck!