Android Open Source - luminous Core






From Project

Back to project page luminous.

License

The source code is released under:

GNU General Public License

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

package de.denisulmer.luminous.v2;
/*ww  w .  j  a v a 2 s  .c  o m*/
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Handler;
import android.support.v4.app.Fragment;
import android.support.v4.view.ViewPager;
import android.util.Log;
import org.json.JSONArray;
import org.json.JSONObject;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.InputStreamReader;
import java.net.InetSocketAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
import java.util.Vector;

public class Core
{
    private static MainActivity mMainActivity;
    private static SetupActivity mSetupActivity;
    private static SharedPreferences mSharedPreferences;
    private static SharedPreferences.Editor mSharedPreferencesEditor;
    private static ViewPager mViewPager;
    private static Handler mHandler;
    private static Timer mTimer;
    private static Vector<Device> mDevices;

    private static String TAG = "Core";

    public static void Initiate(MainActivity mainActivity)
    {
        mMainActivity = mainActivity;
        mSharedPreferences = mMainActivity.getSharedPreferences("de.denisulmer.luminous.v2:general", mMainActivity.MODE_PRIVATE);
        Log.d(TAG, "Initiation of core successful");
    }

    public static void setSetupActivity(SetupActivity setupActivity)
    {
        mSetupActivity = setupActivity;
        Log.d(TAG, "Set new link for SetupActivity");
    }
    public static SetupActivity getSetupActivity()
    {
        Log.d(TAG, "Returned current link to SetupActivity");
        return mSetupActivity;
    }

    public static void setMainActivity(MainActivity mainActivity)
    {
        mMainActivity = mainActivity;
        Log.d(TAG, "Set new link for MainActivity");
    }
    public static MainActivity getMainActivity()
    {
        Log.d(TAG, "Returned current link to MainActivity");
        return mMainActivity;
    }

    public static String getSavedHostname()
    {
        String s = mSharedPreferences.getString("Hostname", "");
        Log.d(TAG, "Reading hostname from shared preferences: " + s);
        return s;
    }
    public static void setSavedHostname(String s)
    {
        mSharedPreferencesEditor = mSharedPreferences.edit();
        mSharedPreferencesEditor.putString("Hostname", s);
        mSharedPreferencesEditor.commit();
        Log.d(TAG, "Setting hostname in shared preferences to " + s);
    }

    public static int getSavedPort()
    {
        int i = mSharedPreferences.getInt("Port", 0);
        Log.d(TAG, "Reading port from shared preferences: " + i);
        return i;
    }
    public static void setSavedPort(int i)
    {
        mSharedPreferencesEditor = mSharedPreferences.edit();
        mSharedPreferencesEditor.putInt("Port", i);
        mSharedPreferencesEditor.commit();
        Log.d(TAG, "Setting port in shared preferences to " + i);
    }

    public static void setLoopAutostart(boolean b)
    {
        Log.d(TAG, "Setting loop-autostart to " + b);
        boolean mLoopAutostart = b;
    }

    public static void startLoop()
    {
        mTimer = new Timer();
        mHandler = new Handler();

        TimerTask doAsynchronousTask = new TimerTask() {
            @Override
            public void run() {
                mHandler.post(new Runnable() {
                    public void run() {
                        try {
                            BackgroundTask backgroundTask = new BackgroundTask();
                            backgroundTask.execute(getSavedHostname(), getSavedPort() + "");
                        } catch (Exception e) {
                            // TODO Auto-generated catch block
                        }
                    }
                });
            }
        };
        int BGTASK_DELAY = 5000;
        mTimer.schedule(doAsynchronousTask, 0, BGTASK_DELAY);
        Log.d(TAG, "Started loop");
    }
    public static void stopLoop()
    {
        if (mTimer != null)
        {
            mTimer.cancel();
        }
        Log.d(TAG, "Stopped loop");
    }

    public static void startSetupActivity()
    {
        Intent setupIntent = new Intent(mMainActivity.getBaseContext(), SetupActivity.class);
        mMainActivity.startActivity(setupIntent);
    }
    public static void startMainActivity()
    {
        Intent mainIntent = new Intent(mSetupActivity.getBaseContext(), MainActivity.class);
        mSetupActivity.startActivity(mainIntent);
    }

    public static void refreshUI(String s)
    {
        Log.d(TAG, "Refreshing UI with new configuration");
        mDevices = parseConfig(s);
        Log.d(TAG, "Found " + mDevices.size() + " devices");
        List<String> locations = getLocations(mDevices);
        Log.d(TAG, "Found " + locations.size() + " locations");
        List<Fragment> fragments = getFragments(locations, mDevices);

        int currentItem = 0;
        if (mViewPager != null)
        {
            currentItem = mViewPager.getCurrentItem();
        }

        LocationPageAdapter mLocationPageAdapter = new LocationPageAdapter(mMainActivity.getSupportFragmentManager(), fragments);
        mViewPager = (ViewPager) mMainActivity.findViewById(R.id.mainactivity_viewpager);
        mViewPager.setAdapter(mLocationPageAdapter);
        mViewPager.setCurrentItem(currentItem);
        mLocationPageAdapter.notifyDataSetChanged();

    }

    public static List<Fragment> getFragments(List<String> locations, Vector<Device> devices)
    {
        List<Fragment> fragments = new ArrayList<Fragment>();
        for(String location : locations)
        {
            Fragment fragment = LocationFragment.newInstance(location);
            fragments.add(fragment);
        }
        return fragments;
    }

    public static List<Device> getDevicesForLocation(String location)
    {
        List<Device> locationDevices = new ArrayList<Device>();
        for( Device device : mDevices )
        {
            if (device.getLocation().equals(location))
            {
                locationDevices.add(device);
            }
        }
        return locationDevices;
    }

    public static List<String> getLocations(Vector<Device> devices)
    {
        Log.d(TAG, "Extracting locations from devices");
        List<String> locations = new ArrayList<String>();
        for (Device device : devices)
        {
            if (!locations.contains(device.getLocation()))
            {
                locations.add(device.getLocation());
            }
        }
        return locations;
    }

    public static void sendLine(final String s)
    {
        Runnable r = new Runnable() {
            @Override
            public void run() {
                try
                {
                    Socket socket = new Socket();
                    socket.connect(new InetSocketAddress(getSavedHostname(), getSavedPort()), 5000);
                    BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
                    DataOutputStream dataOutputStream = new DataOutputStream(socket.getOutputStream());
                    dataOutputStream.writeBytes("{\"message\": \"client controller\"}\n");
                    dataOutputStream.writeBytes(s + "\n");
                    socket.close();
                    Log.d(TAG, "Sending to pilight: " + s);
                }
                catch(Exception e)
                {
                    e.printStackTrace();
                }
            }
        };
        new Thread(r).start();
    }

    public static Vector<Device> parseConfig(String s)
    {
        Vector<Device> devices = new Vector<Device>();
        try
        {
            JSONObject jsonConfig = new JSONObject(s).getJSONObject("config");
            Iterator<String> configIterator = jsonConfig.keys();
            while (configIterator.hasNext())
            {
                String room = configIterator.next();
                try
                {
                    JSONObject jsonRoom = new JSONObject(jsonConfig.get(room).toString());
                    Iterator<String> roomIterator = jsonRoom.keys();

                    while (roomIterator.hasNext())
                    {
                        String socket = roomIterator.next();
                        try
                        {
                            Object obj = jsonRoom.get(socket);

                            // Name and order are unimportant
                            if (! ( socket.equals("name") || socket.equals("order") ) )
                            {
                                JSONObject jsonSocket = new JSONObject(jsonRoom.get(socket).toString());
                                Iterator<String> socketIterator = jsonSocket.keys();

                                // Temporary object
                                Device tempItem = new Device();
                                tempItem.setName(socket);

                                while (socketIterator.hasNext())
                                {
                                    String detail = socketIterator.next();
                                    try
                                    {
                                        Object value = jsonSocket.get(detail);

                                        if (detail.equals("name"))
                                        {
                                            tempItem.setDescription(value.toString());
                                            tempItem.setLocation(room.toString());
                                        }
                                        if (detail.equals("type"))
                                        {
                                            tempItem.setType(Integer.parseInt(value.toString()));
                                        }
                                        if (detail.equals("protocol"))
                                        {
                                            tempItem.setProtocol(value.toString());
                                        }
                                        if (detail.equals("id"))
                                        {
                                            JSONArray jsonArray = new JSONArray(value.toString());
                                            tempItem.setUnit(Integer.parseInt(((JSONObject) jsonArray.get(0)).get("unit").toString()));
                                            tempItem.setId(Integer.parseInt(((JSONObject) jsonArray.get(0)).get("id").toString()));
                                        }
                                        if (detail.equals("state"))
                                        {
                                            tempItem.setState(value.toString());
                                        }
                                    }
                                    catch(Exception e)
                                    {

                                    }
                                }

                                // Add new configuration item to vector list
                                devices.add(tempItem);
                            }
                        }
                        catch(Exception e)
                        {

                        }
                    }
                }
                catch (Exception e)
                {
                    // Something went wrong!
                }
            }
            Log.d(TAG, "Configuration parsed successfully");
            return devices;
        }
        catch(Exception e)
        {

        }
        return null;
    }
}




Java Source Code List

de.denisulmer.luminous.v2.BackgroundTask.java
de.denisulmer.luminous.v2.Core.java
de.denisulmer.luminous.v2.DeviceListAdapter.java
de.denisulmer.luminous.v2.Device.java
de.denisulmer.luminous.v2.LocationFragment.java
de.denisulmer.luminous.v2.LocationPageAdapter.java
de.denisulmer.luminous.v2.MainActivity.java
de.denisulmer.luminous.v2.SetupActivity.java