commit initial app

This commit is contained in:
Alexander Mahr 2024-12-26 16:45:25 +01:00
parent deeff3bd2d
commit aa1419e8bf
4 changed files with 138 additions and 42 deletions

22
app/AndroidManifest.xml Normal file
View file

@ -0,0 +1,22 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="app.persistence"
android:versionCode="1"
android:versionName="1.0">
<uses-sdk android:minSdkVersion="30"
android:targetSdkVersion="33"/>
<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.ACCESS_NOTIFICATIONS"/>
<application android:label="persistence" android:icon="@drawable/appicon">
<activity android:name="app.persistence.AppActivity"
android:exported="true"
android:configChanges="orientation|screenSize|keyboardHidden"
android:label="persistence">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

7
app/app-config.sh Normal file
View file

@ -0,0 +1,7 @@
APP_NAME='persistence'
APP_PACKAGE='app.persistence'
APP_VERSION_SDK_TARGET='33'
APP_VERSION_SDK_MIN='30'
APP_PERMISSIONS='<uses-permission android:name="android.permission.INTERNET"/>
<uses-permission android:name="android.permission.POST_NOTIFICATIONS"/>
<uses-permission android:name="android.permission.ACCESS_NOTIFICATIONS"/>'

View file

@ -4,50 +4,114 @@
<meta charset="UTF-8"> <meta charset="UTF-8">
<meta content="width=device-width,initial-scale=1.0" name="viewport"> <meta content="width=device-width,initial-scale=1.0" name="viewport">
</head> </head>
<style> <script>
@keyframes wobble {
0% { function sleepit(ms) {
transform: scale(0.1); return new Promise((resolve) => {
/* transform: rotate(-5deg); setTimeout(() => {
transform: rotate(5deg);*/ resolve(1);
opacity:0.0 }, ms);
} });
22% {
transform: scale(2.0);
/*/ transform: rotate(-5deg);*/
opacity:1.0
}
99% {
transform: scale(1.0);
/*/ transform: rotate(-5deg);*/
opacity:0.0
}
} }
</style> function divMessage(html){
<body style=" background: radial-gradient(#111, #000);"> var div = document.createElement('div');
<h1> SUPER</h1> div.innerHTML=html;
<script> document.body.appendChild(div);
var count=0; div.scrollIntoView({ behavior: 'smooth'});
window.addEventListener("load",()=>{ }
function insert(){
count++; (async function webviewprogram(){
var h2 = document.createElement("h2"); var port;
h2.textContent=" "+ count + ". javascript works" var resolves = [];
h2.style.color="#"+Math.random().toString(16).slice(3,9); function setupMessage(){
// h2.style.transform="rotate("+((Math.random()*3600)|0)/10+"deg)"; divMessage("starting SetupMessage()");
h2.style.fontSize=""+Math.random()*20+"pt"; try{
h2.style.textAlign="center";
h2.style.animation="wobble 5s ease-in-out infinite alternate" return new Promise((resolve) => {
document.body.insertBefore(h2,document.body.children[(document.body.children.length*Math.random())|0]) window.addEventListener('message',(e)=>{
// h2.scrollIntoView({"behavior":"smooth"}); if(e.data=="init-from-java" && ! port){
if(document.body.children.length>15){ divMessage('INIT');
document.body.children[(document.body.children.length*Math.random())|0].remove(); port = e.ports[0];
port.onmessage = function (ee) {
divMessage('AAport.onmessage='+ee.data);
var response = JSON.parse(ee.data);
divMessage('response.resolveIndex'+response.resolveIndex);//AAport.onmessage='+ee.data);
var localresolve = resolves[response.resolveIndex];
divMessage(typeof localresolve)
localresolve(response);
} }
setTimeout(()=>{window.requestAnimationFrame(insert);},100); resolve()
} }
insert(); divMessage('message='+e.data);
},true);
});
} catch(error){
divMessage('setuperror');
divMessage('setuperror='+error.toString());
}
}
function doTest(){
divMessage('doTest');
return new Promise((resolve) => {
divMessage('resolves.length'+resolves.length);
resolves.push(resolve);
divMessage('after push resolves.length'+resolves.length);
port.postMessage('{"function":"test","resolveIndex":"'+(resolves.length-1)+'"}');
});
}
// function doLs(path){
// divMessage('doLs');
// return new Promise((resolve) => {
// divMessage('resolves.length'+resolves.length);
// resolves.push(resolve);
// divMessage('after push resolves.length'+resolves.length);
// port.postMessage('{"function":"ls","path":"'+path+'","resolveIndex":"'+(resolves.length-1)+'"}');
// });
// }
// function doCat(file){
// return new Promise((resolve) => {
// resolves.push(resolve);
// port.postMessage('{"function":"cat","resolveIndex":"'+resolves.length+'"}');
// });
// }
function doLoadedWait(){
return new Promise((resolve) => {
window.addEventListener('load',()=>{
resolve();
},false); },false);
</script> });
</body> }
window.addEventListener('load',()=>{
divMessage('JAVASCRIPT WORKS');
},false);
await doLoadedWait();
// await sleepit(2000);
// divMessage('awaited 2000');
// await sleepit(2000);
// divMessage('awaited again 2000');
// divMessage("before.setup 1");
divMessage('before.setup');
await setupMessage();
divMessage('setup');
async function mapDoTest(){
divMessage("doTest ");
var reply = await doTest();
divMessage("reply was",JSON.stringify(reply));
// divMessage("reply.result.length"+reply.result.length);
// reply.result.forEach((info)=>{
// divMessage(JSON.stringify(info));
// // divMessage(info.info);//reply.result.length"+reply.result.length);
// });
}
await mapDoTest();
divMessage("done");
// for(let file of DCIM.result){
// divMessage("filename");
// });
})();
</script>
<body>
<input type=text />
</body>
</html> </html>

View file

@ -6,4 +6,7 @@
<path <path
android:pathData="M95 50A45 45 0 0 1 5 50A45 45 0 0 1 95 50Z" android:pathData="M95 50A45 45 0 0 1 5 50A45 45 0 0 1 95 50Z"
android:fillColor="#FF0000" /> android:fillColor="#FF0000" />
<path
android:pathData="M75 50A25 25 0 0 1 25 50A25 25 0 0 1 75 50Z"
android:fillColor="#FFFF00" />
</vector> </vector>