Android Open Source - screenstandby Generic Hardware Observer






From Project

Back to project page screenstandby.

License

The source code is released under:

GNU General Public License

If you think the Android project screenstandby 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 com.nkahoang.kernelswitchobserver;
/*from w ww .j ava 2 s  .  co  m*/
import android.os.Handler;
import android.os.Message;
import android.os.UEventObserver;
import android.util.Log;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

public class GenericHardwareObserver extends UEventObserver {
    private static final String TAG = GenericHardwareObserver.class.getSimpleName();
    private static final boolean LOG = true;
    private java.util.ArrayList<UEventStateChangeHandler> mChangeHandlers;
    protected String HARDWARE_UEVENT_MATCH = "DEVPATH=/devices/virtual/switch/h2w";
    protected String HARDWARE_STATE_PATH = "/sys/class/switch/h2w/state";
    protected String HARDWARE_NAME_PATH = "/sys/class/switch/h2w/name";

    private String HARDWARE_NAME;
    private String mHardwareSwitch;
    private String mHardwareState = "";
    private String mPreviousHardwareState = "";
    private Boolean mIsRunning = false;
    
    public Boolean getIsRunning()
    {
      return mIsRunning;
    }
    
    public static List<String> getHardwareSwitches()
    {
      List<String> result = new ArrayList<String>();
      
      File file = new File("/sys/class/switch");
      for(File f : file.listFiles())
      {
        if (f.isDirectory())
          result.add(f.getName());
      }
      return result;
    }
    
    public GenericHardwareObserver (String hardware_switch_name) throws HardwareNotFoundException {
      HARDWARE_UEVENT_MATCH = "DEVPATH=/devices/virtual/switch/" + hardware_switch_name;
      HARDWARE_STATE_PATH = "/sys/class/switch/" + hardware_switch_name + "/state";
      HARDWARE_NAME_PATH = "/sys/class/switch/" + hardware_switch_name + "/name";
      mHardwareSwitch = hardware_switch_name;
        mChangeHandlers = new java.util.ArrayList<UEventStateChangeHandler>();
        init();
    }

    public void start()
    {
        startObserving(HARDWARE_UEVENT_MATCH);
      mIsRunning = true;
    }
    
    public void stop()
    {
      stopObserving();
      mIsRunning = false;
    }
    
    public String getHardwareName()
    {
      return HARDWARE_NAME;
    }
    public void setOnUEventChangeHandler(UEventStateChangeHandler handler)
    {
      if ((handler != null) && (!mChangeHandlers.contains(handler)))
        mChangeHandlers.add(handler);
    }
    public void removeOnUEventChangeHandler(UEventStateChangeHandler handler)
    {
      if ((handler != null) && (mChangeHandlers.contains(handler)))
        mChangeHandlers.remove(handler);
    }
    
    public String getPreviousHardwareState()
    {
      return mPreviousHardwareState;
    }
    
    public String getCurrentHardwareState()
    {
      return mHardwareState;
    }
    @Override
    public void onUEvent(UEventObserver.UEvent event) {
        if (Log.isLoggable(TAG, Log.VERBOSE)) {
            Log.v(TAG, "Dock UEVENT: " + event.toString());
        }

        synchronized (this) {
            try {
                String newState = event.get("SWITCH_STATE").trim();
                if (!newState.equals(mHardwareState)) {
                  mPreviousHardwareState = mHardwareState;
                  mHardwareState = newState;
                  update();
                }
            } catch (NumberFormatException e) {
                Log.e(TAG, "Could not parse switch state from event " + event);
            }
        }
    }

    private final void init() throws HardwareNotFoundException {
        char[] buffer = new char[1024];

        try {
            FileReader file = new FileReader(HARDWARE_STATE_PATH);
            int len = file.read(buffer, 0, 1024);
            file.close();
            mPreviousHardwareState = mHardwareState = (new String(buffer, 0, len)).trim();
            file = new FileReader(HARDWARE_NAME_PATH);
            len = file.read(buffer, 0, 1024);
            HARDWARE_NAME = new String(buffer, 0, len).trim();
            update();
            file.close();
        } catch (FileNotFoundException e) {
          if (LOG)
            Log.w(TAG, "This kernel does not have that hardware");
          throw new HardwareNotFoundException (this.mHardwareSwitch);
        } catch (Exception e) {
          if (LOG)
            Log.e(TAG, "" , e);
        }
    }

    private final void update() {
        mHandler.sendEmptyMessage(0);
    }

    private final Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 0:
                    synchronized (this) {
                      if (LOG)
                      {
                        String message = "Hardware (" + HARDWARE_NAME + ") status: " + mHardwareState;
                        Log.i(TAG, message);
                      }
                      for(UEventStateChangeHandler u : mChangeHandlers)
                        if (u!=null) u.OnUEventStateChange(mHardwareState);
                    }
                    break;
            }
        }
    };
}




Java Source Code List

android.os.UEventObserver.java
com.nkahoang.kernelswitchobserver.DockObserver.java
com.nkahoang.kernelswitchobserver.GenericHardwareObserver.java
com.nkahoang.kernelswitchobserver.HDMIObserver.java
com.nkahoang.kernelswitchobserver.HardwareNotFoundException.java
com.nkahoang.kernelswitchobserver.HeadsetObserver.java
com.nkahoang.kernelswitchobserver.UEventStateChangeHandler.java
com.nkahoang.screenstandby.AppDetector.java
com.nkahoang.screenstandby.AutoSettingWizard.java
com.nkahoang.screenstandby.BTReceiver.java
com.nkahoang.screenstandby.BackupHelper.java
com.nkahoang.screenstandby.BaseActivity.java
com.nkahoang.screenstandby.BootTimeReceiver.java
com.nkahoang.screenstandby.ChangeLogHandler.java
com.nkahoang.screenstandby.DisableActivity.java
com.nkahoang.screenstandby.DockReceiver.java
com.nkahoang.screenstandby.EnableActivity.java
com.nkahoang.screenstandby.ExceptionHandler.java
com.nkahoang.screenstandby.FlowLayout.java
com.nkahoang.screenstandby.FontManager.java
com.nkahoang.screenstandby.HDMIReceiver.java
com.nkahoang.screenstandby.HUDNative.java
com.nkahoang.screenstandby.HeadsetReceiver.java
com.nkahoang.screenstandby.IconContextMenu.java
com.nkahoang.screenstandby.Logger.java
com.nkahoang.screenstandby.Main.java
com.nkahoang.screenstandby.ManualBrightnessChangerActivity.java
com.nkahoang.screenstandby.MediaButtonControlReceiver.java
com.nkahoang.screenstandby.NotificationBar.java
com.nkahoang.screenstandby.NumberPickerButton.java
com.nkahoang.screenstandby.NumberPicker.java
com.nkahoang.screenstandby.OneTwoDimmer.java
com.nkahoang.screenstandby.OutcomingCallReceiver.java
com.nkahoang.screenstandby.PreferenceListFragment.java
com.nkahoang.screenstandby.RemoteControlSelectActivity.java
com.nkahoang.screenstandby.RemoteControllerActivity.java
com.nkahoang.screenstandby.RemoteServerActivity.java
com.nkahoang.screenstandby.ServiceToggleReceiver.java
com.nkahoang.screenstandby.SettingActivity.java
com.nkahoang.screenstandby.ShortcutActivity.java
com.nkahoang.screenstandby.ShortcutOnActivity.java
com.nkahoang.screenstandby.StandbyService.java
com.nkahoang.screenstandby.StandbyToggleReceiver.java
com.nkahoang.screenstandby.StandbyWidgetProvider2by2.java
com.nkahoang.screenstandby.StandbyWidgetProvider.java
com.nkahoang.screenstandby.TimePickerDialog.java
com.nkahoang.screenstandby.TimePicker.java
com.nkahoang.screenstandby.TroubleshootingActivity.java
com.nkahoang.screenstandby.VolumeKeyDetector.java
com.nkahoang.screenstandby.XTopDPIChanger.java
com.nkahoang.screenstandby.remotecontrol.ClientService.java
com.nkahoang.screenstandby.remotecontrol.Core.java
com.nkahoang.screenstandby.remotecontrol.OnClientStateChangedHandler.java
com.nkahoang.screenstandby.remotecontrol.OnServiceAddressResolvedHandler.java
com.nkahoang.screenstandby.remotecontrol.OnStateChangedHandler.java
com.nkahoang.screenstandby.remotecontrol.RemoteAppPackages.java
com.nkahoang.screenstandby.remotecontrol.RemotePackageInfo.java
com.nkahoang.screenstandby.remotecontrol.ServerService.java
com.nkahoang.screenstandby.remotecontrol.ServiceBinder.java
com.nkahoang.screenstandby.settings.DeviceSettings.java
com.nkahoang.screenstandby.settings.RootChecker.java
com.nkahoang.screenstandby.settings.UpdateChecker.java