Skip to content

Commit 990babd

Browse files
authored
Merge pull request #39 from SirkoVZ/master
diverses
2 parents b3acafe + 523bd73 commit 990babd

18 files changed

Lines changed: 535 additions & 240 deletions

.gitignore

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -202,3 +202,5 @@ gradle-app.setting
202202
# gradle/wrapper/gradle-wrapper.properties
203203

204204
# End of https://www.gitignore.io/api/java,gradle,android,androidstudio
205+
206+
gradle.properties

README.md

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@ Download: [https://github.com/volkszaehler/app-android/releases/latest](https://
99
![ScreenShot3](http://wiki.volkszaehler.org/_media/software/frontends/vz_app/grafik.png?w=200&tok=3e01fa "ScreenShots 3 of VolkszaehlerApp")
1010
![ScreenShot4](http://wiki.volkszaehler.org/_media/software/frontends/vz_app/einstellungen.png?w=200&tok=ede86f "ScreenShots 4 of VolkszaehlerApp")
1111

12-
## VolkszählerApp für Android, Version 0.9.6
12+
## VolkszählerApp für Android, Version 0.9.7
1313

1414

1515
Funktionen:
@@ -37,7 +37,7 @@ Wenn das Clonen bzw. das Öffnen des Projektes wegen eines ausgegrauten "Use def
3737
---
3838

3939
English:
40-
## VolkszaehlerApp for Android, Version 0.9.6
40+
## VolkszaehlerApp for Android, Version 0.9.7
4141

4242

4343
Features:
@@ -61,6 +61,17 @@ If the cloning resp. opening of the project fails due to a grayed "Use default g
6161
- open the Project again as "Open an existing Android Studio project" and clock "OK" in the "Gradle Sync" Dialog
6262
- If necessary, choose the "Unregistered Root" in Settings => Version Control and click the green plus "+"
6363

64+
## Version history:
65+
### Version 0.9.7
66+
#### New
67+
- Asks for Permission to store/read backups (starting with Android 6)
68+
69+
#### Fixed
70+
- Backups work also with Android 6 and newer (https://github.com/volkszaehler/app-android/issues/38)
71+
72+
#### Changed
73+
- Backup file is stored in download folder now
74+
- small optimizations
6475

6576
## Version history:
6677
### Version 0.9.6

app/build.gradle

Lines changed: 14 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,29 +1,35 @@
11
apply plugin: 'com.android.application'
22

33
android {
4-
compileSdkVersion 24
5-
buildToolsVersion '26.0.2'
6-
4+
signingConfigs {
5+
release {
6+
storeFile new File(RELEASE_STORE_FILE)
7+
storePassword RELEASE_STORE_PASSWORD
8+
keyAlias RELEASE_KEY_ALIAS
9+
keyPassword RELEASE_KEY_PASSWORD
10+
}
11+
}
12+
compileSdkVersion 27
13+
buildToolsVersion '27.0.2'
714
defaultConfig {
815
applicationId "org.volkszaehler.volkszaehlerapp"
916
minSdkVersion 14
10-
targetSdkVersion 24
17+
targetSdkVersion 27
1118
}
12-
1319
compileOptions {
1420
encoding "UTF-8"
1521
}
16-
1722
buildTypes {
1823
release {
19-
minifyEnabled false
24+
signingConfig signingConfigs.release
25+
minifyEnabled true
2026
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.txt'
2127
}
2228
}
23-
2429
useLibrary 'org.apache.http.legacy'
2530
}
2631

2732
dependencies {
2833
compile 'com.github.ddanny:achartengine:e49b62b'
34+
compile 'com.android.support:appcompat-v7:27.0.2'
2935
}

app/src/main/AndroidManifest.xml

Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,33 +1,31 @@
11
<?xml version="1.0" encoding="utf-8"?>
22
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
33
package="org.volkszaehler.volkszaehlerapp"
4-
android:versionCode="96"
5-
android:versionName="0.9.6">
6-
7-
<uses-permission android:name="android.permission.INTERNET"/>
8-
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
4+
android:installLocation="auto"
5+
android:versionCode="97"
6+
android:versionName="0.9.7">
97

8+
<uses-permission android:name="android.permission.INTERNET" />
9+
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
1010

1111
<application
1212
android:allowBackup="false"
1313
android:icon="@drawable/ic_launcher"
1414
android:label="@string/app_name"
1515
android:theme="@style/AppTheme">
16-
17-
1816
<activity
1917
android:name=".MainActivity"
2018
android:configChanges="orientation|screenSize"
2119
android:label="@string/app_name">
2220
<intent-filter>
23-
<action android:name="android.intent.action.MAIN"/>
21+
<action android:name="android.intent.action.MAIN" />
2422

25-
<category android:name="android.intent.category.LAUNCHER"/>
23+
<category android:name="android.intent.category.LAUNCHER" />
2624
</intent-filter>
2725
</activity>
2826
<activity
2927
android:name=".Preferences"
30-
android:label="@string/app_name"/>
28+
android:label="@string/app_name" />
3129
<activity
3230
android:name=".ChannelDetails"
3331
android:label="@string/app_name">

app/src/main/java/org/volkszaehler/volkszaehlerapp/ChannelDetails.java

Lines changed: 1 addition & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package org.volkszaehler.volkszaehlerapp;
22

3-
import android.app.Activity;
43
import android.app.AlertDialog;
54
import android.app.ProgressDialog;
65
import android.content.Context;
@@ -11,11 +10,8 @@
1110
import android.os.Bundle;
1211
import android.preference.PreferenceManager;
1312
import android.util.Log;
14-
import android.view.Menu;
15-
import android.view.MenuItem;
1613
import android.view.View;
1714
import android.widget.TextView;
18-
import android.widget.Toast;
1915

2016
import org.json.JSONException;
2117
import org.json.JSONObject;
@@ -24,7 +20,7 @@
2420
import java.util.Date;
2521
import java.util.Locale;
2622

27-
public class ChannelDetails extends Activity {
23+
public class ChannelDetails extends CustomMenuActivity {
2824

2925
private Context myContext;
3026
private String mUUID = "";
@@ -265,49 +261,6 @@ private void callChart(String zeitRaum) {
265261
startActivity(detailChartIntent);
266262
}
267263

268-
@Override
269-
public boolean onCreateOptionsMenu(Menu menu) {
270-
// Inflate the menu; this adds items to the action bar if it is present.
271-
getMenuInflater().inflate(R.menu.main, menu);
272-
return true;
273-
}
274-
275-
@Override
276-
public boolean onOptionsItemSelected(MenuItem item) {
277-
int itemId = item.getItemId();
278-
279-
switch (itemId) {
280-
case R.id.action_settings:
281-
startActivity(new Intent(this, Preferences.class));
282-
return (true);
283-
case R.id.backup_settings:
284-
boolean saved = Tools.saveFile(getApplicationContext());
285-
if (saved) {
286-
Toast.makeText(this, R.string.saved, Toast.LENGTH_SHORT).show();
287-
} else {
288-
Toast.makeText(this, R.string.notsaved, Toast.LENGTH_SHORT).show();
289-
}
290-
return (true);
291-
case R.id.restore_settings:
292-
293-
boolean restored = Tools.loadFile(getApplicationContext());
294-
if (restored) {
295-
Toast.makeText(this, R.string.restored, Toast.LENGTH_SHORT).show();
296-
} else {
297-
Toast.makeText(this, R.string.notrestored, Toast.LENGTH_SHORT).show();
298-
}
299-
return (true);
300-
301-
302-
case R.id.about:
303-
return Tools.showAboutDialog(myContext);
304-
305-
default:
306-
break;
307-
}
308-
return super.onOptionsItemSelected(item);
309-
}
310-
311264
@Override
312265
protected void onSaveInstanceState(Bundle outState) {
313266
outState.putString("jsonStrGesamt", jsonStrGesamt);

app/src/main/java/org/volkszaehler/volkszaehlerapp/ChartDetails.java

Lines changed: 1 addition & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@
1414
import android.util.Log;
1515
import android.view.Gravity;
1616
import android.view.LayoutInflater;
17-
import android.view.Menu;
18-
import android.view.MenuItem;
1917
import android.view.MotionEvent;
2018
import android.view.View;
2119
import android.view.View.OnClickListener;
@@ -24,7 +22,6 @@
2422
import android.widget.LinearLayout;
2523
import android.widget.PopupWindow;
2624
import android.widget.TextView;
27-
import android.widget.Toast;
2825

2926
import org.achartengine.ChartFactory;
3027
import org.achartengine.GraphicalView;
@@ -47,7 +44,7 @@
4744
import java.util.Map;
4845

4946

50-
public class ChartDetails extends Activity {
47+
public class ChartDetails extends CustomMenuActivity{
5148

5249
private static final int MIN_CLICK_DURATION = 1000;
5350
private final XYMultipleSeriesDataset dataset = new XYMultipleSeriesDataset();
@@ -549,47 +546,6 @@ private void buttonShowInfoHandler(View view, String UUID) {
549546
}
550547
}
551548

552-
@Override
553-
public boolean onCreateOptionsMenu(Menu menu) {
554-
// Inflate the menu; this adds items to the action bar if it is present.
555-
getMenuInflater().inflate(R.menu.main, menu);
556-
return true;
557-
}
558-
559-
@Override
560-
public boolean onOptionsItemSelected(MenuItem item) {
561-
int itemId = item.getItemId();
562-
switch (itemId) {
563-
case R.id.action_settings:
564-
startActivity(new Intent(this, Preferences.class));
565-
return (true);
566-
case R.id.backup_settings:
567-
boolean saved = Tools.saveFile(getApplicationContext());
568-
if (saved) {
569-
Toast.makeText(this, R.string.saved, Toast.LENGTH_SHORT).show();
570-
} else {
571-
Toast.makeText(this, R.string.notsaved, Toast.LENGTH_SHORT).show();
572-
}
573-
return (true);
574-
case R.id.restore_settings:
575-
576-
boolean restored = Tools.loadFile(getApplicationContext());
577-
if (restored) {
578-
Toast.makeText(this, R.string.restored, Toast.LENGTH_SHORT).show();
579-
} else {
580-
Toast.makeText(this, R.string.notrestored, Toast.LENGTH_SHORT).show();
581-
}
582-
return (true);
583-
584-
case R.id.about:
585-
return Tools.showAboutDialog(myContext);
586-
587-
default:
588-
break;
589-
}
590-
return super.onOptionsItemSelected(item);
591-
}
592-
593549
@Override
594550
protected void onSaveInstanceState(Bundle outState) {
595551
outState.putDouble("From", from);
Lines changed: 101 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,101 @@
1+
package org.volkszaehler.volkszaehlerapp;
2+
3+
import android.Manifest;
4+
import android.content.Intent;
5+
import android.content.pm.PackageManager;
6+
import android.os.Build;
7+
import android.app.Activity;
8+
import android.support.v4.app.ActivityCompat;
9+
import android.view.Menu;
10+
import android.view.MenuItem;
11+
import android.widget.Toast;
12+
13+
public class CustomMenuActivity extends Activity {
14+
private Menu menu;
15+
private int itemId = 0;
16+
17+
18+
private boolean isStoragePermissionGranted() {
19+
if (Build.VERSION.SDK_INT >= 23) {
20+
if(R.id.backup_settings == itemId) {
21+
if (checkSelfPermission(Manifest.permission.WRITE_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
22+
//Log.d("Tools Permission check ","Permission is granted");
23+
return true;
24+
} else {
25+
//Log.d("Tools Permission check ","Permission is revoked");
26+
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
27+
return false;
28+
}
29+
} else if (R.id.restore_settings == itemId) {
30+
if (checkSelfPermission(Manifest.permission.READ_EXTERNAL_STORAGE) == PackageManager.PERMISSION_GRANTED) {
31+
//Log.d("Tools Permission check ","Permission is granted");
32+
return true;
33+
} else {
34+
//Log.d("Tools Permission check ","Permission is revoked");
35+
ActivityCompat.requestPermissions(this, new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE}, 1);
36+
return false;
37+
}
38+
}
39+
return false;
40+
}
41+
else { //permission is automatically granted on sdk<23 upon installation
42+
//Log.d("Tools Permission check ","Permission is granted automatically");
43+
return true;
44+
}
45+
}
46+
47+
@Override
48+
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
49+
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
50+
if(grantResults[0]== PackageManager.PERMISSION_GRANTED){
51+
//Log.d("Tools Permission check ","Permission: "+permissions[0]+ " was "+grantResults[0]);
52+
//resume tasks needing this permission
53+
onOptionsItemSelected(menu.findItem(itemId));
54+
}
55+
}
56+
57+
@Override
58+
public boolean onCreateOptionsMenu(Menu menu) {
59+
this.menu = menu;
60+
// Inflate the menu; this adds items to the action bar if it is present.
61+
getMenuInflater().inflate(R.menu.main, menu);
62+
return true;
63+
}
64+
65+
@Override
66+
public boolean onOptionsItemSelected(MenuItem item) {
67+
itemId = item.getItemId();
68+
switch (itemId) {
69+
case R.id.action_settings:
70+
startActivityForResult(new Intent(this, Preferences.class), 1);
71+
return (true);
72+
case R.id.backup_settings:
73+
if(isStoragePermissionGranted()) {
74+
boolean saved = Tools.saveFile(getApplicationContext());
75+
if (saved) {
76+
Toast.makeText(this, R.string.saved, Toast.LENGTH_SHORT).show();
77+
} else {
78+
Toast.makeText(this, R.string.notsaved, Toast.LENGTH_SHORT).show();
79+
}
80+
}
81+
return (true);
82+
case R.id.restore_settings:
83+
if(isStoragePermissionGranted()) {
84+
boolean restored = Tools.loadFile(getApplicationContext());
85+
if (restored) {
86+
Toast.makeText(this, R.string.restored, Toast.LENGTH_SHORT).show();
87+
} else {
88+
Toast.makeText(this, R.string.notrestored, Toast.LENGTH_SHORT).show();
89+
}
90+
}
91+
return (true);
92+
case R.id.about:
93+
return Tools.showAboutDialog(this);
94+
95+
default:
96+
break;
97+
}
98+
return super.onOptionsItemSelected(item);
99+
}
100+
101+
}

0 commit comments

Comments
 (0)