174db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar/* 274db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * Copyright (C) 2017 The Android Open Source Project 374db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * 474db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * Licensed under the Apache License, Version 2.0 (the "License"); 574db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * you may not use this file except in compliance with the License. 674db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * You may obtain a copy of the License at 774db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * 874db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * http://www.apache.org/licenses/LICENSE-2.0 974db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * 1074db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * Unless required by applicable law or agreed to in writing, software 1174db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * distributed under the License is distributed on an "AS IS" BASIS, 1274db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1374db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * See the License for the specific language governing permissions and 1474db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * limitations under the License. 1574db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar */ 1674db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar 1774db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankarpackage com.android.commands.vr; 1874db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar 192b9aaedf6310694de31301659ce604ff195b32eeKarthik Ravi Shankarimport android.app.Vr2dDisplayProperties; 2074db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankarimport android.content.Context; 2174db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankarimport android.os.RemoteException; 2274db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankarimport android.os.ServiceManager; 2374db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar 2474db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankarimport android.service.vr.IVrManager; 2574db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankarimport com.android.internal.os.BaseCommand; 2674db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar 2774db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankarimport java.io.PrintStream; 2874db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar 2974db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankarpublic final class Vr extends BaseCommand { 3074db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar 3174db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar /** 3274db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * Command-line entry point. 3374db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * 3474db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar * @param args The command-line arguments 3574db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar */ 3674db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar public static void main(String[] args) { 3774db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar (new Vr()).run(args); 3874db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar } 3974db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar 4033f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar private static final String COMMAND_SET_PERSISTENT_VR_MODE_ENABLED = 4133f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar "set-persistent-vr-mode-enabled"; 422b9aaedf6310694de31301659ce604ff195b32eeKarthik Ravi Shankar private static final String COMMAND_SET_VR2D_DISPLAY_PROPERTIES = 4333f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar "set-display-props"; 4474db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar 4574db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar private IVrManager mVrService; 4674db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar 4774db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar @Override 4874db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar public void onShowUsage(PrintStream out) { 4974db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar out.println( 5074db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar "usage: vr [subcommand]\n" + 5133f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar "usage: vr set-persistent-vr-mode-enabled [true|false]\n" + 5233f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar "usage: vr set-display-props [width] [height] [dpi]\n" 5374db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar ); 5474db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar } 5574db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar 5674db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar @Override 5774db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar public void onRun() throws Exception { 5874db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar mVrService = IVrManager.Stub.asInterface(ServiceManager.getService(Context.VR_SERVICE)); 5974db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar if (mVrService == null) { 6074db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar showError("Error: Could not access the Vr Manager. Is the system running?"); 6174db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar return; 6274db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar } 6374db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar 6474db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar String command = nextArgRequired(); 6574db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar switch (command) { 662b9aaedf6310694de31301659ce604ff195b32eeKarthik Ravi Shankar case COMMAND_SET_VR2D_DISPLAY_PROPERTIES: 672b9aaedf6310694de31301659ce604ff195b32eeKarthik Ravi Shankar runSetVr2dDisplayProperties(); 6833f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar break; 6974db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar case COMMAND_SET_PERSISTENT_VR_MODE_ENABLED: 7074db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar runSetPersistentVrModeEnabled(); 7174db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar break; 7274db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar default: 7374db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar throw new IllegalArgumentException ("unknown command '" + command + "'"); 7474db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar } 7574db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar } 7674db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar 772b9aaedf6310694de31301659ce604ff195b32eeKarthik Ravi Shankar private void runSetVr2dDisplayProperties() throws RemoteException { 7833f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar String widthStr = nextArgRequired(); 7933f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar int width = Integer.parseInt(widthStr); 8033f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar 8133f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar String heightStr = nextArgRequired(); 8233f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar int height = Integer.parseInt(heightStr); 8333f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar 8433f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar String dpiStr = nextArgRequired(); 8533f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar int dpi = Integer.parseInt(dpiStr); 8633f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar 872b9aaedf6310694de31301659ce604ff195b32eeKarthik Ravi Shankar Vr2dDisplayProperties vr2dDisplayProperties = 882b9aaedf6310694de31301659ce604ff195b32eeKarthik Ravi Shankar new Vr2dDisplayProperties(width, height, dpi); 8933f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar 9033f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar try { 912b9aaedf6310694de31301659ce604ff195b32eeKarthik Ravi Shankar mVrService.setVr2dDisplayProperties(vr2dDisplayProperties); 9233f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar } catch (RemoteException re) { 9333f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar System.err.println("Error: Can't set persistent mode " + re); 9433f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar } 9533f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar } 9633f70c16eb99534ffd9338f7bf03f23d19fe6611Karthik Ravi Shankar 9774db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar private void runSetPersistentVrModeEnabled() throws RemoteException { 9874db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar String enableStr = nextArg(); 9974db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar boolean enabled = Boolean.parseBoolean(enableStr); 10074db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar try { 10174db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar mVrService.setPersistentVrModeEnabled(enabled); 10274db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar } catch (RemoteException re) { 10374db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar System.err.println("Error: Can't set persistent mode " + re); 10474db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar } 10574db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar } 10674db2a3667e69138e2af8ea4ff053a43cc262aa8Karthik Ravi Shankar} 107