#! /system/bin/sh
#
#UserApps backup and restore for Android
#by chromepencil
#2010/03/05 v0.35
#
#include Fix_Permissions (thanks to Cyanogen)
#include FixApps (thanks to wesgarner)
#
#thanks to hitobashirors and you!
#
## Settings ##

MYFOLDER="backapps"
SDCARD="/sdcard"
A2SD="0"

###############

ECHO="busybox echo"
GREP="busybox grep"
EGREP="busybox egrep"
CAT="busybox cat"
CHOWN="busybox chown"
CHMOD="busybox chmod"
MOUNT="busybox mount"
UMOUNT="busybox umount"
CUT="busybox cut"
FIND="busybox find"
LS="busybox ls"
TR="busybox tr"
TEE="busybox tee"
TEST="busybox test"
SED="busybox sed"
RM="busybox rm"
WC="busybox wc"
EXPR="busybox expr"
DATE="busybox date"
CP="busybox cp"
MKDIR="busybox mkdir"

FP_STARTTIME=$( $DATE +"%m-%d-%Y %H:%M:%S" )
FP_STARTEPOCH=$( $DATE +%s )
NOWTIME=$( $DATE +"%y%m%d%H%M" )

## fix_permissionsここから

fp_usage()
{
	$ECHO "Usage $0 [OPTIONS] [APK_PATH]"
	$ECHO "      -d         turn on debug"
	$ECHO "      -f         fix only package APK_PATH"	
	$ECHO "      -l         disable logging for this run (faster)"
	$ECHO "      -r         remove stale data directories"
	$ECHO "                 of uninstalled packages while fixing permissions"
	$ECHO "      -s         simulate only"
	$ECHO "      -u         check only non-system directories"
	$ECHO "      -v         disable verbosity for this run (less output)"
	$ECHO "      -V         print version"
	$ECHO "      -h         this help"
}

fp_parseargs()
{
	# Parse options
	while $TEST $# -ne 0; do
		case "$1" in
			-d)
				DEBUG=1
			;;
			-f)
				if $TEST $# -lt 2; then
					$ECHO "$0: missing argument for option $1"
					exit 1
				else
					if $TEST $( $ECHO $2 | $CUT -c1 ) != "-"; then
						ONLY_ONE=$2
						shift;
					else
						$ECHO "$0: missing argument for option $1"
						exit 1
					fi
				fi
			;;
			-r)
				REMOVE=1
			;;
			-s)
				SIMULATE=1
			;;
			-l)
				if $TEST $LOGGING -eq 0; then
					LOGGING=1
				else
					LOGGING=0
				fi
			;;
			-v)
				if $TEST $VERBOSE -eq 0; then
					VERBOSE=1
				else
					VERBOSE=0
				fi
			;;
			-u)
				NOSYSTEM=1
			;;
			-V)
				$ECHO "$0 $VERSION"
				exit 0
			;;
			-h)
				fp_usage
				exit 0
			;;
			-*)
				$ECHO "$0: unknown option $1"
				$ECHO
				fp_usage
				exit 1
			;;
		esac
		shift;
	done
}

fp_print()
{
	MSG=$@
	if $TEST $LOGGING -eq 1; then
		$ECHO $MSG | $TEE -a $LOG_FILE
	else
		$ECHO $MSG
	fi
}

fp_start()
{
	if $TEST $SIMULATE -eq 0 ; then
		if $TEST $( $GREP -c " /system " "/proc/mounts" ) -ne 0; then
			DEVICE=$( $GREP " /system " "/proc/mounts" | $CUT -d ' ' -f1 )
			if $TEST $DEBUG -eq 1; then
				fp_print "/system mounted on $DEVICE"
			fi
			if $TEST $( $GREP " /system " "/proc/mounts" | $GREP -c " ro " ) -ne 0; then
				$MOUNT -o remount,rw $DEVICE /system
				SYSREMOUNT=1
			fi
		else
			$MOUNT /system > /dev/null 2>&1
			SYSMOUNT=1
		fi
	
		if $TEST $( $GREP -c " /data " "/proc/mounts" ) -eq 0; then
			$MOUNT /data > /dev/null 2>&1
			DATAMOUNT=1
		fi
	
		if $TEST -e /dev/block/mmcblk0p2 && $TEST $( $GREP -c " /system/sd " "/proc/mounts" ) -eq 0; then
				$MOUNT /system/sd > /dev/null 2>&1
			SYSSDMOUNT=1
		fi
	fi	
	if $TEST $( $MOUNT | $GREP -c ${SDCARD} ) -eq 0; then
		LOG_FILE="/data/fix_permissions.log"
	else
		LOG_FILE="${SDCARD}/fix_permissions.log"
	fi
	if $TEST ! -e "$LOG_FILE"; then
		> $LOG_FILE
	fi
}

fp_chown_uid()
{
	FP_OLDUID=$1
	FP_UID=$2
	FP_FILE=$3
	
	#if user ownership doesn't equal then change them
	if $TEST "$FP_OLDUID" != "$FP_UID"; then
		if $TEST $VERBOSE -ne 0; then
			fp_print "$UID_MSG $FP_FILE from '$FP_OLDUID' to '$FP_UID'"
		fi
		if $TEST $SIMULATE -eq 0; then
			$CHOWN $FP_UID "$FP_FILE"
		fi
	fi
}

fp_chown_gid()
{
	FP_OLDGID=$1
	FP_GID=$2
	FP_FILE=$3
	
	#if group ownership doesn't equal then change them
	if $TEST "$FP_OLDGID" != "$FP_GID"; then
		if $TEST $VERBOSE -ne 0; then
			fp_print "$GID_MSG $FP_FILE from '$FP_OLDGID' to '$FP_GID'"
		fi
		if $TEST $SIMULATE -eq 0; then
			$CHOWN :$FP_GID "$FP_FILE"
		fi
	fi
}

fp_chmod()
{
	FP_OLDPER=$1
	FP_OLDPER=$( $ECHO $FP_OLDPER | cut -c2-10 )
	FP_PERSTR=$2
	FP_PERNUM=$3
	FP_FILE=$4
	
	#if the permissions are not equal
	if $TEST "$FP_OLDPER" != "$FP_PERSTR"; then
		if $TEST $VERBOSE -ne 0; then
			fp_print "$PERM_MSG $FP_FILE from '$FP_OLDPER' to '$FP_PERSTR' ($FP_PERNUM)"
		fi
		#change the permissions
		if $TEST $SIMULATE -eq 0; then	
			$CHMOD $FP_PERNUM "$FP_FILE"
		fi
	fi
}
  
fp_all()
{
	FP_NUMS=$( $CAT ${PACX} | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | $WC -l )
	I=0
	$CAT ${PACX} | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | while read all_line; do
		I=$( $EXPR $I + 1 )
		fp_package "$all_line" $I $FP_NUMS
	done
}

fp_single()
{
	FP_SFOUND=$( $CAT ${PACX} | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | $GREP -i $ONLY_ONE | wc -l )
	if $TEST $FP_SFOUND -gt 1; then
		fp_print "Cannot perform single operation on $FP_SFOUND matched package(s)."
	elif $TEST $FP_SFOUND = "" -o $FP_SFOUND -eq 0; then
		fp_print "Could not find the package you specified in the packages.xml file."
	else
		FP_SPKG=$( $CAT ${PACX} | $EGREP "^<package.*serId" | $GREP -v framework-res.apk | $GREP -v com.htc.resources.apk | $GREP -i $ONLY_ONE )
		fp_package "${FP_SPKG}" 1 1
	fi
}

fp_package()
{
	pkgline=$1
	curnum=$2
	endnum=$3
	CODEPATH=$( $ECHO $pkgline | $SED 's%.* codePath="\(.*\)".*%\1%' |  $CUT -d '"' -f1 )
	PACKAGE=$( $ECHO $pkgline | $SED 's%.* name="\(.*\)".*%\1%' | $CUT -d '"' -f1 )
	UID=$( $ECHO $pkgline | $SED 's%.*serId="\(.*\)".*%\1%' |  $CUT -d '"' -f1 )
	GID=$UID
	APPDIR=$( $ECHO $CODEPATH | $SED 's%^\(.*\)/.*%\1%' )
	APK=$( $ECHO $CODEPATH | $SED 's%^.*/\(.*\..*\)$%\1%' )
	
	#debug
	if $TEST $DEBUG -eq 1; then
		fp_print "CODEPATH: $CODEPATH APPDIR: $APPDIR APK:$APK UID/GID:$UID:$GID"
	fi
	
	#check for existence of apk
	if $TEST -e $CODEPATH;  then
		fp_print "Processing ($curnum of $endnum): $PACKAGE..."
		
		#lets get existing permissions of CODEPATH
		OLD_UGD=$( $LS -ln "$CODEPATH" )
		OLD_PER=$( $ECHO $OLD_UGD | $CUT -d ' ' -f1 )
		OLD_UID=$( $ECHO $OLD_UGD | $CUT -d ' ' -f3 )
		OLD_GID=$( $ECHO $OLD_UGD | $CUT -d ' ' -f4 )
		
		#apk source dirs
		if $TEST "$APPDIR" = "/system/app"; then
			#skip system apps if set
			if $TEST "$NOSYSTEM" = "1"; then
				fp_print "***SKIPPING SYSTEM APP ($PACKAGE)!"
				return
			fi
			fp_chown_uid $OLD_UID 0 "$CODEPATH"
			fp_chown_gid $OLD_GID 0 "$CODEPATH"
			fp_chmod $OLD_PER "rw-r--r--" 644 "$CODEPATH"
		elif $TEST "$APPDIR" = "${DATF}/app"; then
			fp_chown_uid $OLD_UID 1000 "$CODEPATH"
			fp_chown_gid $OLD_GID 1000 "$CODEPATH"
			fp_chmod $OLD_PER "rw-r--r--" 644 "$CODEPATH"
		elif $TEST "$APPDIR" = "${DATF}/app-private"; then
			fp_chown_uid $OLD_UID 1000 "$CODEPATH"
			fp_chown_gid $OLD_GID $GID "$CODEPATH"
			fp_chmod $OLD_PER "rw-r-----" 640 "$CODEPATH"
		fi
	else
		fp_print "$CODEPATH does not exist ($curnum of $endnum). Reinstall..."
		if $TEST $REMOVE -eq 1; then
			if $TEST -d ${DATF}/data/$PACKAGE ; then
				fp_print "Removing stale dir ${DATF}/data/$PACKAGE"
				if $TEST $SIMULATE -eq 0 ; then
					$RM -R ${DATF}/data/$PACKAGE
				fi
			fi
		fi
	fi
		
	#the data/data for the package
	if $TEST -d "${DATF}/data/$PACKAGE"; then   
		#find all directories in ${DATF}/data/$PACKAGE
		$FIND ${DATF}/data/$PACKAGE -type d -exec $LS -ldn {} \; | while read dataline; do
			#get existing permissions of that directory
			OLD_PER=$( $ECHO $dataline | $CUT -d ' ' -f1 )
			OLD_UID=$( $ECHO $dataline | $CUT -d ' ' -f3 )
			OLD_GID=$( $ECHO $dataline | $CUT -d ' ' -f4 )
			FILEDIR=$( $ECHO $dataline | $CUT -d ' ' -f9 )
			FOURDIR=$( $ECHO $FILEDIR | $CUT -d '/' -f5 )
			
			#set defaults for iteration
			ISLIB=0
			REVPERM=755
			REVPSTR="rwxr-xr-x"
			REVUID=$UID
			REVGID=$GID
				
			if $TEST "$FOURDIR" = ""; then
				#package directory, perms:755 owner:$UID:$GID
				fp_chmod $OLD_PER "rwxr-xr-x" 755 "$FILEDIR"
			elif $TEST "$FOURDIR" = "lib"; then
				#lib directory, perms:755 owner:1000:1000
				#lib files, perms:755 owner:1000:1000
				ISLIB=1
				REVPERM=755
				REVPSTR="rwxr-xr-x"
				REVUID=1000
				REVGID=1000
				fp_chmod $OLD_PER "rwxr-xr-x" 755 "$FILEDIR"
			elif $TEST "$FOURDIR" = "shared_prefs"; then
				#shared_prefs directories, perms:771 owner:$UID:$GID
				#shared_prefs files, perms:660 owner:$UID:$GID
				REVPERM=660
				REVPSTR="rw-rw----"
				fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR"
			elif $TEST "$FOURDIR" = "databases"; then
				#databases directories, perms:771 owner:$UID:$GID
				#databases files, perms:660 owner:$UID:$GID
				REVPERM=660
				REVPSTR="rw-rw----"
				fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR"
			elif $TEST "$FOURDIR" = "cache"; then
				#cache directories, perms:771 owner:$UID:$GID
				#cache files, perms:600 owner:$UID:GID
				REVPERM=600
				REVPSTR="rw-------"
				fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR"
			else
				#other directories, perms:771 owner:$UID:$GID     
				REVPERM=771
				REVPSTR="rwxrwx--x"
				fp_chmod $OLD_PER "rwxrwx--x" 771 "$FILEDIR"
			fi
			
			#change ownership of directories matched
			if $TEST "$ISLIB" = "1"; then
				fp_chown_uid $OLD_UID 1000 "$FILEDIR"
				fp_chown_gid $OLD_GID 1000 "$FILEDIR"
			else
				fp_chown_uid $OLD_UID $UID "$FILEDIR"
				fp_chown_gid $OLD_GID $GID "$FILEDIR"
			fi
			
			#if any files exist in directory with improper permissions reset them
			$FIND $FILEDIR -type f -maxdepth 1 ! -perm $REVPERM -exec $LS -ln {} \; | while read subline; do
				OLD_PER=$( $ECHO $subline | $CUT -d ' ' -f1 )
				SUBFILE=$( $ECHO $subline | $CUT -d ' ' -f9 )
				fp_chmod $OLD_PER $REVPSTR $REVPERM "$SUBFILE"
			done
			
			#if any files exist in directory with improper user reset them
			$FIND $FILEDIR -type f -maxdepth 1 ! -user $REVUID -exec $LS -ln {} \; | while read subline; do
				OLD_UID=$( $ECHO $subline | $CUT -d ' ' -f3 )
				SUBFILE=$( $ECHO $subline | $CUT -d ' ' -f9 )
				fp_chown_uid $OLD_UID $REVUID "$SUBFILE"
			done
			
			#if any files exist in directory with improper group reset them
			$FIND $FILEDIR -type f -maxdepth 1 ! -group $REVGID -exec $LS -ln {} \; | while read subline; do
				OLD_GID=$( $ECHO $subline | $CUT -d ' ' -f4 )
				SUBFILE=$( $ECHO $subline | $CUT -d ' ' -f9 )
				fp_chown_gid $OLD_GID $REVGID "$SUBFILE"
			done
		done
	fi
}

date_diff()
{
	if $TEST $# -ne 2; then
		FP_DDM="E"
		FP_DDS="E"
		return
	fi
	FP_DDD=$( $EXPR $2 - $1 )
	FP_DDM=$( $EXPR $FP_DDD / 60 )
	FP_DDS=$( $EXPR $FP_DDD % 60 )
}

fp_end()
{
	if $TEST $SYSREMOUNT -eq 1; then
		$MOUNT -o remount,ro $DEVICE /system > /dev/null 2>&1
	fi
	
	if $TEST $SYSSDMOUNT -eq 1; then
		$UMOUNT /system/sd > /dev/null 2>&1
	fi
	
	if $TEST $SYSMOUNT -eq 1; then
		$UMOUNT /system > /dev/null 2>&1
	fi
	
	if $TEST $DATAMOUNT -eq 1; then
		$UMOUNT /data > /dev/null 2>&1
	fi
	
	FP_ENDTIME=$( $DATE +"%m-%d-%Y %H:%M:%S" )
	FP_ENDEPOCH=$( $DATE +%s )
	
	date_diff $FP_STARTEPOCH $FP_ENDEPOCH
	
}

fp_end2()
{
	FP_ENDTIME=$( $DATE +"%m-%d-%Y %H:%M:%S" )
	FP_ENDEPOCH=$( $DATE +%s )
	
	date_diff $FP_STARTEPOCH $FP_ENDEPOCH
}

fixPERM()
{
# Defaults
DEBUG=0 # Debug off by default
LOGGING=0 # Logging on by default
VERBOSE=1 # Verbose on by default

# Messages
UID_MSG="Changing user ownership for:"
GID_MSG="Changing group ownership for:"
PERM_MSG="Changing permissions for:"

# Initialise vars
CODEPATH=""
UID=""
GID=""
PACKAGE=""
REMOVE=0
NOSYSTEM=0
ONLY_ONE=""
SIMULATE=0
SYSREMOUNT=0
SYSMOUNT=0
DATAMOUNT=0
SYSSDMOUNT=0

VERSION="2.03"

#MAIN SCRIPT

fp_parseargs $@
fp_start
if $TEST "$ONLY_ONE" != "" -a "$ONLY_ONE" != "0" ; then
	fp_single "$ONLY_ONE"
else 
	fp_all
fi
fp_end
}

## fix_permissionsここまで

print_usage()
{
$ECHO ""
$ECHO "Usage: sh $0 OPTIONS" [NAME]
$ECHO ""
$ECHO "Options are:"
$ECHO "       -s --save [NAME]   save userapps"
$ECHO "       -r --restore       restore userapps"
$ECHO "       -l --list          view list"
$ECHO "       -d --delete        delete backup"
$ECHO "       -f --fix           use FixApps"
$ECHO ""
}

fixPERM2()
{
UID=""
GID=""
PACKAGE="$1"

	if [ -d ${DATF}/data/$PACKAGE ]; then
		UID=$($CAT ${PACX} | $GREP "^<package" | $GREP serId | $GREP $PACKAGE | $CUT -d '"' -f 12)
		GID=$UID
		$CHOWN $UID:$GID ${DATF}/data/$PACKAGE/*.*
		$CHMOD 644 ${DATF}/data/$PACKAGE/*.*
	fi
}

fixPERM3()
{
UID=""
GID=""
PACKAGE="$1"

	if [ -d ${DATF}/data/$PACKAGE ]; then
		UID=$($CAT ${PACX} | $GREP "^<package" | $GREP serId | $GREP $PACKAGE | $CUT -d '"' -f 12)
		GID=$UID
		$CHOWN $UID:$GID ${DATF}/data/$PACKAGE/databases/*.*
		$CHMOD 644 ${DATF}/data/$PACKAGE/databases/*.*
	fi
}

fixAPPS()
{
$ECHO "--- Reinstalling Applications"
	for apk in /cache/app/*.apk ; do
		pm install -r $apk
	done
	for apk in /cache/app-private/*.apk ; do
		pm install -l -r $apk
	done

$RM -r /cache/app
$RM -r /cache/app-private
}

fixAPPS2()
{
$ECHO "--- Reinstalling Applications"
	for apk in ${DATF}/app/*.apk ; do
		pm install -r $apk
	done
	for apk in ${DATF}/app-private/*.apk ; do
		pm install -l -r $apk
	done
}

fixEXT()
{
$ECHO "--- Fix ExPermissions"
fixPERM2 com.adamrocker.android.input.simeji
fixPERM2 com.owplus.ime.openwnnplus
fixPERM2 com.pm9.flickwnn
}

chooseROM()
{
	listr=`ls "${myhome}"`
	j=1
	for i in $listr
	do
		$ECHO "${j}. ${i}"
		j=$((j+1))
	done
	count=$((j-1))
	$ECHO -n "Choose a Backapps (type in the number and press enter)..."
	read response
	if [ $response -gt $count -o $response -lt 1 ]; then
		$ECHO ""
		$ECHO "Out of range input. You chose $response."
		$ECHO "Choose a number in range next time...;) BYE."
		$ECHO ""
		exit 0
	fi
	j=1
	for i in $listr
	do
		if [ $j -eq $response ]; then
			romname=$i
			break;
		fi
		j=$((j+1))
	done
}

zipAA()
{
echo "--- ZipAligning Restore apps"
    for apk in ${rompath}/app/*.apk ; do
		echo ZipAligning $(basename $apk)
		zipalign -f 4 $apk /cache/app/$(basename $apk)
	done
    for apk in ${rompath}/app-private/*.apk ; do
		echo ZipAligning $(basename $apk)
		zipalign -f 4 $apk /cache/app-private/$(basename $apk)
	done
}

## MAINここから
PACX="/data/system/packages.xml"
myhome="${SDCARD}/${MYFOLDER}"
rompath=""

	if [ "$A2SD" -eq "1" ]; then
		DATF="/system/sd"
		else
		DATF="/data"
	fi

	if [ ! -d ${myhome} ]; then
		$MKDIR ${myhome}
	fi

case "$1" in
-s|--save)

	if [ $# -eq 1 ]; then
		romname="SAVE${NOWTIME}"
		rompath="${myhome}/${romname}"
	else
		romname="$2"
		rompath="${myhome}/${romname}"
	fi
	
	if [ -d ${rompath} ]; then
		$ECHO "--- The same name exists!"
		exit 1
	fi

$ECHO ""
$ECHO -n "BackApps ${romname}, proceed? (y/n) "
read response
	if [ "$response" != "y" ]; then
		$ECHO ""
		$ECHO "Not backapps ${romname}..."
		$ECHO ""
		exit 0
	fi

$MKDIR ${rompath}

$ECHO "--- Backup Applications"
$ECHO "started at $FP_STARTTIME"

		$CP -r ${DATF}/app ${rompath}
		$CP -r ${DATF}/app-private ${rompath}
		$ECHO "dammy" > ${rompath}/app/dammy
		$ECHO "dammy" > ${rompath}/app-private/dammy

$CP -r ${DATF}/data ${rompath}

	if [ -d /data/data/com.android.launcher ]; then
		$CP /data/data/com.android.launcher/databases/launcher.db ${rompath}
	fi
	if [ -d /data/data/com.android.launcher2 ]; then
		$CP /data/data/com.android.launcher2/databases/launcher.db ${rompath}/launcher2.db
	fi

$CP /data/misc/wifi/wpa_supplicant.conf ${rompath}
$CP /system/etc/apns-conf.xml ${rompath}
$CP /system/etc/gps.conf ${rompath}
$CP /data/data/com.android.browser/databases/browser.db ${rompath}

$ECHO "--- Remove Google Experience"
$RM -r ${rompath}/data/com.android.*
$RM -r ${rompath}/data/com.google.android.*
$RM -r ${rompath}/data/com.htc.*
$RM -r ${rompath}/data/org.zenthought.android.su

fp_end2
$ECHO "--- Done!"
$ECHO "ended at $FP_ENDTIME (Runtime:${FP_DDM}m${FP_DDS}s)"
;;
-r|--restore)

chooseROM
rompath="${myhome}/${romname}"

$ECHO ""
$ECHO -n "Restore ${romname}, proceed? (y/n) "
read response

	if [ "$response" != "y" ]; then
		$ECHO ""
		$ECHO "Not Restore ${romname}..."
		$ECHO ""
		exit 0
	fi

	$ECHO "started at $FP_STARTTIME"

	f=0
	if [ -e /system/bin/zipalign ]; then
	$ECHO "find ZipAlign..."
	f=1
	fi

	$MKDIR /cache/app
	$MKDIR /cache/app-private

	if [ "${f}" -eq "1" ]; then
		zipAA
	else
		$ECHO "--- Restore ${romname}"
		$CP ${rompath}/app/* /cache/app
		$CP ${rompath}/app-private/* /cache/app-private
	fi

fixAPPS

$CP -R ${rompath}/data/* ${DATF}/data

fixPERM
fixEXT
fp_end2

$ECHO "--- Done!"
$ECHO "ended at $FP_ENDTIME (Runtime:${FP_DDM}m${FP_DDS}s)"
$ECHO ""

	if [ -e ${rompath}/wpa_supplicant.conf ]; then
		$ECHO -n "find wifi settings. restore? (y/n) "
		read response
			if [ "$response" = "y" ]; then
				$CP ${rompath}/wpa_supplicant.conf /data/misc/wifi
				$CHMOD 660 /data/misc/wifi/wpa_supplicant.conf
				$CHOWN 1000:1010 /data/misc/wifi/wpa_supplicant.conf
			fi
	fi

	if [ -e ${rompath}/browser.db ]; then
		$ECHO -n "find browser settings. restore? (y/n) "
		read response
			if [ "$response" = "y" ]; then
				if [ ! -d /data/data/com.android.browser/databases ]; then
					$MKDIR /data/data/com.android.browser/databases
				fi
				
				$CP ${rompath}/browser.db /data/data/com.android.browser/databases
				$CHMOD 644 /data/data/com.android.browser/databases/browser.db
				fixPERM3 com.android.browser
			fi
	fi

UID=""
GID=""

	if [ -e ${rompath}/launcher.db ]; then
		$ECHO -n "find Launcher settings."
		$ECHO -n "restore? use same rom only! (y/n)"
		read response
			if [ "$response" = "y" ]; then
				if [ ! -d /data/data/com.android.launcher/databases ]; then
					$MKDIR /data/data/com.android.launcher/databases
				fi
				
				$CP ${rompath}/launcher.db /data/data/com.android.launcher/databases
				fixPERM3 com.android.launcher
				
				$ECHO "--- Done!"
				$ECHO -n "reboot system ok? (y/n) "
				read response
					if [ "$response" = "y" ]; then
						reboot
						exit 0
					fi
			fi
	elif [ -e ${rompath}/launcher2.db ]; then
		$ECHO -n "find Launcher settings."
		$ECHO -n "restore? use same rom only! (y/n)"
		read response
			if [ "$response" = "y" ]; then
				if [ ! -d /data/data/com.android.launcher2/databases ]; then
					$MKDIR /data/data/com.android.launcher2/databases
				fi
				
				$CP ${rompath}/launcher2.db /data/data/com.android.launcher2/databases/launcher.db
				fixPERM3 com.android.launcher2
				
				$ECHO "--- Done!"
				$ECHO -n "reboot system ok? (y/n) "
				read response
					if [ "$response" = "y" ]; then
						reboot
						exit 0
					fi
			fi
	fi

;;
-d|--delete)
chooseROM
rompath="${myhome}/${romname}"

$ECHO ""
$ECHO -n "Deleting ${romname}, proceed? (y/n) "
read response

	if [ "$response" != "y" ]; then
		$ECHO ""
		$ECHO "Not deleting ${romname}..."
		$ECHO ""
		exit 0
	fi
	
$ECHO "--- Deleting ${romname}"
$RM -r "${rompath}"
$ECHO "--- Done!"

;;
-f|--fix)
$ECHO ""
$ECHO -n "FixApps, proceed? (y/n) "
read response

	if [ "$response" != "y" ]; then
		$ECHO ""
		$ECHO "Not FixApps..."
		$ECHO ""
		exit 0
	fi

$ECHO "started at $FP_STARTTIME"

fixAPPS2
fixPERM
fixEXT
fp_end2

$ECHO "--- Done!"
$ECHO "ended at $FP_ENDTIME (Runtime:${FP_DDM}m${FP_DDS}s)"

;;
-l|--list)
$LS "${myhome}"
exit 0
;;
*)
print_usage
exit 0
;;
esac

