From 18539c5f64e571fc587b8e8e4329fb0b9ad2e4a4 Mon Sep 17 00:00:00 2001 From: MM20 <15646950+MM2-0@users.noreply.github.com> Date: Mon, 11 Jul 2022 16:51:10 +0200 Subject: [PATCH] Add reverse pager layout --- .../raw/lottie_scaffold_pager_reverse.json | 1 + preferences/src/main/proto/settings.proto | 1 + .../launcher2/ui/launcher/LauncherActivity.kt | 4 +- .../launcher2/ui/launcher/PagerScaffold.kt | 103 ++++++++++-------- .../mm20/launcher2/ui/layout/Arrangement.kt | 1 + .../appearance/AppearanceSettingsScreen.kt | 1 + 6 files changed, 64 insertions(+), 47 deletions(-) create mode 100644 base/src/main/res/raw/lottie_scaffold_pager_reverse.json diff --git a/base/src/main/res/raw/lottie_scaffold_pager_reverse.json b/base/src/main/res/raw/lottie_scaffold_pager_reverse.json new file mode 100644 index 00000000..92ea3cf5 --- /dev/null +++ b/base/src/main/res/raw/lottie_scaffold_pager_reverse.json @@ -0,0 +1 @@ +{"v":"5.7.4","fr":60,"ip":0,"op":240,"w":180,"h":320,"nm":"Komp 1","ddd":0,"assets":[],"layers":[{"ddd":0,"ind":1,"ty":3,"nm":"Scaffold","sr":1,"ks":{"o":{"a":0,"k":0,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":60,"s":[90,160,0],"to":[16.667,0,0],"ti":[-31.667,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":75,"s":[190,160,0],"to":[31.667,0,0],"ti":[-15,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":83,"s":[280,160,0],"to":[0,0,0],"ti":[0,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":160,"s":[280,160,0],"to":[-15,0,0],"ti":[31.667,0,0]},{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":175,"s":[190,160,0],"to":[-31.667,0,0],"ti":[16.667,0,0]},{"t":185,"s":[90,160,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,"ip":0,"op":245,"st":0,"bm":0},{"ddd":0,"ind":2,"ty":4,"nm":"Pointer","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-17,19,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":[{"d":1,"ty":"el","s":{"a":0,"k":[36,36],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"nm":"Elliptischer Pfad 1","mn":"ADBE Vector Shape - Ellipse","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":0,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[0,0,0,1],"ix":4},"o":{"a":1,"k":[{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":59,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":60,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":75,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":76,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":159,"s":[0]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":160,"s":[100]},{"i":{"x":[0.833],"y":[0.833]},"o":{"x":[0.167],"y":[0.167]},"t":175,"s":[100]},{"t":176,"s":[0]}],"ix":5},"r":1,"bm":0,"nm":"Fläche 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":1,"k":[{"i":{"x":0.833,"y":0.833},"o":{"x":0.167,"y":0.167},"t":76,"s":[-31.006,-14.518],"to":[-13.667,0],"ti":[13.667,0]},{"t":159,"s":[-113.006,-14.518]}],"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":"Transformieren"}],"nm":"Ellipse 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":245,"st":0,"bm":0},{"ddd":0,"ind":3,"ty":3,"nm":"SearchResults","parent":1,"sr":1,"ks":{"o":{"a":0,"k":69,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[0,-36,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,"ip":0,"op":245,"st":0,"bm":0},{"ddd":0,"ind":4,"ty":4,"nm":"Apps","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-190.396,46.802,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,105.768,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[160,250],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":4,"ix":4},"nm":"Rechteckpfad: 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fläche 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-0.396,-78.377],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,74.255],"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":"Transformieren"}],"nm":"Rechteck 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":245,"st":0,"bm":0},{"ddd":0,"ind":5,"ty":4,"nm":"Favorites","parent":3,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-190.396,256.677,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,105.768,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[160,100],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":4,"ix":4},"nm":"Rechteckpfad: 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fläche 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-0.396,-135.677],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,74.255],"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":"Transformieren"}],"nm":"Rechteck 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":245,"st":0,"bm":0},{"ddd":0,"ind":6,"ty":4,"nm":"SearchBar","sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[90.396,442.677,0],"ix":2,"l":2},"a":{"a":0,"k":[0,0,0],"ix":1,"l":2},"s":{"a":0,"k":[100,105.768,100],"ix":6,"l":2}},"ao":0,"shapes":[{"ty":"gr","it":[{"ty":"rc","d":1,"s":{"a":0,"k":[160,28.789],"ix":2},"p":{"a":0,"k":[0,0],"ix":3},"r":{"a":0,"k":4,"ix":4},"nm":"Rechteckpfad: 1","mn":"ADBE Vector Shape - Rect","hd":false},{"ty":"st","c":{"a":0,"k":[1,1,1,1],"ix":3},"o":{"a":0,"k":100,"ix":4},"w":{"a":0,"k":2,"ix":5},"lc":1,"lj":1,"ml":4,"bm":0,"nm":"Kontur 1","mn":"ADBE Vector Graphic - Stroke","hd":false},{"ty":"fl","c":{"a":0,"k":[1,1,1,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fläche 1","mn":"ADBE Vector Graphic - Fill","hd":false},{"ty":"tr","p":{"a":0,"k":[-0.396,-135.677],"ix":2},"a":{"a":0,"k":[0,0],"ix":1},"s":{"a":0,"k":[100,74.255],"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":"Transformieren"}],"nm":"Rechteck 1","np":3,"cix":2,"bm":0,"ix":1,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":245,"st":0,"bm":0},{"ddd":0,"ind":7,"ty":4,"nm":"ClockWidget","parent":1,"sr":1,"ks":{"o":{"a":0,"k":100,"ix":11},"r":{"a":0,"k":0,"ix":10},"p":{"a":0,"k":[-43.884,109,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":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0]],"v":[[4.968,-22.5],[4.968,0],[9.108,0],[9.108,-26.244],[1.62,-26.244],[1.62,-22.5]],"c":true},"ix":2},"nm":"1","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fläche 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":"Transformieren"}],"nm":"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":[[0,0],[0,0],[0,0],[0,0],[0,0],[0,0],[-1.212,1.26],[-0.876,1.596],[0,1.728],[1.476,1.44],[2.616,0],[1.572,-1.452],[0.072,-2.736],[0,0],[-0.78,0.9],[-1.416,0],[-0.684,-0.816],[0,-1.44],[0.888,-1.392],[1.332,-1.284],[2.304,-1.992]],"o":[[0,0],[0,0],[0,0],[0,0],[0,0],[1.872,-1.656],[1.212,-1.26],[0.876,-1.596],[0,-2.4],[-1.476,-1.44],[-2.424,0],[-1.572,1.452],[0,0],[0.048,-1.512],[0.78,-0.9],[1.464,0],[0.684,0.816],[0,1.392],[-0.888,1.392],[-1.332,1.284],[0,0]],"v":[[14.436,-3.348],[14.436,-0.36],[31.932,-0.36],[31.932,-3.78],[20.52,-3.78],[22.14,-5.22],[26.766,-9.594],[29.898,-13.878],[31.212,-18.864],[28.998,-24.624],[22.86,-26.784],[16.866,-24.606],[14.4,-18.324],[18.36,-18.324],[19.602,-21.942],[22.896,-23.292],[26.118,-22.068],[27.144,-18.684],[25.812,-14.508],[22.482,-10.494],[17.028,-5.58]],"c":true},"ix":2},"nm":"2","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fläche 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":"Transformieren"}],"nm":"2","np":3,"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.744,0],[-0.504,0.504],[0,0.744],[0.504,0.504],[0.72,0],[0.504,-0.504],[0,-0.744],[-0.504,-0.504]],"o":[[0.72,0],[0.504,-0.504],[0,-0.744],[-0.504,-0.504],[-0.744,0],[-0.504,0.504],[0,0.744],[0.504,0.504]],"v":[[37.728,0.252],[39.564,-0.504],[40.32,-2.376],[39.564,-4.248],[37.728,-5.004],[35.856,-4.248],[35.1,-2.376],[35.856,-0.504]],"c":true},"ix":2},"nm":":","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[-0.744,0],[-0.504,0.504],[0,0.744],[0.504,0.504],[0.72,0],[0.504,-0.504],[0,-0.744],[-0.504,-0.504]],"o":[[0.72,0],[0.504,-0.504],[0,-0.744],[-0.504,-0.504],[-0.744,0],[-0.504,0.504],[0,0.744],[0.504,0.504]],"v":[[37.728,-14.868],[39.564,-15.624],[40.32,-17.496],[39.564,-19.368],[37.728,-20.124],[35.856,-19.368],[35.1,-17.496],[35.856,-15.624]],"c":true},"ix":2},"nm":":","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Pfade zusammenführen 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fläche 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":"Transformieren"}],"nm":":","np":5,"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,-4.152],[-1.404,-2.364],[-3.432,0],[-1.404,2.364],[0,4.2],[1.404,2.34],[3.432,0],[1.404,-2.34]],"o":[[0,4.2],[1.404,2.364],[3.432,0],[1.404,-2.364],[0,-4.152],[-1.404,-2.34],[-3.432,0],[-1.404,2.34]],"v":[[44.351,-13.464],[46.457,-3.618],[53.711,-0.072],[60.965,-3.618],[63.071,-13.464],[60.965,-23.202],[53.711,-26.712],[46.457,-23.202]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,-1.944],[0.24,-1.368],[0.78,-0.84],[1.512,0],[0.78,0.84],[0.24,1.368],[0,2.016],[-0.252,1.344],[-0.768,0.852],[-1.512,0],[-0.768,-0.852],[-0.252,-1.344]],"o":[[0,2.016],[-0.24,1.368],[-0.78,0.84],[-1.512,0],[-0.78,-0.84],[-0.24,-1.368],[0,-1.944],[0.252,-1.344],[0.768,-0.852],[1.512,0],[0.768,0.852],[0.252,1.344]],"v":[[59.039,-13.464],[58.679,-8.388],[57.149,-5.076],[53.711,-3.816],[50.273,-5.076],[48.743,-8.388],[48.383,-13.464],[48.761,-18.396],[50.291,-21.69],[53.711,-22.968],[57.131,-21.69],[58.661,-18.396]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Pfade zusammenführen 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fläche 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":"Transformieren"}],"nm":"0","np":5,"cix":2,"bm":0,"ix":4,"mn":"ADBE Vector Group","hd":false},{"ty":"gr","it":[{"ind":0,"ty":"sh","ix":1,"ks":{"a":0,"k":{"i":[[0,-4.152],[-1.404,-2.364],[-3.432,0],[-1.404,2.364],[0,4.2],[1.404,2.34],[3.432,0],[1.404,-2.34]],"o":[[0,4.2],[1.404,2.364],[3.432,0],[1.404,-2.364],[0,-4.152],[-1.404,-2.34],[-3.432,0],[-1.404,2.34]],"v":[[67.427,-13.464],[69.533,-3.618],[76.787,-0.072],[84.041,-3.618],[86.147,-13.464],[84.041,-23.202],[76.787,-26.712],[69.533,-23.202]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false},{"ind":1,"ty":"sh","ix":2,"ks":{"a":0,"k":{"i":[[0,-1.944],[0.24,-1.368],[0.78,-0.84],[1.512,0],[0.78,0.84],[0.24,1.368],[0,2.016],[-0.252,1.344],[-0.768,0.852],[-1.512,0],[-0.768,-0.852],[-0.252,-1.344]],"o":[[0,2.016],[-0.24,1.368],[-0.78,0.84],[-1.512,0],[-0.78,-0.84],[-0.24,-1.368],[0,-1.944],[0.252,-1.344],[0.768,-0.852],[1.512,0],[0.768,0.852],[0.252,1.344]],"v":[[82.115,-13.464],[81.755,-8.388],[80.225,-5.076],[76.787,-3.816],[73.349,-5.076],[71.819,-8.388],[71.459,-13.464],[71.837,-18.396],[73.367,-21.69],[76.787,-22.968],[80.207,-21.69],[81.737,-18.396]],"c":true},"ix":2},"nm":"0","mn":"ADBE Vector Shape - Group","hd":false},{"ty":"mm","mm":1,"nm":"Pfade zusammenführen 1","mn":"ADBE Vector Filter - Merge","hd":false},{"ty":"fl","c":{"a":0,"k":[0.921568986481,0.921568986481,0.921568986481,1],"ix":4},"o":{"a":0,"k":100,"ix":5},"r":1,"bm":0,"nm":"Fläche 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":"Transformieren"}],"nm":"0","np":5,"cix":2,"bm":0,"ix":5,"mn":"ADBE Vector Group","hd":false}],"ip":0,"op":245,"st":0,"bm":0}],"markers":[]} \ No newline at end of file diff --git a/preferences/src/main/proto/settings.proto b/preferences/src/main/proto/settings.proto index 359729fc..279e7581 100644 --- a/preferences/src/main/proto/settings.proto +++ b/preferences/src/main/proto/settings.proto @@ -68,6 +68,7 @@ message Settings { enum Layout { PullDown = 0; Pager = 1; + PagerReversed = 2; } Layout layout = 9; diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt index fe9c1a3e..95a03863 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/LauncherActivity.kt @@ -122,7 +122,8 @@ class LauncherActivity : BaseActivity() { darkNavBarIcons = lightNav, ) } - Settings.AppearanceSettings.Layout.Pager -> { + Settings.AppearanceSettings.Layout.Pager, + Settings.AppearanceSettings.Layout.PagerReversed -> { PagerScaffold( modifier = Modifier .fillMaxSize() @@ -133,6 +134,7 @@ class LauncherActivity : BaseActivity() { }, darkStatusBarIcons = lightStatus, darkNavBarIcons = lightNav, + reverse = layout == Settings.AppearanceSettings.Layout.PagerReversed ) } else -> {} diff --git a/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt b/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt index ca08e8ae..133d81dc 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/launcher/PagerScaffold.kt @@ -28,8 +28,10 @@ import androidx.compose.ui.input.nestedscroll.NestedScrollConnection import androidx.compose.ui.input.nestedscroll.NestedScrollSource import androidx.compose.ui.input.nestedscroll.nestedScroll import androidx.compose.ui.platform.LocalDensity +import androidx.compose.ui.platform.LocalLayoutDirection import androidx.compose.ui.res.stringResource import androidx.compose.ui.unit.IntOffset +import androidx.compose.ui.unit.LayoutDirection import androidx.compose.ui.unit.Velocity import androidx.compose.ui.unit.dp import androidx.lifecycle.viewmodel.compose.viewModel @@ -53,6 +55,7 @@ fun PagerScaffold( modifier: Modifier = Modifier, darkStatusBarIcons: Boolean = false, darkNavBarIcons: Boolean = false, + reverse: Boolean = false, ) { val viewModel: LauncherScaffoldVM = viewModel() val searchVM: SearchVM = viewModel() @@ -213,9 +216,11 @@ fun PagerScaffold( val widthPx = width.toPixels() + val originalLayoutDirection = LocalLayoutDirection.current CompositionLocalProvider( - LocalOverscrollConfiguration provides null + LocalOverscrollConfiguration provides null, + LocalLayoutDirection provides if (reverse) LayoutDirection.Rtl else LayoutDirection.Ltr ) { Row( @@ -232,61 +237,67 @@ fun PagerScaffold( thresholds = { _, _ -> FractionalThreshold(0.5f) }, - enabled = !isWidgetEditMode + enabled = !isWidgetEditMode, + reverseDirection = reverse, ) .offset { IntOffset(swipeableState.offset.value.roundToInt(), 0) - } + }, ) { + CompositionLocalProvider( + LocalLayoutDirection provides originalLayoutDirection + ) { - val editModePadding by animateDpAsState(if (isWidgetEditMode) 56.dp else 0.dp) - val clockPadding by animateDpAsState( - if (isWidgetsScrollZero) 64.dp + insets.calculateBottomPadding() else 0.dp - ) + val editModePadding by animateDpAsState(if (isWidgetEditMode) 56.dp else 0.dp) - val clockHeight by remember { - derivedStateOf { - height - (64.dp + insets.calculateTopPadding() + insets.calculateBottomPadding() - clockPadding) + val clockPadding by animateDpAsState( + if (isWidgetsScrollZero) 64.dp + insets.calculateBottomPadding() else 0.dp + ) + + val clockHeight by remember { + derivedStateOf { + height - (64.dp + insets.calculateTopPadding() + insets.calculateBottomPadding() - clockPadding) + } } + + WidgetColumn( + modifier = Modifier + .requiredWidth(width) + .fillMaxHeight() + .nestedScroll(nestedScrollConnection) + .verticalScroll(widgetsScrollState) + .windowInsetsPadding(WindowInsets.safeDrawing) + .padding(horizontal = 8.dp) + .padding(top = 8.dp, bottom = 64.dp) + .padding(top = editModePadding), + clockHeight = { clockHeight }, + clockBottomPadding = { clockPadding }, + editMode = isWidgetEditMode, + onEditModeChange = { + viewModel.setWidgetEditMode(it) + } + ) + + + val websearches by searchVM.websearchResults.observeAsState(emptyList()) + val webSearchPadding by animateDpAsState( + if (websearches.isEmpty()) 0.dp else 48.dp + ) + SearchColumn( + modifier = Modifier + .requiredWidth(width) + .fillMaxHeight() + .verticalScroll(searchScrollState, reverseScrolling = true) + .imePadding() + .windowInsetsPadding(WindowInsets.safeDrawing) + .padding(horizontal = 8.dp) + .padding(top = 8.dp, bottom = 64.dp) + .padding(bottom = webSearchPadding), + reverse = true, + ) } - - WidgetColumn( - modifier = Modifier - .requiredWidth(width) - .fillMaxHeight() - .nestedScroll(nestedScrollConnection) - .verticalScroll(widgetsScrollState) - .windowInsetsPadding(WindowInsets.safeDrawing) - .padding(horizontal = 8.dp) - .padding(top = 8.dp, bottom = 64.dp) - .padding(top = editModePadding), - clockHeight = { clockHeight }, - clockBottomPadding = { clockPadding }, - editMode = isWidgetEditMode, - onEditModeChange = { - viewModel.setWidgetEditMode(it) - } - ) - - - val websearches by searchVM.websearchResults.observeAsState(emptyList()) - val webSearchPadding by animateDpAsState( - if (websearches.isEmpty()) 0.dp else 48.dp - ) - SearchColumn( - modifier = Modifier - .requiredWidth(width) - .fillMaxHeight() - .verticalScroll(searchScrollState, reverseScrolling = true) - .imePadding() - .windowInsetsPadding(WindowInsets.safeDrawing) - .padding(horizontal = 8.dp) - .padding(top = 8.dp, bottom = 64.dp) - .padding(bottom = webSearchPadding), - reverse = true, - ) } } } diff --git a/ui/src/main/java/de/mm20/launcher2/ui/layout/Arrangement.kt b/ui/src/main/java/de/mm20/launcher2/ui/layout/Arrangement.kt index f2f1f031..5cd2441c 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/layout/Arrangement.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/layout/Arrangement.kt @@ -29,6 +29,7 @@ internal fun placeRightOrBottom( current += it } } + private inline fun IntArray.forEachIndexed(reversed: Boolean, action: (Int, Int) -> Unit) { if (!reversed) { forEachIndexed(action) diff --git a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt index 1f03c47e..1c591ace 100644 --- a/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt +++ b/ui/src/main/java/de/mm20/launcher2/ui/settings/appearance/AppearanceSettingsScreen.kt @@ -481,6 +481,7 @@ fun LayoutPreference( when (layouts[it]) { AppearanceSettings.Layout.PullDown -> R.raw.lottie_scaffold_pulldown AppearanceSettings.Layout.Pager -> R.raw.lottie_scaffold_pager + AppearanceSettings.Layout.PagerReversed -> R.raw.lottie_scaffold_pager_reverse else -> 0 } )