Home | History | Annotate | Download | only in src
      1 /*
      2 * Copyright (C) 2014 The Android Open Source Project
      3 *
      4 * Licensed under the Apache License, Version 2.0 (the "License");
      5 * you may not use this file except in compliance with the License.
      6 * You may obtain a copy of the License at
      7 *
      8 *      http://www.apache.org/licenses/LICENSE-2.0
      9 *
     10 * Unless required by applicable law or agreed to in writing, software
     11 * distributed under the License is distributed on an "AS IS" BASIS,
     12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 * See the License for the specific language governing permissions and
     14 * limitations under the License.
     15 */
     16 
     17 
     18 #include "stdafx.h"
     19 #include "WinLauncher2App.h"
     20 
     21 #include "utils.h"
     22 #include "JavaFinder.h"
     23 #include "FindJava2Dlg.h"
     24 
     25 #ifdef _DEBUG
     26 #define new DEBUG_NEW
     27 #endif
     28 
     29 
     30 // CWinLauncher2App
     31 
     32 BEGIN_MESSAGE_MAP(CWinLauncher2App, CWinApp)
     33     ON_COMMAND(ID_HELP, &CWinApp::OnHelp)
     34 END_MESSAGE_MAP()
     35 
     36 
     37 // The one and only CWinLauncher2App object
     38 CWinLauncher2App theApp;
     39 
     40 class CLauncherCmdLineInfo : public CCommandLineInfo {
     41 public:
     42     bool mDoHelp;
     43     bool mDoForceUi;
     44     bool mDoJava1_7;
     45     CString mFilename;
     46 
     47     CLauncherCmdLineInfo() : mDoHelp(false), mDoForceUi(false), mDoJava1_7(false) {}
     48 
     49     virtual void ParseParam(const TCHAR* pszParam, BOOL bFlag, BOOL bLast) {
     50         // Expected command line:
     51         // /h | help  : msg box with command line arguments
     52         // /f | force : force UI selection
     53         // /7         : require java 1.7
     54         // path-to-launch
     55 
     56         if (!bFlag) {
     57             mFilename = pszParam;
     58         } else if (_tcsnccmp(pszParam, _T("h"), 2) == 0) {
     59             mDoHelp = true;
     60         } else if (_tcsnccmp(pszParam, _T("f"), 2) == 0) {
     61             mDoForceUi = true;
     62         } else if (_tcsnccmp(pszParam, _T("7"), 2) == 0) {
     63             mDoJava1_7 = true;
     64         }
     65     }
     66 };
     67 
     68 
     69 CWinLauncher2App::CWinLauncher2App() {
     70     // support Restart Manager
     71     m_dwRestartManagerSupportFlags = AFX_RESTART_MANAGER_SUPPORT_RESTART;
     72 
     73     // TODO: add construction code here,
     74     // Place all significant initialization in InitInstance
     75 }
     76 
     77 BOOL CWinLauncher2App::InitInstance() {
     78     // InitCommonControlsEx() is required on Windows XP if an application
     79     // manifest specifies use of ComCtl32.dll version 6 or later to enable
     80     // visual styles.  Otherwise, any window creation will fail.
     81     INITCOMMONCONTROLSEX InitCtrls;
     82     InitCtrls.dwSize = sizeof(InitCtrls);
     83     // Set this to include all the common control classes you want to use
     84     // in your application.
     85     InitCtrls.dwICC = ICC_WIN95_CLASSES;
     86     InitCommonControlsEx(&InitCtrls);
     87 
     88     CWinApp::InitInstance();
     89     AfxEnableControlContainer();
     90 
     91     // Create the shell manager, in case the dialog contains
     92     // any shell tree view or shell list view controls.
     93     CShellManager *pShellManager = new CShellManager;
     94 
     95     // Activate "Windows Native" visual manager for enabling themes in MFC controls
     96     CMFCVisualManager::SetDefaultManager(RUNTIME_CLASS(CMFCVisualManagerWindows));
     97 
     98     // Set CWinApp default registry key. Must be consistent with all apps using findjava2.
     99     SetRegistryKey(_T("Android-FindJava2"));
    100 
    101     // Use VERSIONINFO.FileDescription as the canonical app name
    102     initUtils(NULL);
    103 
    104     CLauncherCmdLineInfo cmdLine;
    105     ParseCommandLine(cmdLine);
    106 
    107     if (cmdLine.mDoHelp) {
    108         const TCHAR *msg =
    109             _T("WinLauncher2 [/7|/f|/h]\r\n")
    110             _T("/7 : Requires Java 1.7 instead of 1.6\r\n")
    111             _T("/f : Force UI\r\n")
    112             _T("/h : Help\r\n");
    113             AfxMessageBox(msg);
    114         return FALSE; // quit without starting MFC app msg loop
    115     }
    116 
    117     CJavaFinder javaFinder(JAVA_VERS_TO_INT(1, cmdLine.mDoJava1_7 ? 7 : 6));
    118     CJavaPath javaPath = javaFinder.getRegistryPath();
    119     if (cmdLine.mDoForceUi || javaPath.isEmpty()) {
    120         javaPath.clear();
    121 
    122         CFindJava2Dlg dlg;
    123         dlg.setJavaFinder(&javaFinder);
    124         m_pMainWnd = &dlg;
    125         INT_PTR nResponse = dlg.DoModal();
    126 
    127         if (nResponse == IDOK) {
    128             // Use choice selected by user and save in registry.
    129             javaPath = dlg.getSelectedPath();
    130             javaFinder.setRegistryPath(javaPath);
    131         } else if (nResponse == IDCANCEL) {
    132             // Canceled by user, exit silently.
    133         } else if (nResponse == -1) {
    134             TRACE(traceAppMsg, 0, "Warning: dialog creation failed, so application is terminating unexpectedly.\n");
    135         }
    136     }
    137 
    138     if (!javaPath.isEmpty()) {
    139         // TODO actually launch configured app instead of just printing path.
    140         CString msg(_T("PLACEHOLDER TODO run app using "));
    141         msg.Append(javaPath.mPath);
    142         AfxMessageBox(msg);
    143     }
    144 
    145     // Delete the shell manager created above.
    146     if (pShellManager != NULL) {
    147         delete pShellManager;
    148     }
    149 
    150     // Since the dialog has been closed, return FALSE so that we exit the
    151     // application, rather than start the application's message pump.
    152     return FALSE;
    153 }
    154 
    155