xref: /aosp_15_r20/cts/tools/utils/rm_dup_holo_imgs.py (revision b7c941bb3fa97aba169d73cee0bed2de8ac964bf)
1*b7c941bbSAndroid Build Coastguard Worker#!/usr/bin/env python
2*b7c941bbSAndroid Build Coastguard Worker#
3*b7c941bbSAndroid Build Coastguard Worker# Copyright (C) 2014 The Android Open Source Project
4*b7c941bbSAndroid Build Coastguard Worker#
5*b7c941bbSAndroid Build Coastguard Worker# Licensed under the Apache License, Version 2.0 (the 'License');
6*b7c941bbSAndroid Build Coastguard Worker# you may not use this file except in compliance with the License.
7*b7c941bbSAndroid Build Coastguard Worker# You may obtain a copy of the License at
8*b7c941bbSAndroid Build Coastguard Worker#
9*b7c941bbSAndroid Build Coastguard Worker#      http://www.apache.org/licenses/LICENSE-2.0
10*b7c941bbSAndroid Build Coastguard Worker#
11*b7c941bbSAndroid Build Coastguard Worker# Unless required by applicable law or agreed to in writing, software
12*b7c941bbSAndroid Build Coastguard Worker# distributed under the License is distributed on an 'AS IS' BASIS,
13*b7c941bbSAndroid Build Coastguard Worker# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*b7c941bbSAndroid Build Coastguard Worker# See the License for the specific language governing permissions and
15*b7c941bbSAndroid Build Coastguard Worker# limitations under the License.
16*b7c941bbSAndroid Build Coastguard Worker#
17*b7c941bbSAndroid Build Coastguard Workerimport hashlib
18*b7c941bbSAndroid Build Coastguard Workerimport os
19*b7c941bbSAndroid Build Coastguard Workerimport subprocess
20*b7c941bbSAndroid Build Coastguard Workerimport sys
21*b7c941bbSAndroid Build Coastguard Worker
22*b7c941bbSAndroid Build Coastguard Workerdensities = [
23*b7c941bbSAndroid Build Coastguard Worker    "ldpi",
24*b7c941bbSAndroid Build Coastguard Worker    "mdpi",
25*b7c941bbSAndroid Build Coastguard Worker    "tvdpi",
26*b7c941bbSAndroid Build Coastguard Worker    "hdpi",
27*b7c941bbSAndroid Build Coastguard Worker    "xhdpi",
28*b7c941bbSAndroid Build Coastguard Worker    "400dpi",
29*b7c941bbSAndroid Build Coastguard Worker    "xxhdpi",
30*b7c941bbSAndroid Build Coastguard Worker    "xxxhdpi"
31*b7c941bbSAndroid Build Coastguard Worker]
32*b7c941bbSAndroid Build Coastguard Worker
33*b7c941bbSAndroid Build Coastguard Worker# A script to find holo images which are duplicated in the landscape and
34*b7c941bbSAndroid Build Coastguard Worker# portrait folder. The landscape images will then be deleted as Android will
35*b7c941bbSAndroid Build Coastguard Worker# look up landscape resources in the portrait folder if it doesn't exist in the
36*b7c941bbSAndroid Build Coastguard Worker# landscape folder. This will reduce the size of the Holo test case.
37*b7c941bbSAndroid Build Coastguard Workerdef main(argv):
38*b7c941bbSAndroid Build Coastguard Worker  run(True)
39*b7c941bbSAndroid Build Coastguard Worker  run(False)
40*b7c941bbSAndroid Build Coastguard Worker
41*b7c941bbSAndroid Build Coastguard Workerdef run(sw):
42*b7c941bbSAndroid Build Coastguard Worker  for density in densities:
43*b7c941bbSAndroid Build Coastguard Worker    portDir = getDirName(density, sw, False)
44*b7c941bbSAndroid Build Coastguard Worker    landDir = getDirName(density, sw, True)
45*b7c941bbSAndroid Build Coastguard Worker    portrait = getAllHashes(portDir)
46*b7c941bbSAndroid Build Coastguard Worker    landscape = getAllHashes(landDir)
47*b7c941bbSAndroid Build Coastguard Worker    for f in portrait:
48*b7c941bbSAndroid Build Coastguard Worker      if f in landscape and landscape[f] == portrait[f]:
49*b7c941bbSAndroid Build Coastguard Worker        subprocess.call(["rm", landDir + "/" + f])
50*b7c941bbSAndroid Build Coastguard Worker
51*b7c941bbSAndroid Build Coastguard Workerdef getAllHashes(dirName):
52*b7c941bbSAndroid Build Coastguard Worker  files = {}
53*b7c941bbSAndroid Build Coastguard Worker  for f in os.listdir(dirName):
54*b7c941bbSAndroid Build Coastguard Worker    if f.endswith(".png"):
55*b7c941bbSAndroid Build Coastguard Worker      files[f] = getHash(open(dirName + "/" + f, 'rb'))
56*b7c941bbSAndroid Build Coastguard Worker  return files
57*b7c941bbSAndroid Build Coastguard Worker
58*b7c941bbSAndroid Build Coastguard Workerdef getHash(f):
59*b7c941bbSAndroid Build Coastguard Worker  return hashlib.sha1(f.read()).hexdigest()
60*b7c941bbSAndroid Build Coastguard Worker
61*b7c941bbSAndroid Build Coastguard Workerdef getDirName(density, sw, land):
62*b7c941bbSAndroid Build Coastguard Worker  name = "drawable-"
63*b7c941bbSAndroid Build Coastguard Worker  if sw:
64*b7c941bbSAndroid Build Coastguard Worker    name += "sw600dp-"
65*b7c941bbSAndroid Build Coastguard Worker  if land:
66*b7c941bbSAndroid Build Coastguard Worker    name += "land-"
67*b7c941bbSAndroid Build Coastguard Worker  return name + density
68*b7c941bbSAndroid Build Coastguard Worker
69*b7c941bbSAndroid Build Coastguard Workerif __name__ == '__main__':
70*b7c941bbSAndroid Build Coastguard Worker  main(sys.argv)
71