protected void unpackComponents() throws IOException, FileNotFoundException { File applicationPackage = new File(getApplication().getPackageResourcePath()); File componentsDir = new File(sGREDir, "components"); if (componentsDir.lastModified() == applicationPackage.lastModified()) return; componentsDir.mkdir(); componentsDir.setLastModified(applicationPackage.lastModified()); GeckoAppShell.killAnyZombies(); ZipFile zip = new ZipFile(applicationPackage); byte[] buf = new byte[32768]; try { if (unpackFile(zip, buf, null, "removed-files")) removeFiles(); } catch (Exception ex) { // This file may not be there, so just log any errors and move on Log.w(LOG_FILE_NAME, "error removing files", ex); } // copy any .xpi file into an extensions/ directory Enumeration<? extends ZipEntry> zipEntries = zip.entries(); while (zipEntries.hasMoreElements()) { ZipEntry entry = zipEntries.nextElement(); if (entry.getName().startsWith("extensions/") && entry.getName().endsWith(".xpi")) { Log.i("GeckoAppJava", "installing extension : " + entry.getName()); unpackFile(zip, buf, entry, entry.getName()); } } }
private void deleteLocation(LocationInfo info) { if (NavigineApp.Navigation == null) return; if (info != null) { try { (new File(info.archiveFile)).delete(); info.localVersion = -1; info.localModified = false; String locationDir = LocationLoader.getLocationDir(mContext, info.title); File dir = new File(locationDir); File[] files = dir.listFiles(); for (int i = 0; i < files.length; ++i) files[i].delete(); dir.delete(); String mapFile = NavigineApp.Settings.getString("map_file", ""); if (mapFile.equals(info.archiveFile)) { NavigineApp.Navigation.loadArchive(null); SharedPreferences.Editor editor = NavigineApp.Settings.edit(); editor.putString("map_file", ""); editor.commit(); } mAdapter.updateList(); } catch (Throwable e) { Log.e(TAG, Log.getStackTraceString(e)); } } }
private void parseMapsXml() { try { String fileName = LocationLoader.getLocationDir(NavigineApp.AppContext, null) + "/maps.xml"; List<LocationInfo> infoList = Parser.parseMapsXml(NavigineApp.AppContext, fileName); mInfoList = new ArrayList<LocationInfo>(); if (infoList != null) mInfoList = infoList; mAdapter.updateList(); new File(fileName).delete(); } catch (Throwable e) { Log.e(TAG, Log.getStackTraceString(e)); } }
public void start() { if (myThread == null) { Log.i(getClass().getName(), "Main thread.start()"); myThread = new Thread(this); myThread.start(); } else { Log.w( getClass().getName(), "Requested a thread.start(), but the thread is already running - ignoring this request! (myThread = " + myThread); } }
@Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { String filePickerResult = ""; if (data != null && resultCode == RESULT_OK) { try { ContentResolver cr = getContentResolver(); Uri uri = data.getData(); Cursor cursor = GeckoApp.mAppContext .getContentResolver() .query(uri, new String[] {OpenableColumns.DISPLAY_NAME}, null, null, null); String name = null; if (cursor != null) { try { if (cursor.moveToNext()) { name = cursor.getString(0); } } finally { cursor.close(); } } String fileName = "tmp_"; String fileExt = null; int period; if (name == null || (period = name.lastIndexOf('.')) == -1) { String mimeType = cr.getType(uri); fileExt = "." + GeckoAppShell.getExtensionFromMimeType(mimeType); } else { fileExt = name.substring(period); fileName = name.substring(0, period); } File file = File.createTempFile(fileName, fileExt, sGREDir); FileOutputStream fos = new FileOutputStream(file); InputStream is = cr.openInputStream(uri); byte[] buf = new byte[4096]; int len = is.read(buf); while (len != -1) { fos.write(buf, 0, len); len = is.read(buf); } fos.close(); filePickerResult = file.getAbsolutePath(); } catch (Exception e) { Log.e(LOG_FILE_NAME, "showing file picker", e); } } try { mFilePickerResult.put(filePickerResult); } catch (InterruptedException e) { Log.i(LOG_FILE_NAME, "error returning file picker result", e); } }
public int[] readProgress() { int progress[] = new int[2]; try { DataInputStream in = new DataInputStream(new BufferedInputStream(new FileInputStream(resume_file))); progress[0] = in.readInt(); progress[1] = in.readInt(); in.close(); } catch (FileNotFoundException e) { Log.e(TAG, "readProgress file not found."); } catch (IOException e) { Log.e(TAG, e.getMessage()); } return progress; }
/** Called when the activity is first created */ @Override public void onCreate(Bundle savedInstanceState) { Log.d(TAG, "LoaderActivity created"); super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); setContentView(R.layout.content); // Instantiate custom adapter mAdapter = new LoaderAdapter(); // Handle listview and assign adapter mListView = (ListView) findViewById(R.id.content_list_view); mListView.setAdapter(mAdapter); mListView.setVisibility(View.GONE); mListView.setOnItemLongClickListener( new AdapterView.OnItemLongClickListener() { public boolean onItemLongClick(AdapterView parent, View view, int position, long id) { selectItem(position); return true; } }); mStatusLabel = (TextView) findViewById(R.id.content_status_label); mStatusLabel.setVisibility(View.VISIBLE); String userHash = NavigineApp.Settings.getString("user_hash", ""); if (userHash.length() == 0) showUserHashDialog(); else refreshMapList(); }
@Override public boolean onCreateOptionsMenu(Menu menu) { Log.d(TAG, "onCreateOptionsMenu"); getMenuInflater().inflate(R.menu.main, menu); this.menu = menu; return true; }
protected Object handleAutoRotateSaveState() { Log.i("" + this.getClass(), "asked to prep object to save state prior to autorotate"); ArrayList<EntityManager> l = new ArrayList<EntityManager>(); l.add(em); return l; }
/** Called when the activity is first created. */ public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); ArrayList<EntityManager> cachedData = (ArrayList<EntityManager>) getLastNonConfigurationInstance(); if (cachedData != null) { Log.i( getClass().getSimpleName(), "onCreate: ... found a LastNonConfigurationInstance, attempting to load it..."); em = (EntityManager) cachedData.get(0); /** We loaded a cached copy of the ES, so have to manually do this auto-setup */ MetaEntity.defaultEntityManager = em; } Log.i("" + this.getClass(), "activity onCreate"); }
@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); View view = new Banner(this); view.setOnClickListener(this); setContentView(view); Log.d(TAG_NAME, "Banner View activated successfully!"); }
@Override public void onPause() { Log.d(TAG, "LoaderActivity paused"); super.onPause(); mTimerTask.cancel(); mTimerTask = null; }
@Override public boolean onCreateOptionsMenu(Menu menu) { Log.d(TAG, "Create menu options"); MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.loader_menu, menu); menu.findItem(R.id.loader_menu_refresh_map_list).setVisible(mLoader < 0); return true; }
public void doRestart() { try { String action = "org.mozilla.gecko.restart"; Intent intent = new Intent(action); intent.setClassName(getPackageName(), getPackageName() + ".Restarter"); addEnvToIntent(intent); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_MULTIPLE_TASK); Log.i(LOG_FILE_NAME, intent.toString()); GeckoAppShell.killAnyZombies(); startActivity(intent); } catch (Exception e) { Log.i(LOG_FILE_NAME, "error doing restart", e); } finish(); // Give the restart process time to start before we die GeckoAppShell.waitForAnotherGeckoProc(); }
public synchronized void writeProgress(int current_file, int total_files) { try { DataOutputStream out = new DataOutputStream(new BufferedOutputStream(new FileOutputStream(resume_file, false))); out.writeInt(current_file); out.writeInt(total_files); out.flush(); out.close(); } catch (FileNotFoundException e) { e.printStackTrace(); Log.e(TAG, "writeProgress resume.txt not found."); } catch (IOException ex) { Log.e(TAG, "Unable to create resume.txt."); } }
private void updateLoader() { if (NavigineApp.Navigation == null) return; // Log.d(TAG, String.format(Locale.ENGLISH, "Update loader: %d", mLoader)); long timeNow = DateTimeUtils.currentTimeMillis(); if (mLoader < 0) return; int status = LocationLoader.checkLocationLoader(mLoader); if (status < 100) { if ((Math.abs(timeNow - mLoaderTime) > LOADER_TIMEOUT / 3 && status == 0) || (Math.abs(timeNow - mLoaderTime) > LOADER_TIMEOUT)) { mListView.setVisibility(View.GONE); mStatusLabel.setVisibility(View.VISIBLE); mStatusLabel.setText("Loading timeout!\nPlease, check your internet connection!"); Log.d(TAG, String.format(Locale.ENGLISH, "Load stopped on timeout!")); LocationLoader.stopLocationLoader(mLoader); mLoader = -1; } else { mListView.setVisibility(View.GONE); mStatusLabel.setVisibility(View.VISIBLE); mStatusLabel.setText(String.format(Locale.ENGLISH, "Loading content (%d%%)", status)); } } else { Log.d(TAG, String.format(Locale.ENGLISH, "Load finished with result: %d", status)); LocationLoader.stopLocationLoader(mLoader); mLoader = -1; if (status == 100) { parseMapsXml(); if (mInfoList.isEmpty()) { mListView.setVisibility(View.GONE); mStatusLabel.setVisibility(View.VISIBLE); mStatusLabel.setText("No locations available"); } else { mListView.setVisibility(View.VISIBLE); mStatusLabel.setVisibility(View.GONE); } } else { mListView.setVisibility(View.GONE); mStatusLabel.setVisibility(View.VISIBLE); mStatusLabel.setText("Error loading!\nPlease, check your ID!"); } } }
@Override protected void onStart() { super.onStart(); em = new EntityManager(); MetaEntity.defaultEntityManager = em; Game game = new Game(em); /** create the surface + thread */ SurfaceViewThePit surfaceView = new SurfaceViewThePit(this, game); RenderSystemSimpleDrawable renderSystem = new RenderSystemSimpleDrawable(em, surfaceView, game); MainRunThread runGameThread = new MainRunThread(this, em, surfaceView, renderSystem); runGameThread.loadAllCoreSubSystems(); // runGameThread.setGameResult( gameToStart ); SubsystemTouchHandler systemTh = new SubsystemTouchHandler(em); runGameThread.orderedSubSystems.addLast(systemTh); // MUST be before the Collision Subsystem TouchListenerPlayerMovement thv = new TouchListenerPlayerMovement(systemTh); SubsystemGhosts systemGhosts = new SubsystemGhosts(em, game); runGameThread.orderedSubSystems.addLast(systemGhosts); SubsystemMovementAndCollision systemCollision = new SubsystemMovementAndCollision(em, renderSystem); runGameThread.orderedSubSystems.addLast(systemCollision); SubsystemLighting systemLighting = new SubsystemLighting(em, game); runGameThread.orderedSubSystems.addLast(systemLighting); SubsystemTriggers systemTriggers = new SubsystemTriggers(this, em, game); runGameThread.orderedSubSystems.addLast(systemTriggers); surfaceView.setOnTouchListener(thv); surfaceView.thread = runGameThread; Log.i(getClass().getSimpleName(), "initialized thread and surface"); /** * Finally ... tell the game that the ES is now valid, it's ship reference is OK, and it can do * game-setup */ game.preSetupGame(); renderSystem.shiftCanvasToKeepPositionOnScreen( new CPosition( game.initialPlayerLocation.x, game.initialPlayerLocation.y, game.mazeCellWidth, game.mazeCellHeight)); // turn off the window's title bar requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow() .setFlags( WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(surfaceView); }
public String showFilePicker(String aMimeType) { Intent intent = new Intent(Intent.ACTION_GET_CONTENT); intent.addCategory(Intent.CATEGORY_OPENABLE); intent.setType(aMimeType); GeckoApp.this.startActivityForResult( Intent.createChooser(intent, getString(R.string.choose_file)), FILE_PICKER_REQUEST); String filePickerResult = ""; try { while (null == (filePickerResult = mFilePickerResult.poll(1, TimeUnit.MILLISECONDS))) { Log.i("GeckoApp", "processing events from showFilePicker "); GeckoAppShell.processNextNativeEvent(); } } catch (InterruptedException e) { Log.i(LOG_FILE_NAME, "showing file picker ", e); } return filePickerResult; }
@Override protected void onNewIntent(Intent intent) { if (checkLaunchState(LaunchState.GeckoExiting)) { // We're exiting and shouldn't try to do anything else just incase // we're hung for some reason we'll force the process to exit System.exit(0); return; } final String action = intent.getAction(); if (ACTION_DEBUG.equals(action) && checkAndSetLaunchState(LaunchState.Launching, LaunchState.WaitForDebugger)) { mMainHandler.postDelayed( new Runnable() { public void run() { Log.i(LOG_FILE_NAME, "Launching from debug intent after 5s wait"); setLaunchState(LaunchState.Launching); launch(null); } }, 1000 * 5 /* 5 seconds */); Log.i(LOG_FILE_NAME, "Intent : ACTION_DEBUG - waiting 5s before launching"); return; } if (checkLaunchState(LaunchState.WaitForDebugger) || launch(intent)) return; if (Intent.ACTION_MAIN.equals(action)) { Log.i(LOG_FILE_NAME, "Intent : ACTION_MAIN"); GeckoAppShell.sendEventToGecko(new GeckoEvent("")); } else if (Intent.ACTION_VIEW.equals(action)) { String uri = intent.getDataString(); GeckoAppShell.sendEventToGecko(new GeckoEvent(uri)); Log.i(LOG_FILE_NAME, "onNewIntent: " + uri); } else if (ACTION_WEBAPP.equals(action)) { String uri = intent.getStringExtra("args"); GeckoAppShell.sendEventToGecko(new GeckoEvent(uri)); Log.i(LOG_FILE_NAME, "Intent : WEBAPP - " + uri); } else if (ACTION_BOOKMARK.equals(action)) { String args = intent.getStringExtra("args"); GeckoAppShell.sendEventToGecko(new GeckoEvent(args)); Log.i(LOG_FILE_NAME, "Intent : BOOKMARK - " + args); } }
private String readUpdateStatus(File statusFile) { String status = ""; try { BufferedReader reader = new BufferedReader(new FileReader(statusFile)); status = reader.readLine(); reader.close(); } catch (Exception e) { Log.i(LOG_FILE_NAME, "error reading update status", e); } return status; }
@Override public void onItemClick(AdapterView adapterView, View view, int position, long id) { Log.d(TAG, "onItemClick: position: " + position + ", id: " + id); String item = listAdapter.getItem(position).trim(); if (item.endsWith(" =")) { item = item.substring(0, item.length() - 2); } if (!item.startsWith("no result")) { inputView.append(item); } }
/** Simulate Thread.stop, because Sun refuses to. */ public void waitUntilStoppedBecauseAndroidHasABrokenJVM() { if (myThread != null) { Log.i( getClass().getSimpleName(), "Thread is running, but a stop is required; starting the busy-wait for thread to die (thanks for nothing, Android!)..."); boolean retry = true; myThread = null; while (retry) { try { join(); retry = false; } catch (InterruptedException e) { Log.i(getClass().getSimpleName(), "I'm busy-waiting for the main render thread to die.."); } } Log.i( getClass().getSimpleName(), "Thread is NOW DEAD, according to the Android JVM (thanks for nothing, Android!)..."); } }
@Override public boolean onOptionsItemSelected(MenuItem item) { Log.d(TAG, "onOptionsItemSelected: itemId: " + item.getItemId()); switch (item.getItemId()) { case R.id.menu_clear: Log.d(TAG, "onOptionsItemSelected: menu_clear"); clear(); break; case R.id.menu_help: Log.d(TAG, "onOptionsItemSelected: menu_help"); startActivity(new Intent(Intent.ACTION_VIEW, null, this, Help.class)); break; case R.id.menu_about: Log.d(TAG, "onOptionsItemSelected: menu_about"); Messages.about(this); break; } return super.onOptionsItemSelected(item); }
private void refreshMapList() { if (mLoader >= 0) return; String userHash = NavigineApp.Settings.getString("user_hash", ""); if (userHash.length() == 0) return; // Starting new loader String fileName = LocationLoader.getLocationDir(NavigineApp.AppContext, null) + "/maps.xml"; new File(fileName).delete(); mLoader = LocationLoader.startLocationLoader(null, fileName, true); mLoaderTime = DateTimeUtils.currentTimeMillis(); mInfoList = new ArrayList<LocationInfo>(); Log.d(TAG, String.format(Locale.ENGLISH, "Location loader started: %d", mLoader)); }
@Override public boolean onEditorAction(TextView textView, int actionId, KeyEvent keyEvent) { Log.d(TAG, "onEditorAction: actionId: " + actionId + ", keyEvent: " + keyEvent); if ((actionId == EditorInfo.IME_ACTION_DONE) || ((keyEvent != null) && (keyEvent.getKeyCode() == KeyEvent.KEYCODE_ENTER))) { Log.d(TAG, "onEditorAction: IME_ACTION_DONE || KEYCODE_ENTER"); String input = textView.getText().toString().trim(); if (input.length() > 0) { String result = ""; try { result += calculator.calculate(input); } catch (Exception e) { result = "no result (" + e.getMessage() + ")"; } if (listAdapter.getCount() > 0) { listAdapter.add(""); } listAdapter.add(input + " ="); if (input.indexOf("@") > -1) { listAdapter.add(calculator.getEquation() + " ="); } listAdapter.add(result); listAdapter.notifyDataSetChanged(); inputView.endBatchEdit(); inputView.setText(""); hideKeyboard(); } } return false; }
@Override public void onResume() { Log.d(TAG, "LoaderActivity resumed"); super.onResume(); // Starting interface updates mTimerTask = new TimerTask() { @Override public void run() { mHandler.post(mRunnable); } }; mTimer.schedule(mTimerTask, 100, 100); }
public static String slurp(Reader r) { StringBuilder rval = new StringBuilder(); try { char[] buffer = new char[4 << 10]; while (true) { int n = r.read(buffer, 0, buffer.length); if (n < 1) break; rval.append(buffer, 0, n); } } catch (IOException e) { Log.e(LOG_TAG, "malfunction slurping stream", e); } return rval.toString(); }
@Override public void onResume() { Log.i(LOG_FILE_NAME, "resume"); if (checkLaunchState(LaunchState.GeckoRunning)) GeckoAppShell.onResume(); // After an onPause, the activity is back in the foreground. // Undo whatever we did in onPause. super.onResume(); // Just in case. Normally we start in onNewIntent if (checkLaunchState(LaunchState.PreLaunch) || checkLaunchState(LaunchState.Launching)) onNewIntent(getIntent()); registerReceiver(mConnectivityReceiver, mConnectivityFilter); GeckoNetworkManager.getInstance().start(); GeckoScreenOrientationListener.getInstance().start(); }
private void checkAndLaunchUpdate() { Log.i(LOG_FILE_NAME, "Checking for an update"); int statusCode = 8; // UNEXPECTED_ERROR File baseUpdateDir = null; if (Build.VERSION.SDK_INT >= 8) baseUpdateDir = getExternalFilesDir(Environment.DIRECTORY_DOWNLOADS); else baseUpdateDir = new File(Environment.getExternalStorageDirectory().getPath(), "download"); File updateDir = new File(new File(baseUpdateDir, "updates"), "0"); File updateFile = new File(updateDir, "update.apk"); File statusFile = new File(updateDir, "update.status"); if (!statusFile.exists() || !readUpdateStatus(statusFile).equals("pending")) return; if (!updateFile.exists()) return; Log.i(LOG_FILE_NAME, "Update is available!"); // Launch APK File updateFileToRun = new File(updateDir, getPackageName() + "-update.apk"); try { if (updateFile.renameTo(updateFileToRun)) { String amCmd = "/system/bin/am start -a android.intent.action.VIEW " + "-n com.android.packageinstaller/.PackageInstallerActivity -d file://" + updateFileToRun.getPath(); Log.i(LOG_FILE_NAME, amCmd); Runtime.getRuntime().exec(amCmd); statusCode = 0; // OK } else { Log.i(LOG_FILE_NAME, "Cannot rename the update file!"); statusCode = 7; // WRITE_ERROR } } catch (Exception e) { Log.i(LOG_FILE_NAME, "error launching installer to update", e); } // Update the status file String status = statusCode == 0 ? "succeeded\n" : "failed: " + statusCode + "\n"; OutputStream outStream; try { byte[] buf = status.getBytes("UTF-8"); outStream = new FileOutputStream(statusFile); outStream.write(buf, 0, buf.length); outStream.close(); } catch (Exception e) { Log.i(LOG_FILE_NAME, "error writing status file", e); } if (statusCode == 0) System.exit(0); }
@Override public void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); Thread.currentThread().setUncaughtExceptionHandler(this); setContentView(R.layout.main); inputView = (EditText) findViewById(R.id.input_view); inputView.setOnEditorActionListener(this); listAdapter = new ArrayAdapter<String>(this, R.layout.row); listAdapter.setNotifyOnChange(true); resultsView = (ListView) this.findViewById(R.id.results_view); resultsView.setAdapter(listAdapter); resultsView.setOnItemClickListener(this); }