diff --git a/res/layout/preference_app_header_animation.xml b/res/layout/preference_app_header_animation.xml
new file mode 100644
index 00000000000..330d118c4e2
--- /dev/null
+++ b/res/layout/preference_app_header_animation.xml
@@ -0,0 +1,61 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/res/raw/app_cloning.json b/res/raw/app_cloning.json
new file mode 100644
index 00000000000..1df485a23d5
--- /dev/null
+++ b/res/raw/app_cloning.json
@@ -0,0 +1 @@
+{"v":"5.9.0","fr":60,"ip":0,"op":420,"w":412,"h":300,"nm":"App_Cloning","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Null 1","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,150,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":10,"s":[100,100,100]},{"i":{"x":[0.3,0.3,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":90,"s":[170,170,100]},{"i":{"x":[0.3,0.3,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":98,"s":[170,170,100]},{"i":{"x":[0.3,0.3,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":150,"s":[90,90,100]},{"i":{"x":[0.3,0.3,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":304,"s":[90,90,100]},{"t":364,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"ip":0,"op":11400,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":".yellow400","cl":"yellow400","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,-5.179,0],"ix":2,"l":2},"a":{"a":0,"k":[316.566,79.078,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.312,-3.725],[4.929,0],[1.542,-4.424],[0,5.325],[-11.649,0],[-0.07,-11.649]],"o":[[-1.409,-4.552],[-4.884,0],[-3.254,-3.711],[0,-11.649],[11.579,0],[0,5.378]],"v":[[15.746,13.994],[-0.07,7.193],[-15.847,13.884],[-21.088,0],[0,-21.088],[21.088,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[13.263,0],[0,-13.263],[-13.228,0],[-0.07,13.228]],"o":[[-13.263,0],[0,13.263],[13.158,0],[0,-13.263]],"v":[[0,-24],[-24,0],[0,24],[24,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235294819,0.78823530674,0.203921571374,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[316.566,79.078],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4,0],[0,-4],[-4.105,0],[0,4]],"o":[[-4,0],[-0.07,4],[4.035,0],[0,-4]],"v":[[0.001,-7.263],[-7.263,0],[0.001,7.263],[7.264,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235294819,0.78823530674,0.203921571374,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[316.566,73.218],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":190,"op":11590,"st":190,"bm":0},{"ddd":0,"ind":3,"ty":4,"nm":".yellow400","cl":"yellow400","parent":7,"sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[2.222,-72.507,0],"ix":2,"l":2},"a":{"a":0,"k":[2.222,48.236,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":207,"s":[0,0,100]},{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":217,"s":[110,110,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":227,"s":[100,100,100]},{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":304,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":314,"s":[110,110,100]},{"t":324,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,22.434],[24.701,0],[0,-24.701],[-21.537,-3.221],[0,0],[-0.916,1.831],[0,0]],"o":[[0,-24.701],[-24.701,0],[0,22.434],[0,0],[0.916,1.831],[0,0],[21.537,-3.221]],"v":[[44.725,-4.885],[0,-49.61],[-44.725,-4.885],[-6.669,39.342],[-2.222,48.236],[2.222,48.236],[6.67,39.342]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.988235294819,0.78823530674,0.203921571374,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":190,"op":11590,"st":190,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":".green400","cl":"green400","parent":5,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,-5.179,0],"ix":2,"l":2},"a":{"a":0,"k":[95.434,79.078,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[3.312,-3.725],[4.929,0],[1.542,-4.424],[0,5.325],[-11.649,0],[-0.07,-11.649]],"o":[[-1.409,-4.552],[-4.884,0],[-3.254,-3.711],[0,-11.649],[11.579,0],[0,5.378]],"v":[[15.746,13.994],[-0.07,7.193],[-15.847,13.884],[-21.088,0],[0,-21.088],[21.088,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[13.263,0],[0,-13.263],[-13.228,0],[-0.07,13.228]],"o":[[-13.263,0],[0,13.263],[13.158,0],[0,-13.263]],"v":[[0,-24],[-24,0],[0,24],[24,0]],"c":true},"ix":2},"nm":"Path 2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.35686275363,0.72549021244,0.454901963472,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.434,79.078],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[4,0],[0,-4],[-4.105,0],[0,4]],"o":[[-4,0],[-0.07,4],[4.035,0],[0,-4]],"v":[[0.001,-7.263],[-7.263,0],[0.001,7.263],[7.264,0]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.35686275363,0.72549021244,0.454901963472,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[95.433,73.218],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":190,"op":11590,"st":190,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":".green400","cl":"green400","parent":7,"sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-220.566,-72.507,0],"ix":2,"l":2},"a":{"a":0,"k":[0.566,48.236,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":202,"s":[0,0,100]},{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":212,"s":[110,110,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":222,"s":[100,100,100]},{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":309,"s":[100,100,100]},{"i":{"x":[0.833,0.833,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":319,"s":[110,110,100]},{"t":329,"s":[0,0,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,22.434],[24.701,0],[0,-24.701],[-21.537,-3.221],[0,0],[-0.916,1.831],[0,0]],"o":[[0,-24.701],[-24.701,0],[0,22.434],[0,0],[0.916,1.831],[0,0],[21.537,-3.221]],"v":[[44.725,-4.885],[0,-49.61],[-44.725,-4.885],[-6.669,39.342],[-2.222,48.236],[2.222,48.236],[6.67,39.342]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.35686275363,0.72549021244,0.454901963472,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":190,"op":11590,"st":190,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":".blue400","cl":"blue400","parent":9,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.7],"y":[0]},"t":389,"s":[100]},{"t":419,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[34.444,34.444,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":146,"s":[0,0,100]},{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":156,"s":[110,110,100]},{"t":166,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-11.046],[11.046,0],[0,11.046],[-11.046,0]],"o":[[0,11.046],[-11.046,0],[0,-11.046],[11.046,0]],"v":[[20,0],[0,20],[-20,0],[0,-20]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.615686297417,0.964705884457,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":98,"op":11394,"st":-6,"bm":0},{"ddd":0,"ind":7,"ty":3,"nm":"Apps_Blue400","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":98,"s":[100]},{"t":150,"s":[40]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.8,"y":0},"t":98,"s":[0.566,0,0],"to":[18.333,0,0],"ti":[-18.333,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.8,"y":0.8},"t":150,"s":[110.566,0,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.8,"y":0},"t":187,"s":[110.566,0,0],"to":[0,9.167,0],"ti":[0,-9.167,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.8,"y":0.8},"t":227,"s":[110.566,55,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.8,"y":0},"t":304,"s":[110.566,55,0],"to":[-23.083,-14.104,0],"ti":[23.083,14.104,0]},{"t":364,"s":[-27.934,-29.625,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.8,0.8,0.167],"y":[0,0,0]},"t":304,"s":[100,100,100]},{"t":364,"s":[25,25,100]}],"ix":6,"l":2}},"ao":0,"ip":98,"op":11394,"st":-6,"bm":0},{"ddd":0,"ind":8,"ty":4,"nm":".blue400","cl":"blue400","parent":1,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":111,"s":[100]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":150,"s":[40]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.7],"y":[0]},"t":389,"s":[40]},{"t":419,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.8,"y":0},"t":98,"s":[0.5,0,0],"to":[18.333,0,0],"ti":[-18.333,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.8,"y":0.8},"t":150,"s":[110.5,0,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.8,"y":0},"t":187,"s":[110.5,0,0],"to":[0,9.167,0],"ti":[0,-9.167,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.8,"y":0.8},"t":227,"s":[110.5,55,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.8,"y":0},"t":304,"s":[110.5,55,0],"to":[-23.083,-14.083,0],"ti":[23.083,14.083,0]},{"t":364,"s":[-28,-29.5,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.8,0.8,0.167],"y":[0,0,0]},"t":304,"s":[100,100,100]},{"t":364,"s":[25,25,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":1,"k":[{"i":{"x":[0.566,0.2],"y":[1,1]},"o":{"x":[0.8,0.8],"y":[0,0]},"t":98,"s":[84,84]},{"i":{"x":[0,0.2],"y":[1,1]},"o":{"x":[0,0.8],"y":[0,0]},"t":125,"s":[132,84]},{"t":150,"s":[84,84]}],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":98,"s":[42]},{"t":150,"s":[42]}],"ix":4},"nm":"Rectangle Path 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"fl","c":{"a":0,"k":[0.4,0.61568627451,0.964705882353,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Rectangle 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":98,"op":11377,"st":-23,"bm":0},{"ddd":0,"ind":9,"ty":4,"nm":".blue400","cl":"blue400","parent":7,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":122,"s":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":156,"s":[20]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.7],"y":[0]},"t":389,"s":[20]},{"t":419,"s":[0]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":122,"s":[55,55,100]},{"t":156,"s":[100,100,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-33.137],[33.137,0],[0,33.137],[-33.137,0]],"o":[[0,33.137],[-33.137,0],[0,-33.137],[33.137,0]],"v":[[60,0],[0,60],[-60,0],[0,-60]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.615686297417,0.964705884457,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":98,"op":11394,"st":-6,"bm":0},{"ddd":0,"ind":10,"ty":4,"nm":".blue400","cl":"blue400","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.2,"y":1},"o":{"x":0.7,"y":0},"t":10,"s":[-83.125,-29.625,0],"to":[13.854,4.938,0],"ti":[-13.854,-4.938,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.167,"y":0.167},"t":90,"s":[0,0,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.8,"y":0},"t":98,"s":[0,0,0],"to":[-18.333,0,0],"ti":[18.333,0,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.8,"y":0.8},"t":150,"s":[-110,0,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.8,"y":0},"t":187,"s":[-110,0,0],"to":[0,9.167,0],"ti":[0,-9.167,0]},{"i":{"x":0.2,"y":0.2},"o":{"x":0.8,"y":0.8},"t":227,"s":[-110,55,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.2,"y":1},"o":{"x":0.8,"y":0},"t":304,"s":[-110,55,0],"to":[4.479,-14.104,0],"ti":[-4.479,14.104,0]},{"t":364,"s":[-83.125,-29.625,0]}],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":10,"s":[25,25,100]},{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.167,0.167,0.167],"y":[0,0,0]},"t":90,"s":[100,100,100]},{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.8,0.8,0.167],"y":[0,0,0]},"t":304,"s":[100,100,100]},{"t":364,"s":[25,25,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-23.196],[23.196,0],[0,23.196],[-23.196,0]],"o":[[0,23.196],[-23.196,0],[0,-23.196],[23.196,0]],"v":[[42,0],[0,42],[-42,0],[0,-42]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.615686297417,0.964705884457,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":11091,"st":-309,"bm":0},{"ddd":0,"ind":11,"ty":4,"nm":".blue400","cl":"blue400","parent":10,"sr":1,"ks":{"o":{"a":0,"k":20,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,0,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":1,"k":[{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":10,"s":[55,55,100]},{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":90,"s":[100,100,100]},{"i":{"x":[0.2,0.2,0.833],"y":[1,1,1]},"o":{"x":[0.7,0.7,0.167],"y":[0,0,0]},"t":389,"s":[100,100,100]},{"t":419,"s":[55,55,100]}],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-33.137],[33.137,0],[0,33.137],[-33.137,0]],"o":[[0,33.137],[-33.137,0],[0,-33.137],[33.137,0]],"v":[[60,0],[0,60],[-60,0],[0,-60]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.40000000596,0.615686297417,0.964705884457,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":11091,"st":-309,"bm":0},{"ddd":0,"ind":13,"ty":4,"nm":".grey800","cl":"grey800","parent":10,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.7],"y":[0]},"t":10,"s":[100]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":80,"s":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":314,"s":[0]},{"t":364,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[332.5,289.443,0],"ix":2,"l":2},"a":{"a":0,"k":[206,192.736,0],"ix":1,"l":2},"s":{"a":0,"k":[400,400,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-8.311],[8.311,0],[0,8.311],[-8.311,0]],"o":[[0,8.311],[-8.311,0],[0,-8.311],[8.311,0]],"v":[[15.048,0],[0,15.048],[-15.048,0],[0,-15.048]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.235294118524,0.250980407,0.262745112181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[233.73,169.585],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 2","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-8.311],[8.311,0],[0,8.311],[-8.311,0]],"o":[[0,8.311],[-8.311,0],[0,-8.311],[8.311,0]],"v":[[15.048,0],[0,15.048],[-15.048,0],[0,-15.048]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.235294118524,0.250980407,0.262745112181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[178.27,169.585],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 3","np":2,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-8.311],[8.311,0],[0,8.311],[-8.311,0]],"o":[[0,8.311],[-8.311,0],[0,-8.311],[8.311,0]],"v":[[15.048,0],[0,15.048],[-15.048,0],[0,-15.048]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.235294118524,0.250980407,0.262745112181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[122.809,169.585],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 4","np":2,"cix":2,"bm":0,"ix":3,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-8.311],[8.311,0],[0,8.311],[-8.311,0]],"o":[[0,8.311],[-8.311,0],[0,-8.311],[8.311,0]],"v":[[15.048,0],[0,15.048],[-15.048,0],[0,-15.048]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.235294118524,0.250980407,0.262745112181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[289.191,169.585],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[206,169.585],"ix":2},"a":{"a":0,"k":[206,169.585],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ScreenContent_Grey801","np":4,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[6.179,0],[0,0],[0,6.179],[0,0],[-6.179,0],[0,0],[0,-6.179],[0,0]],"o":[[0,0],[-6.179,0],[0,0],[0,-6.179],[0,0],[6.179,0],[0,0],[0,6.179]],"v":[[87.005,13.608],[-87.005,13.608],[-98.239,2.373],[-98.239,-2.373],[-87.005,-13.608],[87.005,-13.608],[98.239,-2.373],[98.239,2.373]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.235294118524,0.250980407,0.262745112181,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false},{"ty":"tr","p":{"a":0,"k":[206,217.327],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"ScreenContent_Grey800","np":1,"cix":2,"bm":0,"ix":2,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":9706,"st":-1694,"bm":0},{"ddd":0,"ind":14,"ty":4,"nm":".grey600","cl":"grey600","parent":10,"sr":1,"ks":{"o":{"a":1,"k":[{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.7],"y":[0]},"t":10,"s":[100]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.167],"y":[0]},"t":80,"s":[0]},{"i":{"x":[0.2],"y":[1]},"o":{"x":[0.8],"y":[0]},"t":314,"s":[0]},{"t":364,"s":[100]}],"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[332.5,23.679,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[400,400,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,0],[9.588,0],[0,0],[0,9.59],[0,0],[0,0],[0,0],[-11.986,0],[0,0],[0,11.987],[0,0],[0,2.401],[0,0],[0,0]],"o":[[0,9.59],[0,0],[-9.588,0],[0,0],[0,0],[0,0],[0,11.987],[0,0],[11.986,0],[0,0],[2.401,0],[0,0],[0,0],[0,0]],"v":[[115.211,104.344],[97.822,121.736],[-102.169,121.736],[-119.559,104.344],[-119.559,-126.084],[-123.907,-126.084],[-123.907,104.344],[-102.169,126.084],[97.822,126.084],[119.56,104.344],[119.56,-108.688],[123.907,-113.036],[123.907,-126.084],[115.211,-126.084]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.501960813999,0.525490224361,0.54509806633,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":9706,"st":-1694,"bm":0},{"ddd":0,"ind":15,"ty":4,"nm":".black","cl":"black","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[203.826,124.121,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[-9.588,0],[0,0],[0,9.59],[0,0],[0,0],[0,0]],"o":[[0,0],[9.588,0],[0,0],[0,0],[0,0],[0,9.59]],"v":[[-99.996,123.91],[99.995,123.91],[117.385,106.518],[117.385,-123.91],[-117.385,-123.91],[-117.385,106.518]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":1,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":9706,"st":-1694,"bm":0},{"ddd":0,"ind":16,"ty":4,"nm":".black","cl":"black","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[206,150,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,100,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[15.291,0],[0,0],[0,15.652],[0,0],[-15.291,0],[0,0],[0,-15.652],[0,0]],"o":[[0,0],[-15.291,0],[0,0],[0,-15.652],[0,0],[15.185,0],[0,0],[0,15.544]],"v":[[178.179,150],[-178.179,150],[-206,121.522],[-206,-121.522],[-178.179,-150],[178.286,-150],[206,-121.522],[206,121.63]],"c":true},"ix":2},"nm":"Path 1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fill 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[0,0],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,100],"ix":3},"r":{"a":0,"k":0,"ix":6},"o":{"a":0,"k":100,"ix":7},"sk":{"a":0,"k":0,"ix":4},"sa":{"a":0,"k":0,"ix":5},"nm":"Transform"}],"nm":"Group 1","np":2,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":9706,"st":-1694,"bm":0}],"markers":[]}
\ No newline at end of file
diff --git a/res/values/strings.xml b/res/values/strings.xml
index 7466b143c90..0494e0458fd 100644
--- a/res/values/strings.xml
+++ b/res/values/strings.xml
@@ -6577,6 +6577,9 @@
Cloned Apps
Create a second instance of an app so that you can use two accounts at the same time.
+
+ Apps that can be cloned.
+
%1$s cloned, %2$d available to clone
Delete all App clones
diff --git a/res/xml/accessibility_hearing_aids.xml b/res/xml/accessibility_hearing_aids.xml
index d5d8df6c3b7..f5e65aef155 100644
--- a/res/xml/accessibility_hearing_aids.xml
+++ b/res/xml/accessibility_hearing_aids.xml
@@ -30,13 +30,12 @@
-
-
+ settings:searchable="true"
+ settings:controller="com.android.settings.accessibility.HearingAidCompatibilityPreferenceController"/>
{
+ removeAndCacheAllPreferences();
+ });
return;
}
mSpinnerPreference.setVisible(true);
mAppListPreferenceGroup.setVisible(true);
mHandler.post(() -> {
+ removeAndCacheAllPreferences();
addAllPreferences();
});
}
diff --git a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
index 3b04f907cc6..b61b755404a 100644
--- a/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
+++ b/src/com/android/settings/fuelgauge/batteryusage/DataProcessor.java
@@ -137,6 +137,16 @@ public final class DataProcessor {
// Wrap and processed history map into easy-to-use format for UI rendering.
final BatteryLevelData batteryLevelData =
getLevelDataThroughProcessedHistoryMap(context, processedBatteryHistoryMap);
+ // Loads the current battery usage data from the battery stats service.
+ final Map currentBatteryHistoryMap =
+ getCurrentBatteryHistoryMapFromStatsService(context);
+ // Replaces the placeholder in processedBatteryHistoryMap.
+ for (Map.Entry> mapEntry
+ : processedBatteryHistoryMap.entrySet()) {
+ if (mapEntry.getValue().containsKey(CURRENT_TIME_BATTERY_HISTORY_PLACEHOLDER)) {
+ mapEntry.setValue(currentBatteryHistoryMap);
+ }
+ }
return batteryLevelData == null
? null
: getBatteryUsageMap(
diff --git a/src/com/android/settings/network/CarrierConfigChangedReceiver.java b/src/com/android/settings/network/CarrierConfigChangedReceiver.java
index ace1c75f28a..9092758866a 100644
--- a/src/com/android/settings/network/CarrierConfigChangedReceiver.java
+++ b/src/com/android/settings/network/CarrierConfigChangedReceiver.java
@@ -32,20 +32,9 @@ public class CarrierConfigChangedReceiver extends BroadcastReceiver {
CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED;
private final CountDownLatch mLatch;
- private final boolean mIsWaitingForValidSubId;
- /**
- * This is the CarrierConfigChanged receiver. If it receives the carrier config changed, then it
- * call the CountDownLatch.countDown().
- * If the "isWaitingForValidSubId" is true, then the receiver skip the carrier config changed
- * with the subId = -1. The receiver executes the countDown when the CarrierConfigChanged
- * with valid subId.
- * If the "isWaitingForValidSubId" is false, then the receiver executes the countDown when
- * receiving any CarrierConfigChanged.
- */
- public CarrierConfigChangedReceiver(CountDownLatch latch, boolean isWaitingForValidSubId) {
+ public CarrierConfigChangedReceiver(CountDownLatch latch) {
mLatch = latch;
- mIsWaitingForValidSubId = isWaitingForValidSubId;
}
public void registerOn(Context context) {
@@ -65,8 +54,7 @@ public class CarrierConfigChangedReceiver extends BroadcastReceiver {
}
private void checkSubscriptionIndex(Intent intent) {
- if (intent.hasExtra(CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX)
- || !mIsWaitingForValidSubId) {
+ if (intent.hasExtra(CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX)) {
int subId = intent.getIntExtra(CarrierConfigManager.EXTRA_SUBSCRIPTION_INDEX, -1);
Log.i(TAG, "subId from config changed: " + subId);
mLatch.countDown();
diff --git a/src/com/android/settings/network/UiccSlotUtil.java b/src/com/android/settings/network/UiccSlotUtil.java
index 4c26995f377..95a0e4d5f2a 100644
--- a/src/com/android/settings/network/UiccSlotUtil.java
+++ b/src/com/android/settings/network/UiccSlotUtil.java
@@ -140,8 +140,7 @@ public class UiccSlotUtil {
inactiveRemovableSlot,
/*removable sim's port Id*/ TelephonyManager.DEFAULT_PORT_INDEX,
excludedLogicalSlotIndex),
- context,
- /*isWaitingForValidSubId=*/ true);
+ context);
}
/**
@@ -179,8 +178,7 @@ public class UiccSlotUtil {
performSwitchToSlot(telMgr,
prepareUiccSlotMappings(uiccSlotMappings, /*slot is not psim*/ false,
physicalSlotId, port, excludedLogicalSlotIndex),
- context,
- /*isWaitingForValidSubId=*/ false);
+ context);
}
/**
@@ -232,8 +230,7 @@ public class UiccSlotUtil {
}
private static void performSwitchToSlot(TelephonyManager telMgr,
- Collection uiccSlotMappings, Context context,
- boolean isWaitingForValidSubId)
+ Collection uiccSlotMappings, Context context)
throws UiccSlotsException {
CarrierConfigChangedReceiver receiver = null;
long waitingTimeMillis =
@@ -243,7 +240,7 @@ public class UiccSlotUtil {
DEFAULT_WAIT_AFTER_SWITCH_TIMEOUT_MILLIS);
try {
CountDownLatch latch = new CountDownLatch(1);
- receiver = new CarrierConfigChangedReceiver(latch, isWaitingForValidSubId);
+ receiver = new CarrierConfigChangedReceiver(latch);
receiver.registerOn(context);
telMgr.setSimSlotMapping(uiccSlotMappings);
latch.await(waitingTimeMillis, TimeUnit.MILLISECONDS);
diff --git a/src/com/android/settings/spa/app/appinfo/AppBatteryPreference.kt b/src/com/android/settings/spa/app/appinfo/AppBatteryPreference.kt
index 2766dfef360..720422f6faf 100644
--- a/src/com/android/settings/spa/app/appinfo/AppBatteryPreference.kt
+++ b/src/com/android/settings/spa/app/appinfo/AppBatteryPreference.kt
@@ -126,6 +126,7 @@ private class AppBatteryPresenter(private val context: Context, private val app:
this,
Utils.formatPercentage(percentOfTotal, true),
null,
+ false,
)
}
diff --git a/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidsFragmentTest.java b/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidsFragmentTest.java
index 10cf4e13e75..e5e89501c0e 100644
--- a/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidsFragmentTest.java
+++ b/tests/robotests/src/com/android/settings/accessibility/AccessibilityHearingAidsFragmentTest.java
@@ -18,16 +18,23 @@ package com.android.settings.accessibility;
import static com.google.common.truth.Truth.assertThat;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.when;
+
import android.content.Context;
+import android.telephony.TelephonyManager;
import androidx.test.core.app.ApplicationProvider;
import com.android.settings.R;
import com.android.settings.testutils.XmlTestUtils;
+import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
+import org.mockito.Spy;
import org.mockito.junit.MockitoJUnit;
import org.mockito.junit.MockitoRule;
import org.robolectric.RobolectricTestRunner;
@@ -40,7 +47,16 @@ public class AccessibilityHearingAidsFragmentTest {
@Rule
public MockitoRule mMockitoRule = MockitoJUnit.rule();
+ @Spy
private final Context mContext = ApplicationProvider.getApplicationContext();
+ private TelephonyManager mTelephonyManager;
+
+ @Before
+ public void setUp() {
+ mTelephonyManager = spy(mContext.getSystemService(TelephonyManager.class));
+ when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
+ doReturn(true).when(mTelephonyManager).isHearingAidCompatibilitySupported();
+ }
@Test
public void getNonIndexableKeys_existInXmlLayout() {
diff --git a/tests/robotests/src/com/android/settings/accessibility/HearingAidCompatibilityPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/accessibility/HearingAidCompatibilityPreferenceControllerTest.java
new file mode 100644
index 00000000000..15bb38d1420
--- /dev/null
+++ b/tests/robotests/src/com/android/settings/accessibility/HearingAidCompatibilityPreferenceControllerTest.java
@@ -0,0 +1,130 @@
+/*
+ * Copyright (C) 2022 The Android Open Source Project
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package com.android.settings.accessibility;
+
+import static com.android.settings.accessibility.HearingAidCompatibilityPreferenceController.HAC_DISABLED;
+import static com.android.settings.accessibility.HearingAidCompatibilityPreferenceController.HAC_ENABLED;
+import static com.android.settings.core.BasePreferenceController.AVAILABLE;
+import static com.android.settings.core.BasePreferenceController.UNSUPPORTED_ON_DEVICE;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.spy;
+import static org.mockito.Mockito.verify;
+import static org.mockito.Mockito.when;
+
+import android.content.ContentResolver;
+import android.content.Context;
+import android.media.AudioManager;
+import android.provider.Settings;
+import android.telephony.TelephonyManager;
+
+import androidx.preference.SwitchPreference;
+import androidx.test.core.app.ApplicationProvider;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.Mock;
+import org.mockito.Spy;
+import org.mockito.junit.MockitoJUnit;
+import org.mockito.junit.MockitoRule;
+import org.robolectric.RobolectricTestRunner;
+
+/** Tests for {@link HearingAidCompatibilityPreferenceControllerTest}. */
+@RunWith(RobolectricTestRunner.class)
+public class HearingAidCompatibilityPreferenceControllerTest {
+
+ @Rule
+ public MockitoRule mocks = MockitoJUnit.rule();
+ @Spy
+ private final Context mContext = ApplicationProvider.getApplicationContext();
+ @Mock
+ private ContentResolver mContentResolver;
+
+ private TelephonyManager mTelephonyManager;
+ private AudioManager mAudioManager;
+ private final SwitchPreference mPreference = new SwitchPreference(mContext);
+ private HearingAidCompatibilityPreferenceController mController;
+
+ @Before
+ public void setUp() {
+ mTelephonyManager = spy(mContext.getSystemService(TelephonyManager.class));
+ mAudioManager = spy(mContext.getSystemService(AudioManager.class));
+ when(mContext.getContentResolver()).thenReturn(mContentResolver);
+ when(mContext.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
+ when(mContext.getSystemService(AudioManager.class)).thenReturn(mAudioManager);
+ mController = new HearingAidCompatibilityPreferenceController(mContext,
+ "hearing_aid_compatibility");
+ }
+
+ @Test
+ public void getAvailabilityStatus_HacSupported_shouldReturnAvailable() {
+ doReturn(true).when(mTelephonyManager).isHearingAidCompatibilitySupported();
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
+ }
+
+ @Test
+ public void getAvailabilityStatus_HacNotSupported_shouldReturnUnsupported() {
+ doReturn(false).when(mTelephonyManager).isHearingAidCompatibilitySupported();
+
+ assertThat(mController.getAvailabilityStatus()).isEqualTo(UNSUPPORTED_ON_DEVICE);
+ }
+
+
+ @Test
+ public void isChecked_enabledHac_shouldReturnTrue() {
+ Settings.System.putInt(mContext.getContentResolver(), Settings.System.HEARING_AID,
+ HAC_ENABLED);
+ mController.updateState(mPreference);
+
+ assertThat(mController.isChecked()).isTrue();
+ assertThat(mPreference.isChecked()).isTrue();
+ }
+
+ @Test
+ public void isChecked_disabledHac_shouldReturnFalse() {
+ Settings.System.putInt(mContext.getContentResolver(), Settings.System.HEARING_AID,
+ HAC_DISABLED);
+ mController.updateState(mPreference);
+
+ assertThat(mController.isChecked()).isFalse();
+ assertThat(mPreference.isChecked()).isFalse();
+ }
+
+ @Test
+ public void setChecked_enabled_shouldEnableHac() {
+ mController.setChecked(true);
+
+ assertThat(Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.HEARING_AID, HAC_DISABLED)).isEqualTo(HAC_ENABLED);
+ verify(mAudioManager).setParameters("HACSetting=ON");
+ }
+
+ @Test
+ public void setChecked_disabled_shouldDisableHac() {
+ mController.setChecked(false);
+
+ assertThat(Settings.System.getInt(mContext.getContentResolver(),
+ Settings.System.HEARING_AID, HAC_DISABLED)).isEqualTo(HAC_DISABLED);
+ verify(mAudioManager).setParameters("HACSetting=OFF");
+ }
+
+}
diff --git a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppBatteryPreferenceTest.kt b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppBatteryPreferenceTest.kt
index 01113ccb279..fd286caf2d9 100644
--- a/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppBatteryPreferenceTest.kt
+++ b/tests/spa_unit/src/com/android/settings/spa/app/appinfo/AppBatteryPreferenceTest.kt
@@ -162,6 +162,7 @@ class AppBatteryPreferenceTest {
batteryDiffEntry,
"10%",
null,
+ false,
)
}
}
diff --git a/tests/unit/src/com/android/settings/regionalpreferences/NumberingPreferencesFragmentTest.java b/tests/unit/src/com/android/settings/regionalpreferences/NumberingPreferencesFragmentTest.java
index eeb65f2ef2a..92cfb69b449 100644
--- a/tests/unit/src/com/android/settings/regionalpreferences/NumberingPreferencesFragmentTest.java
+++ b/tests/unit/src/com/android/settings/regionalpreferences/NumberingPreferencesFragmentTest.java
@@ -26,13 +26,9 @@ import android.os.Looper;
import androidx.test.annotation.UiThreadTest;
import androidx.test.core.app.ApplicationProvider;
-import com.android.settings.testutils.ResourcesUtils;
-
import org.junit.Before;
import org.junit.Test;
-import java.util.Locale;
-
public class NumberingPreferencesFragmentTest {
private Context mApplicationContext;
private NumberingPreferencesFragment mFragment;
@@ -47,37 +43,6 @@ public class NumberingPreferencesFragmentTest {
mFragment = new NumberingPreferencesFragment();
}
- @Test
- @UiThreadTest
- public void initTitle_optionIsLanguageSelection_titleIsNumbers() {
- Bundle bundle = new Bundle();
- bundle.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
- NumberingSystemItemController.ARG_VALUE_LANGUAGE_SELECT);
- mFragment.setArguments(bundle);
-
- String result = mFragment.initTitle();
-
- assertEquals(ResourcesUtils.getResourcesString(
- mApplicationContext, "numbers_preferences_title"), result);
- }
-
- @Test
- @UiThreadTest
- public void initTitle_optionIsNumberingSystemSelection_titleIsLocaleDisplayName() {
- Locale expectedLocale = Locale.forLanguageTag("en-US");
- Bundle bundle = new Bundle();
- bundle.putString(RegionalPreferencesEntriesFragment.ARG_KEY_REGIONAL_PREFERENCE,
- NumberingSystemItemController.ARG_VALUE_NUMBERING_SYSTEM_SELECT);
- bundle.putString(
- NumberingSystemItemController.KEY_SELECTED_LANGUAGE,
- expectedLocale.toLanguageTag());
- mFragment.setArguments(bundle);
-
- String result = mFragment.initTitle();
-
- assertEquals(expectedLocale.getDisplayName(expectedLocale), result);
- }
-
@Test
@UiThreadTest
public void getMetricsCategory_optionIsLanguageSelection_resultIsLanguageSelection() {