#!/bin/sh
#
# Squish a CM otapackage for distribution
# cyanogen
#

OUT_TARGET_HOST=`uname -a | grep Darwin`
if [ -z "$OUT_TARGET_HOST" ]
then
   OUT_TARGET_HOST=linux-x86
   MD5=md5sum
   XARGS="xargs --max-args=1 --max-procs `grep 'processor' /proc/cpuinfo|wc -l`"
   SED=sed
else
   OUT_TARGET_HOST=darwin-x86
   MD5=md5
   XARGS="xargs -n 1 -P `sysctl hw.ncpu | awk '{print $2}'`"
   SED=gsed
fi

if [ -z "$OUT" -o ! -d "$OUT" ]; then
	echo "ERROR: $0 only works with a full build environment. $OUT should exist."
	exit 1
fi

if [ "$TARGET_BUILD_TYPE" = "debug" ]; then
    OTAPACKAGE=$OUT/${TARGET_PRODUCT}_debug-ota-$TARGET_BUILD_VARIANT.$USER.zip
elif [ "$TARGET_BUILD_VARIANT" = "userdebug" ]; then
    OTAPACKAGE=$OUT/$TARGET_PRODUCT-ota-eng.$USER.zip
elif [ "$TARGET_BUILD_VARIANT" = "user" ]; then
    OTAPACKAGE=$OUT/$TARGET_PRODUCT-ota-eng.$USER.zip
else
    OTAPACKAGE=$OUT/$TARGET_PRODUCT-ota-$TARGET_BUILD_VARIANT.$USER.zip
fi
if [ ! -f "$OTAPACKAGE" ]; then
	echo "$OTAPACKAGE doesn't exist!";
	exit 1
fi

OPTICHARGER=$ANDROID_BUILD_TOP/vendor/slim/tools/opticharger
QUIET=-q
DELETE_BINS="applypatch applypatch_static check_prereq recovery updater"
DELETE_MEDIA="*.qmg"
DELETE_APKS="Home.apk LiveWallpapers.apk VoiceDialer.apk SoundRecorder.apk VisualizationWallpapers.apk "
DELETE_GALLERY="Gallery2.apk"

REPACK=$OUT/repack.d
printf "Sanitizing environment..."
rm -rf $REPACK
mkdir -p $REPACK
echo


# Unpack the otapackage and opticharge all apks
mkdir $REPACK/ota
(
cd $REPACK/ota
printf "Unpacking $OTAPACKAGE..."
unzip $QUIET $OTAPACKAGE
echo

# Move all apks to the same directory so xargs can
# use also with framework-res.apk. This allow process
# framework-res.apk in parallel with other apks
mkdir -p $REPACK/parallel
cd $REPACK/parallel
cp $REPACK/ota/system/framework/framework-res.apk .
cp $REPACK/ota/system/app/*.apk .

# Do optimization in parallel
find ./ -name \*.apk | $XARGS $OPTICHARGER

# Move optimized apks to repack directory
mv -f $REPACK/parallel/framework-res.apk $REPACK/ota/system/framework/framework-res.apk
mv -f $REPACK/parallel/*.apk $REPACK/ota/system/app/

# Return to directory
cd $REPACK/ota
rm -rf $REPACK/parallel
)

# Fix build.prop
$SED -i \
	-e '/ro\.kernel\.android\.checkjni/d' \
	-e '/ro\.build\.type/s/eng/user/' \
	$REPACK/ota/system/build.prop


# Delete unnecessary binaries
( cd $REPACK/ota/system/bin; echo $DELETE_BINS | xargs rm -f; )

# Delete Offline charging mode files
( cd $REPACK/ota/system/media; echo $DELETE_MEDIA | xargs rm -f; )

# Delete Home Apk
( cd $REPACK/ota/system/app; echo $DELETE_APKS | xargs rm -f; )

# No need for modem.bin
rm -f $REPACK/ota/modem.bin

# No need for media/video
rm -rf $REPACK/ota/system/media/video

# Delete compiled fonts
rm -rf $REPACK/ota/system/fonts

#make dir for fonts again
mkdir $REPACK/ota/system/fonts

# Add precompiled fonts
mv -f $REPACK/ota/system/sfont/*.ttf $REPACK/ota/system/fonts/

# Add OTA app
#mkdir $REPACK/ota/data/app
#cp -f $OUT/data/app/com.acquariusoft.UpdateMe.apk $REPACK/ota/data/app/

# No need for tts
rm -rf $REPACK/ota/system/tts

# No need for recovery
rm -rf $REPACK/ota/recovery

# Strip modules
[ -d $REPACK/ota/system/lib/modules ] && \
	find $REPACK/ota/system/lib/modules -name "*.ko" -print0 | xargs -0 arm-eabi-strip --strip-unneeded

# Fix LCD Density for slim
DEVICELCD=`sed -n -e'/ro\.sf\.lcd_density/s/^.*=//p' $OUT/system/build.prop`
if [ "$DEVICELCD" = "240" ]; then
   sed -i 's/ro.sf.lcd_density=240/ro.sf.lcd_density=182/g' $OUT/system/build.prop
elif [ "$DEVICELCD" = "320" ]; then
    sed -i 's/ro.sf.lcd_density=320/ro.sf.lcd_density=241/g' $OUT/system/build.prop
elif [ "$DEVICELCD" = "213" ]; then
    sed -i 's/ro.sf.lcd_density=213/ro.sf.lcd_density=182/g' $OUT/system/build.prop
fi
cp -f $OUT/system/build.prop $REPACK/ota/system/build.prop

# Delete Gallery2 for 5MP cameras
CAMERARESOLUTION=`sed -n -e'/ro\.camera\.res/s/^.*=//p' $REPACK/ota/system/build.prop`
if [ "$CAMERARESOLUTION" = "5MP" ];then
   rm -f $REPACK/ota/system/app/Gallery2.apk
fi

# Swap boot.img
PREBUILTKERNEL=$OUT/system/slimkernel/boot.img
if [ -e "$PREBUILTKERNEL" ];then
   rm -f $REPACK/ota/boot.img
   mv -f $REPACK/ota/system/slimkernel/boot.img $REPACK/ota/boot.img
fi

# Determine what to name the new signed package
MODVERSION=`sed -n -e'/ro\.modversion/s/^.*=//p' $REPACK/ota/system/build.prop`
OUTFILE=$OUT/$MODVERSION.zip
echo MODVERSION: $MODVERSION

# Pack it up and sign
printf "Zipping package..."
( cd $REPACK/ota; zip $QUIET -r $REPACK/update.zip . )
echo
printf "Signing package..."
SECURITYDIR=$ANDROID_BUILD_TOP/build/target/product/security
java -Xmx1024m \
	-jar $OUT/../../../host/$OUT_TARGET_HOST/framework/signapk.jar \
	-w $SECURITYDIR/testkey.x509.pem $SECURITYDIR/testkey.pk8 \
	$REPACK/update.zip $OUTFILE
echo
printf "Cleaning up..."
rm -rf $REPACK
echo

# Create a md5 checksum image of the repacked package
(
img=`basename $OUTFILE`
cd `dirname $OUTFILE`
$MD5 $img >$img.md5sum
echo
echo "Package complete: $OUTFILE"
cat $img.md5sum
echo
)

exit 0
