Skip to content
GitLab
Menu
Projects
Groups
Snippets
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
hds
flexin
android-app
Commits
de236bd2
Commit
de236bd2
authored
Nov 16, 2017
by
Nastuzzi Samy
Browse files
Handle updates
Can check for updates (called in creation) Launcher bug fixed
parent
5c8657b3
Changes
6
Hide whitespace changes
Inline
Side-by-side
app/src/main/AndroidManifest.xml
View file @
de236bd2
...
...
@@ -15,7 +15,7 @@
android:icon=
"@mipmap/ic_launcher"
android:label=
"@string/app_name"
android:roundIcon=
"@mipmap/ic_launcher_round"
android:launchMode=
"single
Task
"
android:launchMode=
"single
Instance
"
android:theme=
"@style/AppTheme"
>
<activity
android:name=
"fr.utc.simde.jessy.MainActivity"
android:configChanges=
"orientation"
...
...
app/src/main/java/fr/utc/simde/jessy/BaseActivity.java
View file @
de236bd2
package
fr.utc.simde.jessy
;
import
android.Manifest
;
import
android.app.Activity
;
import
android.app.DownloadManager
;
import
android.content.BroadcastReceiver
;
import
android.content.Context
;
import
android.content.DialogInterface
;
import
android.content.Intent
;
import
android.content.IntentFilter
;
import
android.content.SharedPreferences
;
import
android.content.pm.PackageManager
;
import
android.net.Uri
;
import
android.os.Build
;
import
android.os.Bundle
;
import
android.os.Environment
;
import
android.support.v4.app.ActivityCompat
;
import
android.support.v7.app.AlertDialog
;
import
android.util.Log
;
import
android.widget.BaseAdapter
;
import
android.widget.TextView
;
import
com.fasterxml.jackson.databind.JsonNode
;
import
java.io.File
;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
fr.utc.simde.jessy.tools.CASConnexion
;
import
fr.utc.simde.jessy.tools.Config
;
...
...
@@ -28,6 +43,10 @@ import fr.utc.simde.jessy.tools.NemopaySession;
public
abstract
class
BaseActivity
extends
NFCActivity
{
private
static
final
String
LOG_TAG
=
"_BaseActivity"
;
private
static
final
String
gitUrl
=
"https://raw.githubusercontent.com/simde-utc/jessy/master/"
;
private
static
final
String
manifestUrl
=
"app/src/main/AndroidManifest.xml"
;
private
static
final
String
downloadLocation
=
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DOWNLOADS
)
+
"/"
;
protected
static
NemopaySession
nemopaySession
;
protected
static
Ginger
ginger
;
protected
static
CASConnexion
casConnexion
;
...
...
@@ -539,4 +558,110 @@ public abstract class BaseActivity extends NFCActivity {
ginger
.
setKey
(
key
);
}
protected
boolean
haveStoragePermission
()
{
if
(
Build
.
VERSION
.
SDK_INT
>=
23
)
{
if
(
checkSelfPermission
(
android
.
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
==
PackageManager
.
PERMISSION_GRANTED
)
{
return
true
;
}
else
{
ActivityCompat
.
requestPermissions
(
this
,
new
String
[]{
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
},
1
);
return
false
;
}
}
else
return
true
;
}
protected
void
checkUpdate
()
{
checkUpdate
(
true
);
}
protected
void
checkUpdate
(
final
boolean
popupIfNot
)
{
dialog
.
startLoading
(
BaseActivity
.
this
,
getString
(
R
.
string
.
information_collection
),
getString
(
R
.
string
.
check_update
));
new
Thread
()
{
@Override
public
void
run
()
{
HTTPRequest
httpRequest
=
new
HTTPRequest
(
gitUrl
+
manifestUrl
);
httpRequest
.
get
();
try
{
final
Matcher
matcher
=
Pattern
.
compile
(
"android:versionCode=\"([0-9]*)\".*android:versionName=\"(\\S*)\""
).
matcher
(
httpRequest
.
getResponse
());
if
(
matcher
.
find
())
{
if
(
BuildConfig
.
VERSION_CODE
>
Integer
.
parseInt
(
matcher
.
group
(
1
)))
{
runOnUiThread
(
new
Runnable
()
{
@Override
public
void
run
()
{
final
AlertDialog
.
Builder
alertDialogBuilder
=
new
AlertDialog
.
Builder
(
BaseActivity
.
this
);
alertDialogBuilder
.
setTitle
(
R
.
string
.
update
)
.
setMessage
(
getString
(
R
.
string
.
available_update
)
+
"\n"
+
getString
(
R
.
string
.
actual_version
)
+
": "
+
BuildConfig
.
VERSION_NAME
+
"\n"
+
getString
(
R
.
string
.
available_version
)
+
": "
+
matcher
.
group
(
2
))
.
setCancelable
(
false
)
.
setPositiveButton
(
R
.
string
.
set_update
,
new
DialogInterface
.
OnClickListener
()
{
public
void
onClick
(
DialogInterface
dialogInterface
,
int
id
)
{
if
(!
update
(
matcher
.
group
(
2
)))
{
dialog
.
stopLoading
();
dialog
.
errorDialog
(
BaseActivity
.
this
,
getString
(
R
.
string
.
update
),
getString
(
R
.
string
.
can_not_update
));
}
}
})
.
setNegativeButton
(
R
.
string
.
cancel
,
null
);
dialog
.
createDialog
(
alertDialogBuilder
);
}
});
}
else
if
(
popupIfNot
)
throw
new
Exception
(
getString
(
R
.
string
.
no_update
));
}
else
throw
new
Exception
(
getString
(
R
.
string
.
can_not_detect_update
));
}
catch
(
final
Exception
e
)
{
Log
.
e
(
LOG_TAG
,
"error: "
+
e
.
getMessage
());
runOnUiThread
(
new
Runnable
()
{
@Override
public
void
run
()
{
dialog
.
stopLoading
();
dialog
.
errorDialog
(
BaseActivity
.
this
,
getString
(
R
.
string
.
update
),
e
.
getMessage
()
+
"\n"
+
getString
(
R
.
string
.
actual_version
)
+
": "
+
BuildConfig
.
VERSION_NAME
);
}
});
}
}
}.
start
();
}
protected
boolean
update
(
final
String
version
)
{
final
String
destination
=
this
.
downloadLocation
+
getString
(
R
.
string
.
app_name
)
+
" "
+
version
+
".apk"
;
final
String
url
=
this
.
gitUrl
+
getString
(
R
.
string
.
app_name
)
+
" "
+
version
+
".apk"
;
final
Uri
uri
=
Uri
.
parse
(
"file://"
+
destination
);
if
(!
haveStoragePermission
())
return
false
;
File
file
=
new
File
(
destination
);
if
(
file
.
exists
())
file
.
delete
();
DownloadManager
.
Request
request
=
new
DownloadManager
.
Request
(
Uri
.
parse
(
url
));
request
.
setDescription
(
getString
(
R
.
string
.
update
));
request
.
setTitle
(
getString
(
R
.
string
.
app_name
));
request
.
setDestinationUri
(
uri
);
final
DownloadManager
manager
=
(
DownloadManager
)
getSystemService
(
DOWNLOAD_SERVICE
);
final
long
downloadId
=
manager
.
enqueue
(
request
);
BroadcastReceiver
onComplete
=
new
BroadcastReceiver
()
{
public
void
onReceive
(
Context
ctx
,
Intent
intent
)
{
Intent
install
=
new
Intent
(
Intent
.
ACTION_VIEW
);
install
.
setFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
);
install
.
setDataAndType
(
uri
,
"application/vnd.android.package-archive"
);
startActivity
(
install
);
unregisterReceiver
(
this
);
finish
();
}
};
registerReceiver
(
onComplete
,
new
IntentFilter
(
DownloadManager
.
ACTION_DOWNLOAD_COMPLETE
));
return
true
;
}
}
app/src/main/java/fr/utc/simde/jessy/FoundationsOptionsActivity.java
View file @
de236bd2
...
...
@@ -35,10 +35,13 @@ import java.io.File;
import
java.util.ArrayList
;
import
java.util.Arrays
;
import
java.util.List
;
import
java.util.regex.Matcher
;
import
java.util.regex.Pattern
;
import
fr.utc.simde.jessy.adapters.FoundationsAdapter
;
import
fr.utc.simde.jessy.adapters.OptionChoicesAdapter
;
import
fr.utc.simde.jessy.adapters.OptionsAdapter
;
import
fr.utc.simde.jessy.tools.HTTPRequest
;
/**
* Created by Samy on 26/10/2017.
...
...
@@ -47,10 +50,6 @@ import fr.utc.simde.jessy.adapters.OptionsAdapter;
public
class
FoundationsOptionsActivity
extends
BaseActivity
{
private
static
final
String
LOG_TAG
=
"_FoundationsOptionsActi"
;
private
static
final
String
gitUrl
=
"https://raw.githubusercontent.com/simde-utc/jessy/master/"
;
private
static
final
String
manifestUrl
=
"app/src/main/AndroidManifest.xml"
;
private
static
final
String
downloadLocation
=
Environment
.
getExternalStoragePublicDirectory
(
Environment
.
DIRECTORY_DOWNLOADS
)
+
"/"
;
TabHost
tabHost
;
ListView
foundationList
;
ListView
optionList
;
...
...
@@ -148,7 +147,7 @@ public class FoundationsOptionsActivity extends BaseActivity {
else
if
(
isOption
(
position
,
7
))
keyGingerDialog
();
else
if
(
isOption
(
position
,
8
))
update
(
"0.8.4"
);
checkUpdate
(
);
else
configDialog
();
}
...
...
@@ -157,55 +156,6 @@ public class FoundationsOptionsActivity extends BaseActivity {
this
.
optionList
.
setAdapter
(
this
.
optionsAdapter
);
}
public
boolean
haveStoragePermission
()
{
if
(
Build
.
VERSION
.
SDK_INT
>=
23
)
{
if
(
checkSelfPermission
(
android
.
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
)
==
PackageManager
.
PERMISSION_GRANTED
)
{
return
true
;
}
else
{
ActivityCompat
.
requestPermissions
(
this
,
new
String
[]{
Manifest
.
permission
.
WRITE_EXTERNAL_STORAGE
},
1
);
return
false
;
}
}
else
return
true
;
}
protected
boolean
update
(
final
String
version
)
{
final
String
destination
=
this
.
downloadLocation
+
getString
(
R
.
string
.
app_name
)
+
" "
+
version
+
".apk"
;
final
String
url
=
this
.
gitUrl
+
getString
(
R
.
string
.
app_name
)
+
" "
+
version
+
".apk"
;
final
Uri
uri
=
Uri
.
parse
(
"file://"
+
destination
);
if
(!
haveStoragePermission
())
return
false
;
File
file
=
new
File
(
destination
);
if
(
file
.
exists
())
file
.
delete
();
DownloadManager
.
Request
request
=
new
DownloadManager
.
Request
(
Uri
.
parse
(
url
));
request
.
setDescription
(
getString
(
R
.
string
.
update
));
request
.
setTitle
(
getString
(
R
.
string
.
app_name
));
request
.
setDestinationUri
(
uri
);
final
DownloadManager
manager
=
(
DownloadManager
)
getSystemService
(
DOWNLOAD_SERVICE
);
BroadcastReceiver
onComplete
=
new
BroadcastReceiver
()
{
public
void
onReceive
(
Context
ctx
,
Intent
intent
)
{
Intent
install
=
new
Intent
(
Intent
.
ACTION_VIEW
);
install
.
setFlags
(
Intent
.
FLAG_ACTIVITY_NEW_TASK
);
install
.
setDataAndType
(
uri
,
"application/vnd.android.package-archive"
);
startActivity
(
install
);
unregisterReceiver
(
this
);
finish
();
}
};
registerReceiver
(
onComplete
,
new
IntentFilter
(
DownloadManager
.
ACTION_DOWNLOAD_COMPLETE
));
return
true
;
}
protected
void
keyNemopayDialog
()
{
hasRights
(
getString
(
R
.
string
.
nemopay
),
new
String
[]{},
new
Runnable
(){
@Override
...
...
app/src/main/java/fr/utc/simde/jessy/MainActivity.java
View file @
de236bd2
...
...
@@ -92,6 +92,7 @@ public class MainActivity extends BaseActivity {
});
setConfig
();
checkUpdate
(
false
);
}
@Override
...
...
app/src/main/res/values/options.xml
View file @
de236bd2
...
...
@@ -9,6 +9,6 @@
<item>
Gestion des cartes/cotisations
</item>
<item>
Modifier la clé Nemopay
</item>
<item>
Modifier la clé Ginger
</item>
<item>
Vérifier les
mise
s
à jour
</item>
<item>
Rechercher une
mise à jour
</item>
</string-array>
</resources>
\ No newline at end of file
app/src/main/res/values/strings.xml
View file @
de236bd2
...
...
@@ -57,6 +57,7 @@
<string
name=
"short_tag"
>
Numéro raccourci
</string>
<string
name=
"type"
>
Type
</string>
<string
name=
"day_s_"
>
jour(s)
</string>
<string
name=
"update"
>
Mise à jour
</string>
<string
name=
"author"
>
<
/
>
avec ♥ par Samy NASTUZZI
</string>
<string
name=
"error_unexpected"
>
Une erreur improbable a eu lieu
</string>
...
...
@@ -149,6 +150,14 @@
<string
name=
"contribute_ext"
>
Extérieur (20€)
</string>
<string
name=
"contribute_admin"
>
Membre d\'honneur (0€)
</string>
<string
name=
"contribute_temp"
>
Temporaire
</string>
<string
name=
"set_update"
>
Mettre à jour
</string>
<string
name=
"check_update"
>
Recherche d\'une mise à jour
</string>
<string
name=
"available_update"
>
Mise à jour disponible
</string>
<string
name=
"can_not_detect_update"
>
Impossible de détecter si une mise à jour disponible
</string>
<string
name=
"can_not_update"
>
Impossible de réaliser la mise à jour
</string>
<string
name=
"no_update"
>
Aucune mise à jour disponible
</string>
<string
name=
"actual_version"
>
Version actuelle
</string>
<string
name=
"available_version"
>
Version disponible
</string>
<string
name=
"print_mode"
>
Mode d\'affichage
</string>
<string
name=
"filters"
>
Filtres d\'affichage
</string>
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment