Android Open Source - screenstandby H D M I Receiver






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

/*******************************************************************************
 * Copyright (c) 2014 Hoang Nguyen./*from  w ww  . j  a v a  2  s. com*/
 * All rights reserved. This program and the accompanying materials
 * are made available under the terms of the GNU Public License v2.0
 * which accompanies this distribution, and is available at
 * http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
 * 
 * Contributors:
 *     Hoang Nguyen - initial API and implementation
 ******************************************************************************/
package com.nkahoang.screenstandby;

import com.nkahoang.kernelswitchobserver.GenericHardwareObserver;
import com.nkahoang.kernelswitchobserver.UEventStateChangeHandler;
import java.io.DataOutputStream;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

public class HDMIReceiver extends BroadcastReceiver {
    public HDMIReceiver() {      
    }
    
    private static String MOTOROLA_HDMIINTENT = "com.motorola.intent.action.externaldisplaystate";
  private static String launchPackage = "";
  private static Boolean killPackage = false;
  private GenericHardwareObserver hdmiobserver;
  
  private static void ScreenOn(Context context)
  {
    try
    {
      Intent serviceIntent = new Intent();
          serviceIntent.setAction(StandbyService.TOGGLE_INTENT);
          context.sendBroadcast(serviceIntent);
        Logger.Log(context, "HDMI UNPLUGGED");
    }
    catch(Exception ex)
    {
      Logger.Log(context, ex);
    }
        try
        {
          if (killPackage && launchPackage.length() > 0)
          {
            Process proc;
            DataOutputStream os;
              proc = Runtime.getRuntime().exec("su");
                os = new DataOutputStream(proc.getOutputStream());
            os.writeBytes("kill $(pgrep " + launchPackage + ")\n");
          }
        }catch(Exception ex)
        {
          Logger.Log(context, ex.getMessage() + " " + ex.getStackTrace().toString());
        }
        try
        {
          SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
          if (prefs.getBoolean("hdmirun_close_returnhome", false))
          {
            Logger.Log(context, "HDMI RETURN HOME");
        Intent startMain = new Intent(Intent.ACTION_MAIN);
        startMain.addCategory(Intent.CATEGORY_HOME);
        startMain.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
        context.startActivity(startMain);  
          }
        }
        catch(Exception ex)
        {
          Logger.Log(context, ex.getMessage() + " " + ex.getStackTrace().toString());
        }
  }
  
  private static void ScreenOff(Context context)
  {
    Logger.Log(context, "HDMI PLUGGED");
    Intent serviceIntent = new Intent();
        serviceIntent.setAction(StandbyService.ENABLE_INTENT);
        serviceIntent.putExtra("autohdmi", true);
        context.sendBroadcast(serviceIntent);
        if (launchPackage.length() > 0)
        {
          Intent LaunchIntent = context.getPackageManager().getLaunchIntentForPackage(launchPackage);
          context.startActivity(LaunchIntent);
        }
  }
    @Override
    public void onReceive(final Context context, Intent intent) {
      Logger.Log(context, intent);
      SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);
      launchPackage = prefs.getString("hdmirunpackage", "");
      killPackage = prefs.getBoolean("hdmirun_close", false);

      if (intent.hasExtra("state"))
      {
        Boolean iState = intent.getBooleanExtra("state", true);
        String intentToBroadcast = "";
        if (iState && prefs.getBoolean("hdmi_broadcast_connect", false))
          intentToBroadcast = prefs.getString("hdmi_broadcast_connect_action", "");
        else if (!iState && prefs.getBoolean("hdmi_broadcast_disconnect", false))
          intentToBroadcast = prefs.getString("hdmi_broadcast_disconnect_action", "");
        if (intentToBroadcast.trim().length() > 0) context.sendBroadcast(new Intent(intentToBroadcast));
      }
      
      if (prefs.getBoolean("hdmidetection", false))
      {
        if (intent.getAction().equals(MOTOROLA_HDMIINTENT))
        {
          int HDMI = intent.getIntExtra("hdmi",1);
          int HDCP = intent.getIntExtra("hdcp",1);
          if (HDMI == HDCP)
          {
            if (HDMI == 1)
              ScreenOff(context);
            else
              ScreenOn(context);
          }
          else
          {
            if (HDCP == 1)
              ScreenOff(context);
            else
              ScreenOn(context);
          }
        }
        else
        {
          Boolean state = true;
          if (intent.hasExtra("state"))
            state = intent.getBooleanExtra("state", state);
          
          if (state) {
            try
            {
              hdmiobserver = new GenericHardwareObserver("hdmi");
              hdmiobserver.setOnUEventChangeHandler(new UEventStateChangeHandler() {
              @Override
              public void OnUEventStateChange(String NewState) {
                if (NewState.trim().equals("0")) {
                  try {
                    hdmiobserver.stop();
                  }
                  catch(Exception ex) {}
                  ScreenOn(context);
                }
              }});
              hdmiobserver.start();
            }
            catch(Exception ex)
            {
              Logger.Log(context, ex);
            }
            ScreenOff(context);
          }
          else
            ScreenOn(context);
        }
      }
    }
}




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