#!/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="Launcher2.apk LiveWallpapers.apk VoiceDialer.apk SpeechRecorder.apk VisualizationWallpapers.apk VideoEditor.apk Exchange2.apk HoloSpiralWallpaper.apk MagicSmokeWallpapers.apk NoiseField.apk Galaxy4.apk Calendar.apk OpenWnn.apk PinyinIME.apk QuickSearchBox.apk Velvet.apk Provision.apk"
DELETE_GALLERY="Gallery2.apk"
DELETE_FONTS="MTLmr3m.ttf"

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 Unnecessary Fonts
( cd $REPACK/ota/system/fonts; echo $DELETE_FONTS | xargs rm -f; )

# 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/

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

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

# No need for recovery
rm -rf $REPACK/ota/recovery
rm -rf $REPACK/ota/system/etc/recovery-resource.dat

# 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=245/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

# Fix LCD Density for GNote
DEVICEID=`sed -n -e'/ro\.product\.device/s/^.*=//p' $OUT/system/build.prop`
if [ "$DEVICEID" = "SGH-I717" ]; then
   sed -i 's/ro.sf.lcd_density=245/ro.sf.lcd_density=268/g' $OUT/system/build.prop
elif [ "$DEVICEID" = "GT-N7000" ]; then
   sed -i 's/ro.sf.lcd_density=245/ro.sf.lcd_density=268/g' $OUT/system/build.prop
elif [ "$DEVICEID" = "mako" ]; then
   sed -i 's/ro.sf.lcd_density=245/ro.sf.lcd_density=268/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
