Compare commits
4 Commits
81be087252
...
v1.6.23
Author | SHA1 | Date | |
---|---|---|---|
bdfded960c | |||
d803d57af1 | |||
f9cf3356e7 | |||
c63ca88186 |
@ -49,7 +49,7 @@ android {
|
|||||||
{
|
{
|
||||||
dimension "version"
|
dimension "version"
|
||||||
// applicationIdSuffix ".fdroid"
|
// applicationIdSuffix ".fdroid"
|
||||||
versionNameSuffix "-fdroid"
|
// versionNameSuffix "-fdroid"
|
||||||
targetSdkVersion 28
|
targetSdkVersion 28
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,11 +53,11 @@ public class ActivityMainPoi extends ActivityGeneric
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(View v)
|
public void onClick(View v)
|
||||||
{
|
{
|
||||||
if(!ActivityPermissions.havePermission(ActivityPermissions.writeExternalStoragePermissionName, ActivityMainPoi.this))
|
// if(!ActivityPermissions.havePermission(ActivityPermissions.writeExternalStoragePermissionName, ActivityMainPoi.this))
|
||||||
{
|
// {
|
||||||
Toast.makeText(ActivityMainPoi.this, getResources().getString(R.string.appRequiresPermissiontoAccessExternalStorage), Toast.LENGTH_LONG).show();
|
// Toast.makeText(ActivityMainPoi.this, getResources().getString(R.string.appRequiresPermissiontoAccessExternalStorage), Toast.LENGTH_LONG).show();
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
if(!ActivityPermissions.havePermission(ActivityPermissions.permissionNameLocationCoarse, ActivityMainPoi.this) || !ActivityPermissions.havePermission(ActivityPermissions.permissionNameLocationFine, ActivityMainPoi.this))
|
if(!ActivityPermissions.havePermission(ActivityPermissions.permissionNameLocationCoarse, ActivityMainPoi.this) || !ActivityPermissions.havePermission(ActivityPermissions.permissionNameLocationFine, ActivityMainPoi.this))
|
||||||
{
|
{
|
||||||
|
@ -50,11 +50,11 @@ public class ActivityMainProfiles extends ActivityGeneric
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(View v)
|
public void onClick(View v)
|
||||||
{
|
{
|
||||||
if(!ActivityPermissions.havePermission(ActivityPermissions.writeExternalStoragePermissionName, ActivityMainProfiles.this))
|
// if(!ActivityPermissions.havePermission(ActivityPermissions.writeExternalStoragePermissionName, ActivityMainProfiles.this))
|
||||||
{
|
// {
|
||||||
Toast.makeText(ActivityMainProfiles.this, getResources().getString(R.string.appRequiresPermissiontoAccessExternalStorage), Toast.LENGTH_LONG).show();
|
// Toast.makeText(ActivityMainProfiles.this, getResources().getString(R.string.appRequiresPermissiontoAccessExternalStorage), Toast.LENGTH_LONG).show();
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
profileToEdit = null;
|
profileToEdit = null;
|
||||||
Intent manageSpecificProfileIntent = new Intent (ActivityMainProfiles.this, ActivityManageProfile.class);
|
Intent manageSpecificProfileIntent = new Intent (ActivityMainProfiles.this, ActivityManageProfile.class);
|
||||||
|
@ -52,11 +52,11 @@ public class ActivityMainRules extends ActivityGeneric
|
|||||||
@Override
|
@Override
|
||||||
public void onClick(View v)
|
public void onClick(View v)
|
||||||
{
|
{
|
||||||
if(!ActivityPermissions.havePermission(ActivityPermissions.writeExternalStoragePermissionName, ActivityMainRules.this))
|
// if(!ActivityPermissions.havePermission(ActivityPermissions.writeExternalStoragePermissionName, ActivityMainRules.this))
|
||||||
{
|
// {
|
||||||
Toast.makeText(ActivityMainRules.this, getResources().getString(R.string.appRequiresPermissiontoAccessExternalStorage), Toast.LENGTH_LONG).show();
|
// Toast.makeText(ActivityMainRules.this, getResources().getString(R.string.appRequiresPermissiontoAccessExternalStorage), Toast.LENGTH_LONG).show();
|
||||||
return;
|
// return;
|
||||||
}
|
// }
|
||||||
|
|
||||||
ruleToEdit = null;
|
ruleToEdit = null;
|
||||||
Intent startAddRuleIntent = new Intent(ActivityMainRules.this, ActivityManageRule.class);
|
Intent startAddRuleIntent = new Intent(ActivityMainRules.this, ActivityManageRule.class);
|
||||||
|
@ -281,8 +281,8 @@ public class ActivityPermissions extends Activity
|
|||||||
addToArrayListUnique("android.permission.RECEIVE_BOOT_COMPLETED", requiredPermissions);
|
addToArrayListUnique("android.permission.RECEIVE_BOOT_COMPLETED", requiredPermissions);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
if (!havePermission("android.permission.WRITE_EXTERNAL_STORAGE", workingContext))
|
// if (!havePermission(ActivityPermissions.writeExternalStoragePermissionName, workingContext))
|
||||||
addToArrayListUnique("android.permission.WRITE_EXTERNAL_STORAGE", requiredPermissions);
|
// addToArrayListUnique(ActivityPermissions.writeExternalStoragePermissionName, requiredPermissions);
|
||||||
|
|
||||||
for(Profile profile : Profile.getProfileCollection())
|
for(Profile profile : Profile.getProfileCollection())
|
||||||
{
|
{
|
||||||
|
@ -106,17 +106,17 @@ public class AutomationService extends Service implements OnInitListener
|
|||||||
|
|
||||||
public boolean checkStartupRequirements(Context context, boolean startAtBoot)
|
public boolean checkStartupRequirements(Context context, boolean startAtBoot)
|
||||||
{
|
{
|
||||||
if (!ActivityPermissions.havePermission(ActivityPermissions.writeExternalStoragePermissionName, AutomationService.this))
|
// if (!ActivityPermissions.havePermission(ActivityPermissions.writeExternalStoragePermissionName, AutomationService.this))
|
||||||
{
|
// {
|
||||||
/*
|
// /*
|
||||||
Don't have permission to access external storage. This is a show stopper as
|
// Don't have permission to access external storage. This is a show stopper as
|
||||||
the configuration file is stored on external storage.
|
// the configuration file is stored on external storage.
|
||||||
*/
|
// */
|
||||||
Miscellaneous.logEvent("e", "Permission", "Don't have permission to access external storage. Will request it now.", 4);
|
// Miscellaneous.logEvent("e", "Permission", "Don't have permission to access external storage. Will request it now.", 4);
|
||||||
// Toast.makeText(AutomationService.this, getResources().getString(R.string.appRequiresPermissiontoAccessExternalStorage), Toast.LENGTH_LONG).show();
|
//// Toast.makeText(AutomationService.this, getResources().getString(R.string.appRequiresPermissiontoAccessExternalStorage), Toast.LENGTH_LONG).show();
|
||||||
ActivityPermissions.requestSpecificPermission(ActivityPermissions.writeExternalStoragePermissionName);
|
// ActivityPermissions.requestSpecificPermission(ActivityPermissions.writeExternalStoragePermissionName);
|
||||||
return false;
|
// return false;
|
||||||
}
|
// }
|
||||||
|
|
||||||
if(Build.VERSION.SDK_INT >= 28)
|
if(Build.VERSION.SDK_INT >= 28)
|
||||||
{
|
{
|
||||||
|
@ -313,45 +313,64 @@ public class Miscellaneous extends Service
|
|||||||
{
|
{
|
||||||
if(writeableFolderStringCache == null)
|
if(writeableFolderStringCache == null)
|
||||||
{
|
{
|
||||||
String testPath = null;
|
// Use the app-specific folder as new default.
|
||||||
File folder = null;
|
writeableFolderStringCache = Miscellaneous.getAnyContext().getFilesDir().getAbsolutePath();
|
||||||
|
|
||||||
try
|
File newConfigFile = new File(writeableFolderStringCache + "/" + XmlFileInterface.settingsFileName);
|
||||||
|
|
||||||
|
migration:
|
||||||
|
if (!newConfigFile.exists())
|
||||||
{
|
{
|
||||||
String[] foldersToTestArray = new String[]
|
if (ActivityPermissions.havePermission(ActivityPermissions.writeExternalStoragePermissionName, Miscellaneous.getAnyContext()))
|
||||||
{
|
|
||||||
Environment.getExternalStorageDirectory().getAbsolutePath(),
|
|
||||||
"/storage/emulated/0",
|
|
||||||
"/HWUserData",
|
|
||||||
"/mnt/sdcard"
|
|
||||||
};
|
|
||||||
|
|
||||||
for(String f : foldersToTestArray)
|
|
||||||
{
|
{
|
||||||
if (testFolder(f))
|
// We have the storage permission, probably because it's an old installation. Files should be migrated to app-specific folder.
|
||||||
|
|
||||||
|
String testPath = null;
|
||||||
|
File folder = null;
|
||||||
|
|
||||||
|
try
|
||||||
{
|
{
|
||||||
String pathToUse = f + "/" + Settings.folderName;
|
String[] foldersToTestArray = new String[]
|
||||||
Miscellaneous.logEvent("i", "Path", "Using " + pathToUse + " to store settings and log.", 2);
|
{
|
||||||
|
Environment.getExternalStorageDirectory().getAbsolutePath(),
|
||||||
|
"/storage/emulated/0",
|
||||||
|
"/HWUserData",
|
||||||
|
"/mnt/sdcard"
|
||||||
|
};
|
||||||
|
|
||||||
|
for (String f : foldersToTestArray)
|
||||||
|
{
|
||||||
|
if (testFolder(f))
|
||||||
|
{
|
||||||
|
String pathToUse = f + "/" + Settings.folderName;
|
||||||
|
|
||||||
// Toast.makeText(getAnyContext(), "Using " + pathToUse + " to store settings and log.", Toast.LENGTH_LONG).show();
|
// Toast.makeText(getAnyContext(), "Using " + pathToUse + " to store settings and log.", Toast.LENGTH_LONG).show();
|
||||||
return pathToUse;
|
// Migrate existing files
|
||||||
|
File oldDirectory = new File(pathToUse);
|
||||||
|
File newDirectory = new File(writeableFolderStringCache);
|
||||||
|
File oldConfigFilePath = new File(pathToUse + "/" + XmlFileInterface.settingsFileName);
|
||||||
|
if (oldConfigFilePath.exists() && oldConfigFilePath.canWrite())
|
||||||
|
{
|
||||||
|
Miscellaneous.logEvent("i", "Path", "Found old path " + pathToUse + " for settings and logs. Migrating old files to new directory.", 2);
|
||||||
|
|
||||||
|
for (File moveFile : oldDirectory.listFiles())
|
||||||
|
moveFile.renameTo(newDirectory);
|
||||||
|
|
||||||
|
String message = String.format(Miscellaneous.getAnyContext().getResources().getString(R.string.filesHaveBeenMovedTo), newDirectory.getAbsolutePath());
|
||||||
|
Miscellaneous.writeStringToFile(oldDirectory.getAbsolutePath() + "readme.txt", message);
|
||||||
|
break migration;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} catch (Exception e)
|
||||||
|
{
|
||||||
|
Log.w("getWritableFolder", folder + " not writable.");
|
||||||
}
|
}
|
||||||
else
|
|
||||||
Miscellaneous.logEvent("e", "getWritableFolder", folder.getAbsolutePath() + " does not exist and could not be created.", 3);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(Exception e)
|
|
||||||
{
|
|
||||||
Log.w("getWritableFolder", folder + " not writable.");
|
|
||||||
}
|
|
||||||
|
|
||||||
// do not change to logEvent() - we can't write
|
|
||||||
Toast.makeText(getAnyContext(), "No writable folder could be found.", Toast.LENGTH_LONG).show();
|
|
||||||
Log.e("getWritableFolder", "No writable folder could be found.");
|
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
else
|
|
||||||
return writeableFolderStringCache;
|
return writeableFolderStringCache;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected final static String logFileName = "Automation_logfile.txt";
|
protected final static String logFileName = "Automation_logfile.txt";
|
||||||
|
@ -107,7 +107,7 @@ public class Settings implements SharedPreferences
|
|||||||
protected static final boolean default_privacyLocationing = false;
|
protected static final boolean default_privacyLocationing = false;
|
||||||
protected static final int default_startScreen = 0;
|
protected static final int default_startScreen = 0;
|
||||||
protected static final boolean default_executeRulesAndProfilesWithSingleClick = false;
|
protected static final boolean default_executeRulesAndProfilesWithSingleClick = false;
|
||||||
protected static final boolean default_displayNewsOnMainScreen = true;
|
protected static final boolean default_displayNewsOnMainScreen = false;
|
||||||
protected static final boolean default_lockSoundChanges = false;
|
protected static final boolean default_lockSoundChanges = false;
|
||||||
protected static final long default_lastNewsPolltime = -1;
|
protected static final long default_lastNewsPolltime = -1;
|
||||||
|
|
||||||
|
@ -25,7 +25,8 @@ import java.util.Collections;
|
|||||||
|
|
||||||
public class XmlFileInterface
|
public class XmlFileInterface
|
||||||
{
|
{
|
||||||
public static File settingsFile = new File(Miscellaneous.getWriteableFolder() + "/Automation_settings.xml");
|
public static String settingsFileName = "Automation_settings.xml";
|
||||||
|
public static File settingsFile = new File(Miscellaneous.getWriteableFolder() + "/" + settingsFileName);
|
||||||
public static Context context;
|
public static Context context;
|
||||||
|
|
||||||
protected static final String encryptionKey = "Y1vsP12L2S3NkTJbDOR4bQ6i02hsoo";
|
protected static final String encryptionKey = "Y1vsP12L2S3NkTJbDOR4bQ6i02hsoo";
|
||||||
@ -344,17 +345,22 @@ public class XmlFileInterface
|
|||||||
|
|
||||||
public static void readFile() throws FileNotFoundException
|
public static void readFile() throws FileNotFoundException
|
||||||
{
|
{
|
||||||
if(!ActivityPermissions.havePermission(ActivityPermissions.writeExternalStoragePermissionName, Miscellaneous.getAnyContext()))
|
/*
|
||||||
{
|
Storage location has been moved to app-specific folder in Android/data
|
||||||
/*
|
Hence this permission is not requested any more. If it is already granted we assume the files are on /sdcard or similar.
|
||||||
Don't have permission to access external storage. This is a show stopper as
|
Migration to app-specific folder has yet to be implemented.
|
||||||
the configuration file is stored on external storage.
|
*/
|
||||||
*/
|
// if(!ActivityPermissions.havePermission(ActivityPermissions.writeExternalStoragePermissionName, Miscellaneous.getAnyContext()))
|
||||||
Miscellaneous.logEvent("e", "Permission", "Don't have permission to access external storage. Will request it now.", 4);
|
// {
|
||||||
Toast.makeText(Miscellaneous.getAnyContext(), Miscellaneous.getAnyContext().getResources().getString(R.string.appRequiresPermissiontoAccessExternalStorage), Toast.LENGTH_LONG).show();
|
// /*
|
||||||
ActivityPermissions.requestSpecificPermission(ActivityPermissions.writeExternalStoragePermissionName);
|
// Don't have permission to access external storage. This is a show stopper as
|
||||||
return;
|
// the configuration file is stored on external storage.
|
||||||
}
|
// */
|
||||||
|
// Miscellaneous.logEvent("e", "Permission", "Don't have permission to access external storage. Will request it now.", 4);
|
||||||
|
// Toast.makeText(Miscellaneous.getAnyContext(), Miscellaneous.getAnyContext().getResources().getString(R.string.appRequiresPermissiontoAccessExternalStorage), Toast.LENGTH_LONG).show();
|
||||||
|
// ActivityPermissions.requestSpecificPermission(ActivityPermissions.writeExternalStoragePermissionName);
|
||||||
|
// return;
|
||||||
|
// }
|
||||||
|
|
||||||
/*
|
/*
|
||||||
If we are here it may be that we just got permission to read storage. We need to check for the
|
If we are here it may be that we just got permission to read storage. We need to check for the
|
||||||
|
@ -605,4 +605,5 @@
|
|||||||
<string name="publishedOn">published on</string>
|
<string name="publishedOn">published on</string>
|
||||||
<string name="displayNewsOnMainScreen">Display application news on main screen</string>
|
<string name="displayNewsOnMainScreen">Display application news on main screen</string>
|
||||||
<string name="displayNewsOnMainScreenDescription">Announcements about this app only, we\'re probably talking about 1-2 per year, not more.</string>
|
<string name="displayNewsOnMainScreenDescription">Announcements about this app only, we\'re probably talking about 1-2 per year, not more.</string>
|
||||||
|
<string name="filesHaveBeenMovedTo">Automation now uses another path to store your files. The existing ones have been moved. You can find them here: %s.</string>
|
||||||
</resources>
|
</resources>
|
Reference in New Issue
Block a user