Skip to content

Commit

Permalink
Merge pull request #90 from victordiaz/location-bg-permission
Browse files Browse the repository at this point in the history
add location background permission
  • Loading branch information
victordiaz committed Dec 22, 2020
2 parents a9d08e5 + 02962a1 commit 7d4a6a6
Show file tree
Hide file tree
Showing 15 changed files with 161 additions and 81 deletions.
6 changes: 3 additions & 3 deletions build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -5,13 +5,13 @@ buildscript {
google()
}
dependencies {
classpath 'com.android.tools.build:gradle:4.0.0'
classpath 'com.android.tools.build:gradle:4.1.0'
}
}

project.ext {
versionCode = 133
versionName = "1.3.1"
versionCode = 134
versionName = "1.3.2"
compileSdkVersion = 29
targetSdkVersion = 29
minSdkVersion = 16
Expand Down
4 changes: 2 additions & 2 deletions gradle/wrapper/gradle-wrapper.properties
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
#Sat Jun 20 02:01:10 CEST 2020
#Mon Dec 21 13:07:08 CET 2020
distributionBase=GRADLE_USER_HOME
distributionPath=wrapper/dists
zipStoreBase=GRADLE_USER_HOME
zipStorePath=wrapper/dists
distributionUrl=https\://services.gradle.org/distributions/gradle-6.1.1-all.zip
distributionUrl=https\://services.gradle.org/distributions/gradle-6.5-bin.zip
4 changes: 4 additions & 0 deletions phonk_app/src/main/assets/changelog.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
1.3.2
- Ask permission for background location
- Settings has a new entry that asks again for permissions

1.3.1
- Http request is refactored to be more flexible supporting headers, methods, etc
- MQTT shows more descriptive errors
Expand Down
67 changes: 16 additions & 51 deletions phonk_app/src/main/java/io/phonk/WelcomeActivity.java
Original file line number Diff line number Diff line change
Expand Up @@ -27,21 +27,24 @@
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.provider.Settings;
import android.view.MenuItem;
import android.view.View;
import android.view.animation.AnimationUtils;
import android.widget.Button;
import android.widget.LinearLayout;
import android.widget.Toast;
import android.widget.ViewFlipper;

import com.google.android.material.snackbar.Snackbar;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import io.phonk.gui.settings.PhonkSettings;
import io.phonk.gui.settings.UserPreferences;
import io.phonk.helpers.PhonkAppHelper;
import io.phonk.helpers.PhonkSettingsHelper;
import io.phonk.runner.base.BaseActivity;
import io.phonk.runner.base.utils.AndroidUtils;
Expand Down Expand Up @@ -125,48 +128,6 @@ public boolean onOptionsItemSelected(MenuItem item) {
return super.onOptionsItemSelected(item);
}

private void checkPermissions() {
List<String> requiredPermissions = new ArrayList<String>();

requiredPermissions.add(Manifest.permission.INTERNET);
requiredPermissions.add(Manifest.permission.ACCESS_WIFI_STATE);
requiredPermissions.add(Manifest.permission.CHANGE_WIFI_STATE);
requiredPermissions.add(Manifest.permission.CHANGE_WIFI_MULTICAST_STATE);
requiredPermissions.add(Manifest.permission.ACCESS_NETWORK_STATE);
requiredPermissions.add(Manifest.permission.VIBRATE);
requiredPermissions.add(Manifest.permission.WAKE_LOCK);
requiredPermissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
requiredPermissions.add(Manifest.permission.READ_PHONE_STATE);
requiredPermissions.add(Manifest.permission.BLUETOOTH);
requiredPermissions.add(Manifest.permission.BLUETOOTH_ADMIN);
requiredPermissions.add(Manifest.permission.WRITE_SETTINGS);
requiredPermissions.add(Manifest.permission.NFC);
requiredPermissions.add(Manifest.permission.RECEIVE_SMS);
requiredPermissions.add(Manifest.permission.SEND_SMS);
requiredPermissions.add(Manifest.permission.INSTALL_SHORTCUT);
requiredPermissions.add(Manifest.permission.CAMERA);
// requiredPermissions.add(Manifest.permission.FLASHLIGHT);
requiredPermissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
requiredPermissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
requiredPermissions.add(Manifest.permission.MODIFY_AUDIO_SETTINGS);
requiredPermissions.add(Manifest.permission.RECORD_AUDIO);
requiredPermissions.add(Manifest.permission.SYSTEM_ALERT_WINDOW);

// check if permission is already granted
for (int i = 0; i < requiredPermissions.size(); i++) {
String permissionName = requiredPermissions.get(i);
int isGranted1 = checkSelfPermission(permissionName);
int isGranted2 = isGranted1 & PackageManager.PERMISSION_GRANTED;

MLog.d(TAG, permissionName + " " + isGranted1 + " " + isGranted2);
}

// request the permissions
if (!requiredPermissions.isEmpty()) {
requestPermissions(requiredPermissions.toArray(new String[requiredPermissions.size()]), REQUEST_CODE_SOME_FEATURES_PERMISSIONS);
}
}

@Override
public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
boolean isPermissionWriteExternalGranted = false;
Expand All @@ -188,11 +149,17 @@ public void onRequestPermissionsResult(int requestCode, String[] permissions, in
// requiredPermissions.remove(i);
}

// if ok go next step otherwise repeat step
if (isPermissionWriteExternalGranted) goToStep(STEP_ASK_PERMISSIONS_OK);
else goToStep(STEP_ASK_PERMISSIONS_ERROR);
// we need permission to access the external storage
// if we dont have it we ask again
if (isPermissionWriteExternalGranted) {
goToStep(STEP_ASK_PERMISSIONS_OK);
} else {
goToStep(STEP_ASK_PERMISSIONS_ERROR);
Toast.makeText(this, "External storage is required", Toast.LENGTH_LONG).show();
}
}
break;

default: {
super.onRequestPermissionsResult(requestCode, permissions, grantResults);
}
Expand Down Expand Up @@ -242,8 +209,7 @@ public void goToStep(int step) {

case STEP_ASK_PERMISSIONS_PROCESS:
mNextStepButton.setEnabled(false);

checkPermissions();
PhonkAppHelper.requestPermissions(this, REQUEST_CODE_SOME_FEATURES_PERMISSIONS);

break;

Expand Down Expand Up @@ -300,7 +266,6 @@ public void goToStep(int step) {
ready();

break;

}
step++;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@

import android.annotation.SuppressLint;
import android.os.Bundle;

import io.phonk.R;
import io.phonk.runner.base.BaseActivity;

Expand All @@ -45,5 +44,4 @@ protected void setupActivity() {
super.setupActivity();
enableBackOnToolbar();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@
import io.phonk.BuildConfig;
import io.phonk.R;
import io.phonk.gui.LicenseActivity;
import io.phonk.helpers.PhonkAppHelper;
import io.phonk.helpers.PhonkSettingsHelper;

@TargetApi(Build.VERSION_CODES.ICE_CREAM_SANDWICH)
Expand Down Expand Up @@ -72,7 +73,6 @@ public static SettingsFragment newInstance() {
//twostatepreference(boolean)->action/action edittextpreference(text)->action preference->action
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
// View mParentView = super.onCreateView(inflater, container, savedInstanceState);
mParentView = super.onCreateView(inflater, container, savedInstanceState);

mContext = getActivity();
Expand Down Expand Up @@ -116,7 +116,6 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
});
prefWakeUpOnPlay.setChecked((Boolean) mUserPreferences.get("device_wakeup_on_play"));


// Start servers on launch
final TwoStatePreference prefMaskIp = (TwoStatePreference) findPreference("servers_mask_ip");
prefMaskIp.setOnPreferenceChangeListener((preference, o) -> {
Expand Down Expand Up @@ -261,6 +260,12 @@ public boolean onPreferenceClick(Preference arg0) {
return true;
});

Preference btnRequestPermissions = findPreference("request_permissions");
btnRequestPermissions.setOnPreferenceClickListener(preference -> {
PhonkAppHelper.launchAppSettings(getActivity());
return true;
});


/*
// Connection alert mode
Expand Down Expand Up @@ -352,7 +357,5 @@ public void onClick(DialogInterface dialog, int id) {
*/

return mParentView;

}

}
69 changes: 67 additions & 2 deletions phonk_app/src/main/java/io/phonk/helpers/PhonkAppHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,10 +22,15 @@

package io.phonk.helpers;

import android.Manifest;
import android.app.Activity;
import android.content.ComponentName;
import android.content.Context;
import android.content.Intent;
import android.content.pm.PackageManager;
import android.net.Uri;
import android.net.wifi.WifiManager;
import android.provider.Settings;
import android.widget.Toast;

import androidx.fragment.app.FragmentManager;
Expand All @@ -35,6 +40,8 @@
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;

import io.phonk.MainActivity;
import io.phonk.events.Events;
Expand Down Expand Up @@ -139,6 +146,14 @@ public static void launchHotspotSettings(Context context) {
}
}

public static void launchAppSettings(Context c) {
Intent intent = new Intent(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
Uri uri = Uri.fromParts("package", c.getPackageName(), null);
intent.setData(uri);
// c.startActivityForResult(intent, REQUEST_PERMISSION_SETTING);
c.startActivity(intent);
}

public static void newProjectDialog(final MainActivity c) {
FragmentManager fm = c.getSupportFragmentManager();
NewProjectDialogFragment newProjectDialog = new NewProjectDialogFragment();
Expand All @@ -161,7 +176,6 @@ public static void newProjectDialog(final MainActivity c) {
});
}


public static void openInWebEditor(final Context c, Project p) {
Intent i = new Intent("io.phonk.intent.WEBEDITOR_SEND");

Expand All @@ -173,7 +187,6 @@ public static void openInWebEditor(final Context c, Project p) {
c.sendBroadcast(i);
}


public static String readFile(Context c, String path) {
InputStream is = null;
ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream();
Expand All @@ -198,4 +211,56 @@ public static String readFile(Context c, String path) {

return byteArrayOutputStream.toString();
}

public static void requestPermissions(Activity ac, int requestCode) {
if (android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.M) {
Toast.makeText(ac, "Permissions are only available from Android 6.0", Toast.LENGTH_LONG).show();
return;
}

List<String> requiredPermissions = new ArrayList<String>();
requiredPermissions.add(Manifest.permission.INTERNET);
requiredPermissions.add(Manifest.permission.ACCESS_WIFI_STATE);
requiredPermissions.add(Manifest.permission.CHANGE_WIFI_STATE);
requiredPermissions.add(Manifest.permission.CHANGE_WIFI_MULTICAST_STATE);
requiredPermissions.add(Manifest.permission.ACCESS_NETWORK_STATE);
requiredPermissions.add(Manifest.permission.VIBRATE);
requiredPermissions.add(Manifest.permission.WAKE_LOCK);
requiredPermissions.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
requiredPermissions.add(Manifest.permission.READ_PHONE_STATE);
requiredPermissions.add(Manifest.permission.BLUETOOTH);
requiredPermissions.add(Manifest.permission.BLUETOOTH_ADMIN);
requiredPermissions.add(Manifest.permission.WRITE_SETTINGS);
requiredPermissions.add(Manifest.permission.NFC);
requiredPermissions.add(Manifest.permission.RECEIVE_SMS);
requiredPermissions.add(Manifest.permission.INSTALL_SHORTCUT);
requiredPermissions.add(Manifest.permission.CAMERA);

// requiredPermissions.add(Manifest.permission.FLASHLIGHT);

requiredPermissions.add(Manifest.permission.ACCESS_FINE_LOCATION);
requiredPermissions.add(Manifest.permission.ACCESS_COARSE_LOCATION);
requiredPermissions.add(Manifest.permission.ACCESS_BACKGROUND_LOCATION);
requiredPermissions.add(Manifest.permission.MODIFY_AUDIO_SETTINGS);
requiredPermissions.add(Manifest.permission.RECORD_AUDIO);
requiredPermissions.add(Manifest.permission.SYSTEM_ALERT_WINDOW);

// check if permission is already granted
for (int i = 0; i < requiredPermissions.size(); i++) {
String permissionName = requiredPermissions.get(i);
int isGranted1 = ac.checkSelfPermission(permissionName);
int isGranted2 = isGranted1 & PackageManager.PERMISSION_GRANTED;

MLog.d(TAG, permissionName + " " + isGranted1 + " " + isGranted2);
// requiredPermissions.remove(i);
}

MLog.d(TAG, "" + requiredPermissions.isEmpty());

// request the permissions
//if (!requiredPermissions.isEmpty()) {
ac.requestPermissions(requiredPermissions.toArray(new String[requiredPermissions.size()]), requestCode);
//}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,6 @@ public interface InstallListener {
}

public static void installExamples(final Context c, final String assetsName, final InstallListener l) {

new Thread(() -> {
File dir = new File(PhonkSettings.getBaseDir() + assetsName);
FileIO.deleteDir(dir);
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
<!--
~ Part of Phonk http://www.phonk.io
~ A prototyping platform for Android devices
~
~ Copyright (C) 2013 - 2017 Victor Diaz Barrales @victordiaz (Protocoder)
~ Copyright (C) 2017 - Victor Diaz Barrales @victordiaz (Phonk)
~
~ Phonk is free software: you can redistribute it and/or modify
~ it under the terms of the GNU General Public License as published by
~ the Free Software Foundation, either version 3 of the License, or
~ (at your option) any later version.
~
~ Phonk is distributed in the hope that it will be useful,
~ but WITHOUT ANY WARRANTY; without even the implied warranty of
~ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
~ GNU General Public License for more details.
~
~ You should have received a copy of the GNU General Public License
~ along with Phonk. If not, see <http://www.gnu.org/licenses/>.
~
-->

<vector android:height="24dp" android:tint="#FFFFFF"
android:viewportHeight="24" android:viewportWidth="24"
android:width="24dp" xmlns:android="http://schemas.android.com/apk/res/android">
<path android:fillColor="@android:color/white" android:pathData="M13,7h-2v2h2L13,7zM13,11h-2v6h2v-6zM17,1.01L7,1c-1.1,0 -2,0.9 -2,2v18c0,1.1 0.9,2 2,2h10c1.1,0 2,-0.9 2,-2L19,3c0,-1.1 -0.9,-1.99 -2,-1.99zM17,19L7,19L7,5h10v14z"/>
</vector>
2 changes: 1 addition & 1 deletion phonk_app/src/main/res/layout/update_activity.xml
Original file line number Diff line number Diff line change
Expand Up @@ -170,7 +170,7 @@
android:layout_marginLeft="10dp"
android:text="Re-installing..."
android:textColor="@color/white"
android:textSize="18sp"></TextView>
android:textSize="16sp"></TextView>
</LinearLayout>

<Button
Expand Down
5 changes: 3 additions & 2 deletions phonk_app/src/main/res/layout/welcome_activity.xml
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fitsSystemWindows="true"
android:animateLayoutChanges="true"
>

<LinearLayout
Expand Down Expand Up @@ -83,8 +84,8 @@
android:text="Installing..."
android:layout_gravity="center"
android:textColor="@color/white"
android:textSize="18sp"
></TextView>
android:textSize="16sp"
/>

</LinearLayout>

Expand Down
Loading

0 comments on commit 7d4a6a6

Please sign in to comment.