diff --git a/app/src/main/java/com/termux/api/TermuxApiReceiver.java b/app/src/main/java/com/termux/api/TermuxApiReceiver.java index 6efaafe1..887b00af 100644 --- a/app/src/main/java/com/termux/api/TermuxApiReceiver.java +++ b/app/src/main/java/com/termux/api/TermuxApiReceiver.java @@ -17,6 +17,7 @@ import com.termux.api.apis.ClipboardAPI; import com.termux.api.apis.ContactListAPI; import com.termux.api.apis.DialogAPI; +import com.termux.api.apis.DisplayInfoAPI; import com.termux.api.apis.DownloadAPI; import com.termux.api.apis.FingerprintAPI; import com.termux.api.apis.InfraredAPI; @@ -126,6 +127,9 @@ private void doWork(Context context, Intent intent) { case "Dialog": DialogAPI.onReceive(context, intent); break; + case "DisplayInfo": + DisplayInfoAPI.onReceive(this, context, intent); + break; case "Download": DownloadAPI.onReceive(this, context, intent); break; diff --git a/app/src/main/java/com/termux/api/apis/DisplayInfoAPI.java b/app/src/main/java/com/termux/api/apis/DisplayInfoAPI.java new file mode 100644 index 00000000..8aea80e5 --- /dev/null +++ b/app/src/main/java/com/termux/api/apis/DisplayInfoAPI.java @@ -0,0 +1,74 @@ +package com.termux.api.apis; + +import android.content.Context; +import android.content.Intent; +import android.hardware.display.DisplayManager; +import android.util.DisplayMetrics; +import android.util.JsonWriter; +import android.view.Display; + +import com.termux.api.TermuxApiReceiver; +import com.termux.api.util.ResultReturner; +import com.termux.shared.logger.Logger; + +public class DisplayInfoAPI { + private static final String LOG_TAG = "DisplayInfoAPI"; + + public static void onReceive(TermuxApiReceiver apiReceiver, final Context context, Intent intent) { + Logger.logDebug(LOG_TAG, "onReceive"); + + ResultReturner.returnData(apiReceiver, intent, new ResultReturner.ResultJsonWriter() { + @Override + public void writeJson(JsonWriter out) throws Exception { + DisplayManager displayManager = (DisplayManager) context.getSystemService(Context.DISPLAY_SERVICE); + + out.beginArray(); + for (Display display : displayManager.getDisplays()) { + out.beginObject(); + out.name("Name").value(display.getName()); + out.name("DisplayId").value(display.getDisplayId()); + out.name("AppVsyncOffset").value(display.getAppVsyncOffsetNanos()); + out.name("PresentationDeadline").value(display.getPresentationDeadlineNanos()); + out.name("RefreshRate").value(display.getRefreshRate()); + out.name("Rotation").value(display.getRotation()); + + out.name("SupportedModes"); + out.beginArray(); + for (Display.Mode mode : display.getSupportedModes()) { + out.beginObject(); + out.name("ModeId").value(mode.getModeId()); + out.name("PhysicalHeight").value(mode.getPhysicalHeight()); + out.name("PhysicalWidth").value(mode.getPhysicalWidth()); + out.name("RefreshRate").value(mode.getRefreshRate()); + out.endObject(); + } + out.endArray(); + + out.name("HdrCapabilities"); + out.beginObject(); + Display.HdrCapabilities hdrCapabilities = display.getHdrCapabilities(); + out.name("DesiredMaxAverageLuminance").value(hdrCapabilities.getDesiredMaxAverageLuminance()); + out.name("DesiredMaxLuminance").value(hdrCapabilities.getDesiredMaxLuminance()); + out.name("DesiredMinLuminance").value(hdrCapabilities.getDesiredMinLuminance()); + out.endObject(); + + out.name("DisplayMetrics"); + out.beginObject(); + DisplayMetrics displayMetrics = new DisplayMetrics(); + display.getMetrics(displayMetrics); + out.name("Density").value(displayMetrics.density); + out.name("DensityDPI").value(displayMetrics.densityDpi); + out.name("HeightPixels").value(displayMetrics.heightPixels); + out.name("ScaledDensity").value(displayMetrics.scaledDensity); + out.name("WidthPixels").value(displayMetrics.widthPixels); + out.name("xDPI").value(displayMetrics.xdpi); + out.name("yDPI").value(displayMetrics.ydpi); + out.endObject(); + + out.endObject(); + } + out.endArray(); + } + }); + } +}