#!/usr/bin/env python2.5

import cgi
import os
import shutil
import sys
import sqlite3

SCREENS = 5
COLUMNS = 4
ROWS = 4
CELL_SIZE = 110

DIR = "db_files"
AUTO_FILE = "launcher.db"

APPLICATION_COMPONENTS = [
  "com.android.calculator2/com.android.calculator2.Calculator",
  "com.android.providers.downloads.ui/com.android.providers.downloads.ui.DownloadList",
  "com.android.settings/com.android.settings.Settings",
  "com.android.mms/com.android.mms.ui.ConversationList",
  "com.android.contacts/com.android.contacts.activities.PeopleActivity",
  "com.android.dialer/com.android.dialer.DialtactsActivity"
]

def usage():
  print "usage: fill_screens.py -- fills up the launcher db"


def make_dir():
  shutil.rmtree(DIR, True)
  os.makedirs(DIR)

def pull_file(fn):
  print "pull_file: " + fn
  rv = os.system("adb pull"
    + " /data/data/com.android.launcher/databases/launcher.db"
    + " " + fn);
  if rv != 0:
    print "adb pull failed"
    sys.exit(1)

def push_file(fn):
  print "push_file: " + fn
  rv = os.system("adb push"
    + " " + fn
    + " /data/data/com.android.launcher/databases/launcher.db")
  if rv != 0:
    print "adb push failed"
    sys.exit(1)

def process_file(fn):
  print "process_file: " + fn
  conn = sqlite3.connect(fn)
  c = conn.cursor()
  c.execute("DELETE FROM favorites")

  intentFormat = "#Intent;action=android.intent.action.MAIN;category=android.intent.category.LAUNCHER;launchFlags=0x10200000;component=%s;end"

  id = 0;
  for s in range(SCREENS):
    for x in range(ROWS):
      for y in range(COLUMNS):
        id += 1
        insert = "INSERT into favorites (_id, title, intent, container, screen, cellX, cellY, spanX, spanY, itemType, appWidgetId, iconType) VALUES (%d, '%s', '%s', %d, %d, %d, %d, %d, %d, %d, %d, %d)"
        insert = insert % (id, "title", "", -100, s, x, y, 1, 1, 2, -1, 0)
        c.execute(insert)
        folder_id = id

        for z in range(15):
          id += 1
          intent = intentFormat % (APPLICATION_COMPONENTS[id % len(APPLICATION_COMPONENTS)])
          insert = "INSERT into favorites (_id, title, intent, container, screen, cellX, cellY, spanX, spanY, itemType, appWidgetId, iconType) VALUES (%d, '%s', '%s', %d, %d, %d, %d, %d, %d, %d, %d, %d)"
          insert = insert % (id, "title", intent, folder_id, 0, 0, 0, 1, 1, 0, -1, 0)
          c.execute(insert)

  conn.commit()
  c.close()

def main(argv):
  if len(argv) == 1:
    make_dir()
    pull_file(AUTO_FILE)
    process_file(AUTO_FILE)
    push_file(AUTO_FILE)
  else:
    usage()

if __name__=="__main__":
  main(sys.argv)